diff --git a/BizHawk.Client.Common/CoreFileProvider.cs b/BizHawk.Client.Common/CoreFileProvider.cs
index c5230b2bc6..f079c61d36 100644
--- a/BizHawk.Client.Common/CoreFileProvider.cs
+++ b/BizHawk.Client.Common/CoreFileProvider.cs
@@ -62,7 +62,7 @@ namespace BizHawk.Client.Common
/// not found and is true
public string GetFirmwarePath(string sysId, string firmwareId, bool required, string msg = null)
{
- var path = FirmwareManager.Request(Global.Config.PathEntries.FirmwaresPathFragment, sysId, firmwareId);
+ var path = FirmwareManager.Request(Global.Config.PathEntries.FirmwaresPathFragment, Global.Config.FirmwareUserSpecifications, sysId, firmwareId);
if (path != null && !File.Exists(path))
{
path = null;
diff --git a/BizHawk.Client.Common/FirmwareManager.cs b/BizHawk.Client.Common/FirmwareManager.cs
index 6f504868a5..3b91c1728c 100644
--- a/BizHawk.Client.Common/FirmwareManager.cs
+++ b/BizHawk.Client.Common/FirmwareManager.cs
@@ -41,7 +41,7 @@ namespace BizHawk.Client.Common
public string FirmwareId { get; set; }
}
- public ResolutionInfo Resolve(string firmwaresPath, FirmwareDatabase.FirmwareRecord record, bool forbidScan = false)
+ public ResolutionInfo Resolve(string firmwaresPath, IDictionary userSpecifications, FirmwareDatabase.FirmwareRecord record, bool forbidScan = false)
{
// purpose of forbidScan: sometimes this is called from a loop in Scan(). we don't want to repeatedly DoScanAndResolve in that case, its already been done.
bool first = true;
@@ -55,7 +55,7 @@ namespace BizHawk.Client.Common
{
if (!forbidScan)
{
- DoScanAndResolve(firmwaresPath);
+ DoScanAndResolve(firmwaresPath, userSpecifications);
}
first = false;
@@ -66,9 +66,9 @@ namespace BizHawk.Client.Common
}
// Requests the specified firmware. tries really hard to scan and resolve as necessary
- public string Request(string firmwaresPath, string sysId, string firmwareId)
+ public string Request(string firmwaresPath, IDictionary userSpecifications, string sysId, string firmwareId)
{
- var resolved = Resolve(firmwaresPath, FirmwareDatabase.LookupFirmwareRecord(sysId, firmwareId));
+ var resolved = Resolve(firmwaresPath, userSpecifications, FirmwareDatabase.LookupFirmwareRecord(sysId, firmwareId));
if (resolved == null)
{
return null;
@@ -138,7 +138,7 @@ namespace BizHawk.Client.Common
return false;
}
- public void DoScanAndResolve(string firmwaresPath)
+ public void DoScanAndResolve(string firmwaresPath, IDictionary userSpecifications)
{
// build a list of file sizes. Only those will be checked during scanning
var sizes = new HashSet();
@@ -148,6 +148,7 @@ namespace BizHawk.Client.Common
}
using var reader = new RealFirmwareReader();
+
// build a list of files under the global firmwares path, and build a hash for each of them while we're at it
var todo = new Queue();
todo.Enqueue(new DirectoryInfo(PathManager.MakeAbsolutePath(firmwaresPath, null)));
@@ -162,9 +163,9 @@ namespace BizHawk.Client.Common
}
// we're going to allow recursing into subdirectories, now. its been verified to work OK
- foreach (var disub in di.GetDirectories())
+ foreach (var subDir in di.GetDirectories())
{
- todo.Enqueue(disub);
+ todo.Enqueue(subDir);
}
foreach (var fi in di.GetFiles())
@@ -217,7 +218,7 @@ namespace BizHawk.Client.Common
foreach (var fr in FirmwareDatabase.FirmwareRecords)
{
// do we have a user specification for this firmware record?
- if (Global.Config.FirmwareUserSpecifications.TryGetValue(fr.ConfigKey, out var userSpec))
+ if (userSpecifications.TryGetValue(fr.ConfigKey, out var userSpec))
{
// flag it as user specified
if (!_resolutionDictionary.TryGetValue(fr, out ResolutionInfo ri))
diff --git a/BizHawk.Client.EmuHawk/MainForm.Events.cs b/BizHawk.Client.EmuHawk/MainForm.Events.cs
index 8f359f1bf3..138c7d2c20 100644
--- a/BizHawk.Client.EmuHawk/MainForm.Events.cs
+++ b/BizHawk.Client.EmuHawk/MainForm.Events.cs
@@ -965,13 +965,13 @@ namespace BizHawk.Client.EmuHawk
{
if (e is RomLoader.RomErrorArgs args)
{
- using var configForm = new FirmwaresConfig(this, true, args.RomPath);
+ using var configForm = new FirmwaresConfig(this, Config, true, args.RomPath);
var result = configForm.ShowDialog();
args.Retry = result == DialogResult.Retry;
}
else
{
- using var configForm = new FirmwaresConfig(this);
+ using var configForm = new FirmwaresConfig(this, Config);
configForm.ShowDialog();
}
}
diff --git a/BizHawk.Client.EmuHawk/config/FirmwaresConfig.cs b/BizHawk.Client.EmuHawk/config/FirmwaresConfig.cs
index 425f8fcf36..7b7e3253b2 100644
--- a/BizHawk.Client.EmuHawk/config/FirmwaresConfig.cs
+++ b/BizHawk.Client.EmuHawk/config/FirmwaresConfig.cs
@@ -28,6 +28,7 @@ namespace BizHawk.Client.EmuHawk
public partial class FirmwaresConfig : Form
{
private readonly MainForm _mainForm;
+ private readonly Config _config;
// friendlier names than the system Ids
// Redundant with SystemLookup? Not so fast. That data drives things. This is one step abstracted. Don't be such a smart guy. Keep this redundant list up to date.
@@ -91,11 +92,10 @@ namespace BizHawk.Client.EmuHawk
private string _currSelectorDir;
private readonly ListViewSorter _listViewSorter;
- private string FirmwaresPath => Global.Config.PathEntries.FirmwaresPathFragment;
-
- public FirmwaresConfig(MainForm mainForm, bool retryLoadRom = false, string reloadRomPath = null)
+ public FirmwaresConfig(MainForm mainForm, Config config, bool retryLoadRom = false, string reloadRomPath = null)
{
_mainForm = mainForm;
+ _config = config;
InitializeComponent();
// prep ImageList for ListView with 3 item states for {idUnsure, idMissing, idOk}
@@ -247,15 +247,24 @@ namespace BizHawk.Client.EmuHawk
private void DoScan()
{
lvFirmwares.BeginUpdate();
- Manager.DoScanAndResolve(FirmwaresPath);
+ Manager.DoScanAndResolve(
+ _config.PathEntries.FirmwaresPathFragment,
+ _config.FirmwareUserSpecifications);
// for each type of firmware, try resolving and record the result
foreach (ListViewItem lvi in lvFirmwares.Items)
{
var fr = lvi.Tag as FirmwareDatabase.FirmwareRecord;
- var ri = Manager.Resolve(FirmwaresPath, fr, true);
- for(int i=4;i<=7;i++)
+ var ri = Manager.Resolve(
+ _config.PathEntries.FirmwaresPathFragment,
+ _config.FirmwareUserSpecifications,
+ fr,
+ true);
+
+ for (int i = 4; i <= 7; i++)
+ {
lvi.SubItems[i].Text = "";
+ }
if (ri == null)
{
@@ -333,11 +342,11 @@ namespace BizHawk.Client.EmuHawk
return;
}
- Manager.DoScanAndResolve(FirmwaresPath);
+ Manager.DoScanAndResolve(_config.PathEntries.FirmwaresPathFragment, _config.FirmwareUserSpecifications);
foreach (var fr in FirmwareDatabase.FirmwareRecords)
{
- var ri = Manager.Resolve(FirmwaresPath, fr);
+ var ri = Manager.Resolve(_config.PathEntries.FirmwaresPathFragment, _config.FirmwareUserSpecifications, fr);
if (ri?.KnownFirmwareFile == null) continue;
if (ri.UserSpecified) continue;
diff --git a/BizHawk.Client.EmuHawk/config/PathConfig.cs b/BizHawk.Client.EmuHawk/config/PathConfig.cs
index 17d03682b3..127ec8e7f0 100644
--- a/BizHawk.Client.EmuHawk/config/PathConfig.cs
+++ b/BizHawk.Client.EmuHawk/config/PathConfig.cs
@@ -178,7 +178,7 @@ namespace BizHawk.Client.EmuHawk
return;
}
- using var f = new FirmwaresConfig(_mainForm) { TargetSystem = "Global" };
+ using var f = new FirmwaresConfig(_mainForm, _config) { TargetSystem = "Global" };
f.ShowDialog(this);
};