Cleanup usage of Config.PreferredPlatformsForExtensions

This commit is contained in:
YoshiRulz 2021-02-23 05:35:05 +10:00
parent 4103a8bab2
commit cc7e440fba
No known key found for this signature in database
GPG Key ID: C4DE31C245353FB7
3 changed files with 26 additions and 20 deletions

View File

@ -191,16 +191,6 @@ namespace BizHawk.Client.Common
OnLoadError?.Invoke(this, new RomErrorArgs(message, systemId, path, det, type));
}
private bool PreferredPlatformIsDefined(string extension)
{
if (_config.PreferredPlatformsForExtensions.ContainsKey(extension))
{
return !string.IsNullOrEmpty(_config.PreferredPlatformsForExtensions[extension]);
}
return false;
}
public IOpenAdvanced OpenAdvanced { get; set; }
private bool HandleArchiveBinding(HawkFile file)
@ -290,9 +280,7 @@ namespace BizHawk.Client.Common
case DiscType.AudioDisc:
case DiscType.UnknownCDFS:
case DiscType.UnknownFormat:
game.System = PreferredPlatformIsDefined(ext)
? _config.PreferredPlatformsForExtensions[ext]
: "NULL";
game.System = _config.TryGetChosenSystemForFileExt(ext, out var sysID) ? sysID : "NULL";
break;
default: //"for an unknown disc, default to psx instead of pce-cd, since that is far more likely to be what they are attempting to open" [5e07ab3ec3b8b8de9eae71b489b55d23a3909f55, year 2015]
@ -439,9 +427,9 @@ namespace BizHawk.Client.Common
if (string.IsNullOrEmpty(rom.GameInfo.System))
{
// Has the user picked a preference for this extension?
if (PreferredPlatformIsDefined(rom.Extension.ToLowerInvariant()))
if (_config.TryGetChosenSystemForFileExt(rom.Extension.ToLowerInvariant(), out var systemID))
{
rom.GameInfo.System = _config.PreferredPlatformsForExtensions[rom.Extension.ToLowerInvariant()];
rom.GameInfo.System = systemID;
}
else if (ChoosePlatform != null)
{

View File

@ -38,14 +38,18 @@ namespace BizHawk.Client.Common
PathEntries.RefreshTempPath();
}
// Core preference for generic file extension, key: file extension, value: a systemID or empty if no preference
/// <summary>
/// Used to determine the system a rom is classified as (and thus which core to use) for the times when our romloading autodetect magic can't determine a system.
/// Keys are file extensions, include the leading period in each, and use lowercase;
/// values are system IDs, use <see cref="string.Empty"/> for unset (though <see langword="null"/> should also work, omitting will remove from UI).
/// </summary>
public Dictionary<string, string> PreferredPlatformsForExtensions { get; set; } = new Dictionary<string, string>
{
[".bin"] = "",
[".rom"] = "",
[".iso"] = "",
[".bin"] = "",
[".cue"] = "",
[".img"] = "",
[".cue"] = ""
[".iso"] = "",
[".rom"] = "",
};
public PathEntryCollection PathEntries { get; set; } = new PathEntryCollection();

View File

@ -135,5 +135,19 @@ namespace BizHawk.Client.Common
{
config.PutCoreSyncSettings(o, typeof(TCore));
}
/// <param name="fileExt">file extension, including the leading period and in lowercase</param>
/// <remarks><paramref name="systemID"/> will be <see langword="null"/> if returned value is <see langword="false"/></remarks>
public static bool TryGetChosenSystemForFileExt(this Config config, string fileExt, out string systemID)
{
var b = config.PreferredPlatformsForExtensions.TryGetValue(fileExt, out var v);
if (b && !string.IsNullOrEmpty(v))
{
systemID = v;
return true;
}
systemID = null;
return false;
}
}
}