Fix remove flag issues

This commit is contained in:
Matt Nadareski
2024-03-11 14:31:02 -04:00
parent 4db6d14ffb
commit 5188e8f3e0
13 changed files with 51 additions and 52 deletions

View File

@@ -1,4 +1,3 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using SabreTools.Core.Tools; using SabreTools.Core.Tools;
@@ -29,7 +28,7 @@ namespace SabreTools.DatFiles
// Convert and assign the machines // Convert and assign the machines
var machines = ConvertMachines(ignoreblanks); var machines = ConvertMachines(ignoreblanks);
if (machines != null) if (machines != null)
metadataFile[Models.Metadata.MetadataFile.MachineKey] = header; metadataFile[Models.Metadata.MetadataFile.MachineKey] = machines;
return metadataFile; return metadataFile;
} }
@@ -219,124 +218,124 @@ namespace SabreTools.DatFiles
{ {
case DatItems.Formats.Adjuster adjuster: case DatItems.Formats.Adjuster adjuster:
var adjusterItem = ProcessItem(adjuster); var adjusterItem = ProcessItem(adjuster);
EnsureMachineKey<Models.Metadata.Adjuster[]?>(machine, Models.Metadata.Machine.AdjusterKey); EnsureMachineKey<Models.Metadata.Adjuster?>(machine, Models.Metadata.Machine.AdjusterKey);
AppendToMachineKey(machine, Models.Metadata.Machine.AdjusterKey, adjusterItem); AppendToMachineKey(machine, Models.Metadata.Machine.AdjusterKey, adjusterItem);
break; break;
case DatItems.Formats.Archive archive: case DatItems.Formats.Archive archive:
var archiveItem = archive.GetInternalClone(); var archiveItem = archive.GetInternalClone();
EnsureMachineKey<Models.Metadata.Archive[]?>(machine, Models.Metadata.Machine.ArchiveKey); EnsureMachineKey<Models.Metadata.Archive?>(machine, Models.Metadata.Machine.ArchiveKey);
AppendToMachineKey(machine, Models.Metadata.Machine.ArchiveKey, archiveItem); AppendToMachineKey(machine, Models.Metadata.Machine.ArchiveKey, archiveItem);
break; break;
case DatItems.Formats.BiosSet biosSet: case DatItems.Formats.BiosSet biosSet:
var biosSetItem = biosSet.GetInternalClone(); var biosSetItem = biosSet.GetInternalClone();
EnsureMachineKey<Models.Metadata.BiosSet[]?>(machine, Models.Metadata.Machine.BiosSetKey); EnsureMachineKey<Models.Metadata.BiosSet?>(machine, Models.Metadata.Machine.BiosSetKey);
AppendToMachineKey(machine, Models.Metadata.Machine.BiosSetKey, biosSetItem); AppendToMachineKey(machine, Models.Metadata.Machine.BiosSetKey, biosSetItem);
break; break;
case DatItems.Formats.Chip chip: case DatItems.Formats.Chip chip:
var chipItem = chip.GetInternalClone(); var chipItem = chip.GetInternalClone();
EnsureMachineKey<Models.Metadata.Chip[]?>(machine, Models.Metadata.Machine.ChipKey); EnsureMachineKey<Models.Metadata.Chip?>(machine, Models.Metadata.Machine.ChipKey);
AppendToMachineKey(machine, Models.Metadata.Machine.ChipKey, chipItem); AppendToMachineKey(machine, Models.Metadata.Machine.ChipKey, chipItem);
break; break;
case DatItems.Formats.Configuration configuration: case DatItems.Formats.Configuration configuration:
var configurationItem = ProcessItem(configuration); var configurationItem = ProcessItem(configuration);
EnsureMachineKey<Models.Metadata.Configuration[]?>(machine, Models.Metadata.Machine.ConfigurationKey); EnsureMachineKey<Models.Metadata.Configuration?>(machine, Models.Metadata.Machine.ConfigurationKey);
AppendToMachineKey(machine, Models.Metadata.Machine.ConfigurationKey, configurationItem); AppendToMachineKey(machine, Models.Metadata.Machine.ConfigurationKey, configurationItem);
break; break;
case DatItems.Formats.Device device: case DatItems.Formats.Device device:
var deviceItem = ProcessItem(device); var deviceItem = ProcessItem(device);
EnsureMachineKey<Models.Metadata.Device[]?>(machine, Models.Metadata.Machine.DeviceKey); EnsureMachineKey<Models.Metadata.Device?>(machine, Models.Metadata.Machine.DeviceKey);
AppendToMachineKey(machine, Models.Metadata.Machine.DeviceKey, deviceItem); AppendToMachineKey(machine, Models.Metadata.Machine.DeviceKey, deviceItem);
break; break;
case DatItems.Formats.DeviceRef deviceRef: case DatItems.Formats.DeviceRef deviceRef:
var deviceRefItem = deviceRef.GetInternalClone(); var deviceRefItem = deviceRef.GetInternalClone();
EnsureMachineKey<Models.Metadata.DeviceRef[]?>(machine, Models.Metadata.Machine.DeviceRefKey); EnsureMachineKey<Models.Metadata.DeviceRef?>(machine, Models.Metadata.Machine.DeviceRefKey);
AppendToMachineKey(machine, Models.Metadata.Machine.DeviceRefKey, deviceRefItem); AppendToMachineKey(machine, Models.Metadata.Machine.DeviceRefKey, deviceRefItem);
break; break;
case DatItems.Formats.DipSwitch dipSwitch: case DatItems.Formats.DipSwitch dipSwitch:
var dipSwitchItem = ProcessItem(dipSwitch, machine); var dipSwitchItem = ProcessItem(dipSwitch, machine);
EnsureMachineKey<Models.Metadata.DipSwitch[]?>(machine, Models.Metadata.Machine.DipSwitchKey); EnsureMachineKey<Models.Metadata.DipSwitch?>(machine, Models.Metadata.Machine.DipSwitchKey);
AppendToMachineKey(machine, Models.Metadata.Machine.DipSwitchKey, dipSwitchItem); AppendToMachineKey(machine, Models.Metadata.Machine.DipSwitchKey, dipSwitchItem);
break; break;
case DatItems.Formats.Disk disk: case DatItems.Formats.Disk disk:
var diskItem = ProcessItem(disk, machine); var diskItem = ProcessItem(disk, machine);
EnsureMachineKey<Models.Metadata.Disk[]?>(machine, Models.Metadata.Machine.DiskKey); EnsureMachineKey<Models.Metadata.Disk?>(machine, Models.Metadata.Machine.DiskKey);
AppendToMachineKey(machine, Models.Metadata.Machine.DiskKey, diskItem); AppendToMachineKey(machine, Models.Metadata.Machine.DiskKey, diskItem);
break; break;
case DatItems.Formats.Display display: case DatItems.Formats.Display display:
// TODO: Handle cases where it's actually a Video // TODO: Handle cases where it's actually a Video
var displayItem = display.GetInternalClone(); var displayItem = display.GetInternalClone();
EnsureMachineKey<Models.Metadata.Display[]?>(machine, Models.Metadata.Machine.DisplayKey); EnsureMachineKey<Models.Metadata.Display?>(machine, Models.Metadata.Machine.DisplayKey);
AppendToMachineKey(machine, Models.Metadata.Machine.DisplayKey, displayItem); AppendToMachineKey(machine, Models.Metadata.Machine.DisplayKey, displayItem);
break; break;
case DatItems.Formats.Driver driver: case DatItems.Formats.Driver driver:
var driverItem = driver.GetInternalClone(); var driverItem = driver.GetInternalClone();
EnsureMachineKey<Models.Metadata.Driver[]?>(machine, Models.Metadata.Machine.DriverKey); EnsureMachineKey<Models.Metadata.Driver?>(machine, Models.Metadata.Machine.DriverKey);
AppendToMachineKey(machine, Models.Metadata.Machine.DriverKey, driverItem); AppendToMachineKey(machine, Models.Metadata.Machine.DriverKey, driverItem);
break; break;
case DatItems.Formats.Feature feature: case DatItems.Formats.Feature feature:
var featureItem = feature.GetInternalClone(); var featureItem = feature.GetInternalClone();
EnsureMachineKey<Models.Metadata.Feature[]?>(machine, Models.Metadata.Machine.FeatureKey); EnsureMachineKey<Models.Metadata.Feature?>(machine, Models.Metadata.Machine.FeatureKey);
AppendToMachineKey(machine, Models.Metadata.Machine.FeatureKey, featureItem); AppendToMachineKey(machine, Models.Metadata.Machine.FeatureKey, featureItem);
break; break;
case DatItems.Formats.Info info: case DatItems.Formats.Info info:
var infoItem = info.GetInternalClone(); var infoItem = info.GetInternalClone();
EnsureMachineKey<Models.Metadata.Info[]?>(machine, Models.Metadata.Machine.InfoKey); EnsureMachineKey<Models.Metadata.Info?>(machine, Models.Metadata.Machine.InfoKey);
AppendToMachineKey(machine, Models.Metadata.Machine.InfoKey, infoItem); AppendToMachineKey(machine, Models.Metadata.Machine.InfoKey, infoItem);
break; break;
case DatItems.Formats.Input input: case DatItems.Formats.Input input:
var inputItem = ProcessItem(input); var inputItem = ProcessItem(input);
EnsureMachineKey<Models.Metadata.Input[]?>(machine, Models.Metadata.Machine.InputKey); EnsureMachineKey<Models.Metadata.Input?>(machine, Models.Metadata.Machine.InputKey);
AppendToMachineKey(machine, Models.Metadata.Machine.InputKey, inputItem); AppendToMachineKey(machine, Models.Metadata.Machine.InputKey, inputItem);
break; break;
case DatItems.Formats.Media media: case DatItems.Formats.Media media:
var mediaItem = media.GetInternalClone(); var mediaItem = media.GetInternalClone();
EnsureMachineKey<Models.Metadata.Media[]?>(machine, Models.Metadata.Machine.MediaKey); EnsureMachineKey<Models.Metadata.Media?>(machine, Models.Metadata.Machine.MediaKey);
AppendToMachineKey(machine, Models.Metadata.Machine.MediaKey, mediaItem); AppendToMachineKey(machine, Models.Metadata.Machine.MediaKey, mediaItem);
break; break;
case DatItems.Formats.Port port: case DatItems.Formats.Port port:
var portItem = ProcessItem(port); var portItem = ProcessItem(port);
EnsureMachineKey<Models.Metadata.Port[]?>(machine, Models.Metadata.Machine.PortKey); EnsureMachineKey<Models.Metadata.Port?>(machine, Models.Metadata.Machine.PortKey);
AppendToMachineKey(machine, Models.Metadata.Machine.PortKey, portItem); AppendToMachineKey(machine, Models.Metadata.Machine.PortKey, portItem);
break; break;
case DatItems.Formats.RamOption ramOption: case DatItems.Formats.RamOption ramOption:
var ramOptionItem = ramOption.GetInternalClone(); var ramOptionItem = ramOption.GetInternalClone();
EnsureMachineKey<Models.Metadata.RamOption[]?>(machine, Models.Metadata.Machine.RamOptionKey); EnsureMachineKey<Models.Metadata.RamOption?>(machine, Models.Metadata.Machine.RamOptionKey);
AppendToMachineKey(machine, Models.Metadata.Machine.RamOptionKey, ramOptionItem); AppendToMachineKey(machine, Models.Metadata.Machine.RamOptionKey, ramOptionItem);
break; break;
case DatItems.Formats.Release release: case DatItems.Formats.Release release:
var releaseItem = release.GetInternalClone(); var releaseItem = release.GetInternalClone();
EnsureMachineKey<Models.Metadata.Release[]?>(machine, Models.Metadata.Machine.ReleaseKey); EnsureMachineKey<Models.Metadata.Release?>(machine, Models.Metadata.Machine.ReleaseKey);
AppendToMachineKey(machine, Models.Metadata.Machine.ReleaseKey, releaseItem); AppendToMachineKey(machine, Models.Metadata.Machine.ReleaseKey, releaseItem);
break; break;
case DatItems.Formats.Rom rom: case DatItems.Formats.Rom rom:
// TODO: Handle cases where it's actually a Dump // TODO: Handle cases where it's actually a Dump
var romItem = ProcessItem(rom, machine); var romItem = ProcessItem(rom, machine);
EnsureMachineKey<Models.Metadata.Rom[]?>(machine, Models.Metadata.Machine.RomKey); EnsureMachineKey<Models.Metadata.Rom?>(machine, Models.Metadata.Machine.RomKey);
AppendToMachineKey(machine, Models.Metadata.Machine.RomKey, romItem); AppendToMachineKey(machine, Models.Metadata.Machine.RomKey, romItem);
break; break;
case DatItems.Formats.Sample sample: case DatItems.Formats.Sample sample:
var sampleItem = sample.GetInternalClone(); var sampleItem = sample.GetInternalClone();
EnsureMachineKey<Models.Metadata.Sample[]?>(machine, Models.Metadata.Machine.SampleKey); EnsureMachineKey<Models.Metadata.Sample?>(machine, Models.Metadata.Machine.SampleKey);
AppendToMachineKey(machine, Models.Metadata.Machine.SampleKey, sampleItem); AppendToMachineKey(machine, Models.Metadata.Machine.SampleKey, sampleItem);
break; break;
case DatItems.Formats.SharedFeat sharedFeat: case DatItems.Formats.SharedFeat sharedFeat:
var sharedFeatItem = sharedFeat.GetInternalClone(); var sharedFeatItem = sharedFeat.GetInternalClone();
EnsureMachineKey<Models.Metadata.SharedFeat[]?>(machine, Models.Metadata.Machine.SharedFeatKey); EnsureMachineKey<Models.Metadata.SharedFeat?>(machine, Models.Metadata.Machine.SharedFeatKey);
AppendToMachineKey(machine, Models.Metadata.Machine.SharedFeatKey, sharedFeatItem); AppendToMachineKey(machine, Models.Metadata.Machine.SharedFeatKey, sharedFeatItem);
break; break;
case DatItems.Formats.Slot slot: case DatItems.Formats.Slot slot:
var slotItem = ProcessItem(slot); var slotItem = ProcessItem(slot);
EnsureMachineKey<Models.Metadata.Slot[]?>(machine, Models.Metadata.Machine.SlotKey); EnsureMachineKey<Models.Metadata.Slot?>(machine, Models.Metadata.Machine.SlotKey);
AppendToMachineKey(machine, Models.Metadata.Machine.SlotKey, slotItem); AppendToMachineKey(machine, Models.Metadata.Machine.SlotKey, slotItem);
break; break;
case DatItems.Formats.SoftwareList softwareList: case DatItems.Formats.SoftwareList softwareList:
var softwareListItem = softwareList.GetInternalClone(); var softwareListItem = softwareList.GetInternalClone();
EnsureMachineKey<Models.Metadata.SoftwareList[]?>(machine, Models.Metadata.Machine.SoftwareListKey); EnsureMachineKey<Models.Metadata.SoftwareList?>(machine, Models.Metadata.Machine.SoftwareListKey);
AppendToMachineKey(machine, Models.Metadata.Machine.SoftwareListKey, softwareListItem); AppendToMachineKey(machine, Models.Metadata.Machine.SoftwareListKey, softwareListItem);
break; break;
case DatItems.Formats.Sound sound: case DatItems.Formats.Sound sound:
var soundItem = sound.GetInternalClone(); var soundItem = sound.GetInternalClone();
EnsureMachineKey<Models.Metadata.Sound[]?>(machine, Models.Metadata.Machine.SoundKey); EnsureMachineKey<Models.Metadata.Sound?>(machine, Models.Metadata.Machine.SoundKey);
AppendToMachineKey(machine, Models.Metadata.Machine.SoundKey, soundItem); AppendToMachineKey(machine, Models.Metadata.Machine.SoundKey, soundItem);
break; break;
} }
@@ -585,8 +584,8 @@ namespace SabreTools.DatFiles
/// </summary> /// </summary>
private static void EnsureMachineKey<T>(Models.Metadata.Machine machine, string key) private static void EnsureMachineKey<T>(Models.Metadata.Machine machine, string key)
{ {
if (machine.Read<T>(key) == null) if (machine.Read<T[]?>(key) == null)
machine[key] = Activator.CreateInstance<T>(); machine[key] = new T[0];
} }
/// <summary> /// <summary>

