data drive the import movies dialog filter
This commit is contained in:
parent
0235ca21ab
commit
673073e650
|
@ -3,7 +3,7 @@
|
|||
namespace BizHawk.Client.Common.movie.import
|
||||
{
|
||||
// ReSharper disable once UnusedMember.Global
|
||||
[ImportExtension(".bkm")]
|
||||
[ImportExtension("BizHawk", ".bkm")]
|
||||
internal class BkmImport : MovieImporter
|
||||
{
|
||||
protected override void RunImport()
|
||||
|
|
|
@ -9,7 +9,7 @@ namespace BizHawk.Client.Common.movie.import
|
|||
{
|
||||
// FCM file format: http://code.google.com/p/fceu/wiki/FCM
|
||||
// ReSharper disable once UnusedMember.Global
|
||||
[ImportExtension(".fcm")]
|
||||
[ImportExtension("FCEU", ".fcm")]
|
||||
internal class FcmImport : MovieImporter
|
||||
{
|
||||
private IControllerDeck _deck;
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace BizHawk.Client.Common
|
|||
{
|
||||
// FM2 file format: http://www.fceux.com/web/FM2.html
|
||||
// ReSharper disable once UnusedMember.Global
|
||||
[ImportExtension(".fm2")]
|
||||
[ImportExtension("FCEUX", ".fm2")]
|
||||
internal class Fm2Import : MovieImporter
|
||||
{
|
||||
protected override void RunImport()
|
||||
|
|
|
@ -5,7 +5,7 @@ namespace BizHawk.Client.Common.movie.import
|
|||
{
|
||||
// FMV file format: http://tasvideos.org/FMV.html
|
||||
// ReSharper disable once UnusedMember.Global
|
||||
[ImportExtension(".fmv")]
|
||||
[ImportExtension("Famtasia", ".fmv")]
|
||||
internal class FmvImport : MovieImporter
|
||||
{
|
||||
private IControllerDeck _deck;
|
||||
|
|
|
@ -5,7 +5,7 @@ namespace BizHawk.Client.Common.movie.import
|
|||
{
|
||||
// GMV file format: http://code.google.com/p/gens-rerecording/wiki/GMV
|
||||
// ReSharper disable once UnusedMember.Global
|
||||
[ImportExtension(".gmv")]
|
||||
[ImportExtension("GENS", ".gmv")]
|
||||
internal class GmvImport : MovieImporter
|
||||
{
|
||||
protected override void RunImport()
|
||||
|
|
|
@ -103,11 +103,13 @@ namespace BizHawk.Client.Common
|
|||
[AttributeUsage(AttributeTargets.Class)]
|
||||
public class ImportExtensionAttribute : Attribute
|
||||
{
|
||||
public ImportExtensionAttribute(string extension)
|
||||
public ImportExtensionAttribute(string emulator, string extension)
|
||||
{
|
||||
Emulator = emulator;
|
||||
Extension = extension;
|
||||
}
|
||||
|
||||
public string Emulator { get; }
|
||||
public string Extension { get; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ namespace BizHawk.Client.Common.movie.import
|
|||
{
|
||||
// ReSharper disable once UnusedMember.Global
|
||||
// LSMV file format: http://tasvideos.org/Lsnes/Movieformat.html
|
||||
[ImportExtension(".lsmv")]
|
||||
[ImportExtension("LSNES", ".lsmv")]
|
||||
internal class LsmvImport : MovieImporter
|
||||
{
|
||||
private LibsnesControllerDeck _deck;
|
||||
|
|
|
@ -4,7 +4,7 @@ namespace BizHawk.Client.Common.movie.import
|
|||
{
|
||||
// MC2 file format: http://code.google.com/p/pcejin/wiki/MC2
|
||||
// ReSharper disable once UnusedMember.Global
|
||||
[ImportExtension(".mc2")]
|
||||
[ImportExtension("PCEjin/Mednafen", ".mc2")]
|
||||
internal class Mc2Import : MovieImporter
|
||||
{
|
||||
private PceControllerDeck _deck;
|
||||
|
|
|
@ -6,7 +6,7 @@ namespace BizHawk.Client.Common.movie.import
|
|||
{
|
||||
// ReSharper disable once UnusedMember.Global
|
||||
// MMV file format: http://tasvideos.org/MMV.html
|
||||
[ImportExtension(".mmv")]
|
||||
[ImportExtension("Dega", ".mmv")]
|
||||
internal class MmvImport : MovieImporter
|
||||
{
|
||||
protected override void RunImport()
|
||||
|
|
|
@ -15,9 +15,17 @@ namespace BizHawk.Client.Common
|
|||
{
|
||||
return Importers
|
||||
.Select(i => i.Value)
|
||||
.Any(e => string.Equals(extension, e, StringComparison.OrdinalIgnoreCase));
|
||||
.Any(e => string.Equals(extension, e.Extension, StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
|
||||
public static Dictionary<string, string> AvailableImporters()
|
||||
{
|
||||
return Importers
|
||||
.OrderBy(i => i.Value.Emulator)
|
||||
.ToDictionary(tkey => tkey.Value.Emulator, tvalue => tvalue.Value.Extension);
|
||||
}
|
||||
|
||||
|
||||
// Attempt to import another type of movie file into a movie object.
|
||||
public static ImportResult ImportFile(string path)
|
||||
{
|
||||
|
@ -30,9 +38,9 @@ namespace BizHawk.Client.Common
|
|||
}
|
||||
|
||||
// Create a new instance of the importer class using the no-argument constructor
|
||||
IMovieImport importer = importerType
|
||||
IMovieImport importer = (IMovieImport)importerType
|
||||
.GetConstructor(new Type[] { })
|
||||
?.Invoke(new object[] { }) as IMovieImport;
|
||||
?.Invoke(new object[] { });
|
||||
|
||||
if (importer == null)
|
||||
{
|
||||
|
@ -44,14 +52,14 @@ namespace BizHawk.Client.Common
|
|||
|
||||
private static Type ImporterForExtension(string ext)
|
||||
{
|
||||
return Importers.FirstOrDefault(i => string.Equals(i.Value, ext, StringComparison.OrdinalIgnoreCase)).Key;
|
||||
return Importers.FirstOrDefault(i => string.Equals(i.Value.Extension, ext, StringComparison.OrdinalIgnoreCase)).Key;
|
||||
}
|
||||
|
||||
private static readonly Dictionary<Type, string> Importers = Assembly.GetAssembly(typeof(ImportExtensionAttribute))
|
||||
private static readonly Dictionary<Type, ImportExtensionAttribute> Importers = Assembly.GetAssembly(typeof(ImportExtensionAttribute))
|
||||
.GetTypes()
|
||||
.Where(t => t.GetCustomAttributes(typeof(ImportExtensionAttribute))
|
||||
.Any())
|
||||
.ToDictionary(tkey => tkey, tvalue => ((ImportExtensionAttribute)tvalue.GetCustomAttributes(typeof(ImportExtensionAttribute))
|
||||
.First()).Extension);
|
||||
.First()));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ using BizHawk.Emulation.Cores.Sony.PSX;
|
|||
|
||||
namespace BizHawk.Client.Common
|
||||
{
|
||||
[ImportExtension(".pjm")]
|
||||
[ImportExtension("PSXjin", ".pjm")]
|
||||
internal class PjmImport : MovieImporter
|
||||
{
|
||||
protected override void RunImport()
|
||||
|
|
|
@ -9,7 +9,7 @@ namespace BizHawk.Client.Common.Movie.Import
|
|||
// However, the magic number/file signature is slightly different, requiring some
|
||||
// refactoring to avoid PXM-specific code in the PJMImport class.
|
||||
// ReSharper disable once UnusedMember.Global
|
||||
[ImportExtension(".pxm")]
|
||||
[ImportExtension("PCSX", ".pxm")]
|
||||
internal class PxmImport : PjmImport
|
||||
{
|
||||
protected override void RunImport()
|
||||
|
|
|
@ -7,7 +7,7 @@ namespace BizHawk.Client.Common.movie.import
|
|||
{
|
||||
// ReSharper disable once UnusedMember.Global
|
||||
// http://tasvideos.org/EmulatorResources/Snes9x/SMV.html
|
||||
[ImportExtension(".smv")]
|
||||
[ImportExtension("Snes9x", ".smv")]
|
||||
internal class SmvImport : MovieImporter
|
||||
{
|
||||
private LibsnesControllerDeck _deck;
|
||||
|
|
|
@ -7,7 +7,7 @@ namespace BizHawk.Client.Common.movie.import
|
|||
{
|
||||
// VBM file format: http://code.google.com/p/vba-rerecording/wiki/VBM
|
||||
// ReSharper disable once UnusedMember.Global
|
||||
[ImportExtension(".vbm")]
|
||||
[ImportExtension("Visual Boy Advance", ".vbm")]
|
||||
internal class VbmImport : MovieImporter
|
||||
{
|
||||
protected override void RunImport()
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace BizHawk.Client.Common.movie.import
|
|||
{
|
||||
// https://code.google.com/archive/p/yabause-rr/wikis/YMVfileformat.wiki
|
||||
// ReSharper disable once UnusedMember.Global
|
||||
[ImportExtension(".ymv")]
|
||||
[ImportExtension("Yabause", ".ymv")]
|
||||
internal class YmvImport : MovieImporter
|
||||
{
|
||||
protected override void RunImport()
|
||||
|
|
|
@ -3,7 +3,7 @@ using System.Drawing;
|
|||
using System.IO;
|
||||
using System.Windows.Forms;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using System.Linq;
|
||||
using BizHawk.Emulation.Common;
|
||||
using BizHawk.Emulation.Common.IEmulatorExtensions;
|
||||
using BizHawk.Emulation.Cores.Calculators;
|
||||
|
@ -515,25 +515,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
InitialDirectory = PathManager.GetRomsPath(Emulator.SystemId),
|
||||
Multiselect = true,
|
||||
Filter = FormatFilter(
|
||||
"Movie Files", "*.fm2;*.mc2;*.mcm;*.mmv;*.gmv;*.vbm;*.lsmv;*.fcm;*.fmv;*.vmv;*.nmv;*.smv;*.ymv;*.zmv;*.bkm;*.pjm;*.pxm",
|
||||
"FCEUX", "*.fm2",
|
||||
"PCEjin/Mednafen", "*.mc2;*.mcm",
|
||||
"Dega", "*.mmv",
|
||||
"Gens", "*.gmv",
|
||||
"Visual Boy Advance", "*.vbm",
|
||||
"LSNES", "*.lsmv",
|
||||
"FCEU", "*.fcm",
|
||||
"Famtasia", "*.fmv",
|
||||
"VirtuaNES", "*.vmv",
|
||||
"Nintendulator", "*.nmv",
|
||||
"Snes9x", "*.smv",
|
||||
"Yabause", "*.ymv",
|
||||
"ZSNES", "*.zmv",
|
||||
"PSXjin", "*.pjm",
|
||||
"PCSX", "*.pxm",
|
||||
"BizHawk Bkm", "*.bkm",
|
||||
"All Files", "*.*"),
|
||||
Filter = ToFilter("Movie Files", MovieImport.AvailableImporters()),
|
||||
RestoreDirectory = false
|
||||
};
|
||||
|
||||
|
|
|
@ -2077,6 +2077,26 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
}
|
||||
|
||||
public static string ToFilter(string name, IDictionary<string, string> entries)
|
||||
{
|
||||
var items = new List<string>
|
||||
{
|
||||
name,
|
||||
string.Join(";", entries.Select(e => $"*{e.Value}"))
|
||||
};
|
||||
|
||||
foreach (var kvp in entries)
|
||||
{
|
||||
items.Add(kvp.Key);
|
||||
items.Add($"*{kvp.Value}");
|
||||
}
|
||||
|
||||
items.Add("All Files");
|
||||
items.Add("*.*");
|
||||
|
||||
return FormatFilter(items.ToArray());
|
||||
}
|
||||
|
||||
public static string FormatFilter(params string[] args)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
|
|
Loading…
Reference in New Issue