View File

@@ -605,7 +605,7 @@ namespace SabreTools.DatFiles
} }
// If the item is supposed to be removed, we ignore // If the item is supposed to be removed, we ignore
if (datItem.GetFieldValue<bool>(DatItem.RemoveKey)) if (datItem.GetFieldValue<bool?>(DatItem.RemoveKey) == true)
{ {
string itemString = JsonConvert.SerializeObject(datItem, Formatting.None); string itemString = JsonConvert.SerializeObject(datItem, Formatting.None);
logger?.Verbose($"Item '{itemString}' was skipped because it was marked for removal"); logger?.Verbose($"Item '{itemString}' was skipped because it was marked for removal");

View File

@@ -219,7 +219,7 @@ namespace SabreTools.DatFiles
TotalCount++; TotalCount++;
// Increment removal count // Increment removal count
if (item.GetFieldValue<bool>(DatItem.RemoveKey)) if (item.GetFieldValue<bool?>(DatItem.RemoveKey) == true)
RemovedCount++; RemovedCount++;
// Increment the item count for the type // Increment the item count for the type
@@ -399,8 +399,8 @@ namespace SabreTools.DatFiles
// Filter the list // Filter the list
return fi.Where(i => i != null) return fi.Where(i => i != null)
.Where(i => !i.GetFieldValue<bool>(DatItem.RemoveKey)) .Where(i => i.GetFieldValue<bool?>(DatItem.RemoveKey) != true)
.Where(i => i.GetFieldValue<Machine>(DatItem.MachineKey)!.GetFieldValue<string?>(Models.Metadata.Machine.NameKey) != null) .Where(i => i.GetFieldValue<Machine>(DatItem.MachineKey) != null)
.ToConcurrentList(); .ToConcurrentList();
} }
} }
@@ -500,7 +500,7 @@ namespace SabreTools.DatFiles
TotalCount--; TotalCount--;
// Decrement removal count // Decrement removal count
if (item.GetFieldValue<bool>(DatItem.RemoveKey)) if (item.GetFieldValue<bool?>(DatItem.RemoveKey) == true)
RemovedCount--; RemovedCount--;
// Decrement the item count for the type // Decrement the item count for the type
@@ -907,7 +907,7 @@ namespace SabreTools.DatFiles
foreach (string key in keys) foreach (string key in keys)
{ {
ConcurrentList<DatItem>? oldItemList = items[key]; ConcurrentList<DatItem>? oldItemList = items[key];
ConcurrentList<DatItem>? newItemList = oldItemList?.Where(i => !i.GetFieldValue<bool>(DatItem.RemoveKey))?.ToConcurrentList(); ConcurrentList<DatItem>? newItemList = oldItemList?.Where(i => i.GetFieldValue<bool>(DatItem.RemoveKey) != true)?.ToConcurrentList();
Remove(key); Remove(key);
AddRange(key, newItemList); AddRange(key, newItemList);
@@ -944,12 +944,12 @@ namespace SabreTools.DatFiles
for (int i = 0; i < roms.Count; i++) for (int i = 0; i < roms.Count; i++)
{ {
DatItem other = roms[i]; DatItem other = roms[i];
if (other.GetFieldValue<bool>(DatItem.RemoveKey)) if (other.GetFieldValue<bool?>(DatItem.RemoveKey) == true)
continue; continue;
if (datItem.Equals(other)) if (datItem.Equals(other))
{ {
other.SetFieldValue<bool>(DatItem.RemoveKey, true); other.SetFieldValue<bool?>(DatItem.RemoveKey, true);
output.Add(other); output.Add(other);
} }
else else

View File

@@ -336,7 +336,7 @@ namespace SabreTools.DatFiles
TotalCount++; TotalCount++;
// Increment removal count // Increment removal count
if (item.GetFieldValue<bool>(DatItem.RemoveKey)) if (item.GetFieldValue<bool?>(DatItem.RemoveKey) == true)
RemovedCount++; RemovedCount++;
// Increment the item count for the type // Increment the item count for the type
@@ -530,7 +530,7 @@ namespace SabreTools.DatFiles
// Filter the list // Filter the list
return fi.Where(i => i != null) return fi.Where(i => i != null)
.Where(i => !i.GetFieldValue<bool>(DatItem.RemoveKey)) .Where(i => i.GetFieldValue<bool?>(DatItem.RemoveKey) != true)
.Where(i => i.GetFieldValue<Machine>(DatItem.MachineKey)!.GetFieldValue<string?>(Models.Metadata.Machine.NameKey) != null) .Where(i => i.GetFieldValue<Machine>(DatItem.MachineKey)!.GetFieldValue<string?>(Models.Metadata.Machine.NameKey) != null)
.ToConcurrentList(); .ToConcurrentList();
} }
@@ -644,7 +644,7 @@ namespace SabreTools.DatFiles
TotalCount--; TotalCount--;
// Decrement removal count // Decrement removal count
if (item.GetFieldValue<bool>(DatItem.RemoveKey)) if (item.GetFieldValue<bool?>(DatItem.RemoveKey) == true)
RemovedCount--; RemovedCount--;
// Decrement the item count for the type // Decrement the item count for the type
@@ -1079,7 +1079,7 @@ CREATE TABLE IF NOT EXISTS groups (
foreach (string key in keys) foreach (string key in keys)
{ {
ConcurrentList<DatItem>? oldItemList = this[key]; ConcurrentList<DatItem>? oldItemList = this[key];
ConcurrentList<DatItem>? newItemList = oldItemList?.Where(i => !i.GetFieldValue<bool>(DatItem.RemoveKey))?.ToConcurrentList(); ConcurrentList<DatItem>? newItemList = oldItemList?.Where(i => i.GetFieldValue<bool>(DatItem.RemoveKey) != true)?.ToConcurrentList();
Remove(key); Remove(key);
AddRange(key, newItemList); AddRange(key, newItemList);
@@ -1113,12 +1113,12 @@ CREATE TABLE IF NOT EXISTS groups (
for (int i = 0; i < roms.Count; i++) for (int i = 0; i < roms.Count; i++)
{ {
DatItem other = roms[i]; DatItem other = roms[i];
if (other.GetFieldValue<bool>(DatItem.RemoveKey)) if (other.GetFieldValue<bool?>(DatItem.RemoveKey) == true)
continue; continue;
if (datItem.Equals(other)) if (datItem.Equals(other))
{ {
other.SetFieldValue<bool>(DatItem.RemoveKey, true); other.SetFieldValue<bool?>(DatItem.RemoveKey, true);
output.Add(other); output.Add(other);
} }
else else

View File

@@ -36,7 +36,7 @@ namespace SabreTools.DatItems.Formats
{ {
var blank = new Blank(); var blank = new Blank();
blank.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey)); blank.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey));
blank.SetFieldValue<bool>(DatItem.RemoveKey, GetFieldValue<bool>(DatItem.RemoveKey)); blank.SetFieldValue<bool?>(DatItem.RemoveKey, GetFieldValue<bool?>(DatItem.RemoveKey));
blank.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey)); blank.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey));
blank.SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, GetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey)); blank.SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, GetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey));

View File

@@ -110,7 +110,7 @@ namespace SabreTools.DatItems.Formats
rom.GetFieldValue<DataArea?>(Rom.DataAreaKey)?.SetName(this.GetFieldValue<DiskArea?>(Disk.DiskAreaKey)?.GetName()); rom.GetFieldValue<DataArea?>(Rom.DataAreaKey)?.SetName(this.GetFieldValue<DiskArea?>(Disk.DiskAreaKey)?.GetName());
rom.SetFieldValue<DupeType>(DatItem.DupeTypeKey, GetFieldValue<DupeType>(DatItem.DupeTypeKey)); rom.SetFieldValue<DupeType>(DatItem.DupeTypeKey, GetFieldValue<DupeType>(DatItem.DupeTypeKey));
rom.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey)!.Clone() as Machine ?? new Machine()); rom.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey)!.Clone() as Machine ?? new Machine());
rom.SetFieldValue<bool>(DatItem.RemoveKey, GetFieldValue<bool>(DatItem.RemoveKey)); rom.SetFieldValue<bool?>(DatItem.RemoveKey, GetFieldValue<bool?>(DatItem.RemoveKey));
rom.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey)); rom.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey));
return rom; return rom;

View File

@@ -141,7 +141,7 @@ namespace SabreTools.DatItems.Formats
}; };
file.SetFieldValue<DupeType>(DatItem.DupeTypeKey, GetFieldValue<DupeType>(DatItem.DupeTypeKey)); file.SetFieldValue<DupeType>(DatItem.DupeTypeKey, GetFieldValue<DupeType>(DatItem.DupeTypeKey));
file.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey)!.Clone() as Machine ?? new Machine()); file.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey)!.Clone() as Machine ?? new Machine());
file.SetFieldValue<bool>(DatItem.RemoveKey, GetFieldValue<bool>(DatItem.RemoveKey)); file.SetFieldValue<bool?>(DatItem.RemoveKey, GetFieldValue<bool?>(DatItem.RemoveKey));
file.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey)); file.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey));
return file; return file;
@@ -174,7 +174,7 @@ namespace SabreTools.DatItems.Formats
rom.SetFieldValue<DupeType>(DatItem.DupeTypeKey, GetFieldValue<DupeType>(DatItem.DupeTypeKey)); rom.SetFieldValue<DupeType>(DatItem.DupeTypeKey, GetFieldValue<DupeType>(DatItem.DupeTypeKey));
rom.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey)!.Clone() as Machine ?? new Machine()); rom.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey)!.Clone() as Machine ?? new Machine());
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, MD5); rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, MD5);
rom.SetFieldValue<bool>(DatItem.RemoveKey, GetFieldValue<bool>(DatItem.RemoveKey)); rom.SetFieldValue<bool?>(DatItem.RemoveKey, GetFieldValue<bool?>(DatItem.RemoveKey));
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, SHA1); rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, SHA1);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, SHA256); rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, SHA256);
rom.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey)); rom.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey));

View File

@@ -74,7 +74,7 @@ namespace SabreTools.DatItems.Formats
var rom = new Rom(_internal.ConvertToRom()!); var rom = new Rom(_internal.ConvertToRom()!);
rom.SetFieldValue<DupeType>(DatItem.DupeTypeKey, GetFieldValue<DupeType>(DatItem.DupeTypeKey)); rom.SetFieldValue<DupeType>(DatItem.DupeTypeKey, GetFieldValue<DupeType>(DatItem.DupeTypeKey));
rom.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey)); rom.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey));
rom.SetFieldValue<bool>(DatItem.RemoveKey, GetFieldValue<bool>(DatItem.RemoveKey)); rom.SetFieldValue<bool?>(DatItem.RemoveKey, GetFieldValue<bool?>(DatItem.RemoveKey));
rom.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey)); rom.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey));
return rom; return rom;

View File

@@ -146,7 +146,7 @@ namespace SabreTools.DatItems.Formats
}; };
releaseDetails.SetFieldValue<DupeType>(DatItem.DupeTypeKey, GetFieldValue<DupeType>(DatItem.DupeTypeKey)); releaseDetails.SetFieldValue<DupeType>(DatItem.DupeTypeKey, GetFieldValue<DupeType>(DatItem.DupeTypeKey));
releaseDetails.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey)); releaseDetails.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey));
releaseDetails.SetFieldValue<bool>(DatItem.RemoveKey, GetFieldValue<bool>(DatItem.RemoveKey)); releaseDetails.SetFieldValue<bool?>(DatItem.RemoveKey, GetFieldValue<bool?>(DatItem.RemoveKey));
releaseDetails.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey)); releaseDetails.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey));
releaseDetails.SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, GetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey)); releaseDetails.SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, GetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey));

View File

@@ -138,7 +138,7 @@ namespace SabreTools.DatItems.Formats
}; };
serials.SetFieldValue<DupeType>(DatItem.DupeTypeKey, GetFieldValue<DupeType>(DatItem.DupeTypeKey)); serials.SetFieldValue<DupeType>(DatItem.DupeTypeKey, GetFieldValue<DupeType>(DatItem.DupeTypeKey));
serials.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey)); serials.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey));
serials.SetFieldValue<bool>(DatItem.RemoveKey, GetFieldValue<bool>(DatItem.RemoveKey)); serials.SetFieldValue<bool?>(DatItem.RemoveKey, GetFieldValue<bool?>(DatItem.RemoveKey));
serials.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey)); serials.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey));
serials.SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, GetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey)); serials.SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, GetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey));

View File

@@ -181,7 +181,7 @@ namespace SabreTools.DatItems.Formats
}; };
sourceDetails.SetFieldValue<DupeType>(DatItem.DupeTypeKey, GetFieldValue<DupeType>(DatItem.DupeTypeKey)); sourceDetails.SetFieldValue<DupeType>(DatItem.DupeTypeKey, GetFieldValue<DupeType>(DatItem.DupeTypeKey));
sourceDetails.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey)); sourceDetails.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey));
sourceDetails.SetFieldValue<bool>(DatItem.RemoveKey, GetFieldValue<bool>(DatItem.RemoveKey)); sourceDetails.SetFieldValue<bool?>(DatItem.RemoveKey, GetFieldValue<bool?>(DatItem.RemoveKey));
sourceDetails.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey)); sourceDetails.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey));
sourceDetails.SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, GetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey)); sourceDetails.SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, GetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey));

View File

@@ -143,7 +143,7 @@ namespace SabreTools.DatTools
{ {
// Unmatched items will have a source ID of int.MaxValue, remove all others // Unmatched items will have a source ID of int.MaxValue, remove all others
if (items[i].GetFieldValue<Source?>(DatItem.SourceKey)?.Index != int.MaxValue) if (items[i].GetFieldValue<Source?>(DatItem.SourceKey)?.Index != int.MaxValue)
items[i].SetFieldValue<bool>(DatItem.RemoveKey, true); items[i].SetFieldValue<bool?>(DatItem.RemoveKey, true);
} }
// Set the list back, just in case // Set the list back, just in case

View File

@@ -92,7 +92,7 @@ namespace SabreTools.Test.DatFiles
var rom2 = new Rom(); var rom2 = new Rom();
rom2.SetName("rom-2"); rom2.SetName("rom-2");
rom2.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, "DEADBEEF"); rom2.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, "DEADBEEF");
rom2.SetFieldValue<bool>(DatItem.RemoveKey, true); rom2.SetFieldValue<bool?>(DatItem.RemoveKey, true);
rom2.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44"); rom2.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44");
rom2.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, 1024); rom2.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, 1024);
rom1.CopyMachineInformation(machine1); rom1.CopyMachineInformation(machine1);