Convert Disk fully over to properties

This commit is contained in:
Matt Nadareski
2026-04-04 01:15:40 -04:00
parent e5e279a48d
commit 9ffa2a5e23
55 changed files with 487 additions and 433 deletions

View File

@@ -40,12 +40,12 @@ namespace SabreTools.Data.Extensions.Test
DictionaryBase? self = new Disk
{
Name = "name",
[Disk.MergeKey] = "XXXXXX",
[Disk.RegionKey] = "XXXXXX",
Merge = "merge",
Region = "region",
Status = ItemStatus.Good,
Optional = true,
[Disk.MD5Key] = "XXXXXX",
[Disk.SHA1Key] = "XXXXXX",
MD5 = "md5",
SHA1 = "sha1",
};
Rom? actual = self.ConvertToRom();
@@ -54,12 +54,12 @@ namespace SabreTools.Data.Extensions.Test
Assert.Equal(4, actual.Count);
Assert.Equal(ItemType.Rom, actual.ItemType);
Assert.Equal("name.chd", actual.Name);
Assert.Equal("XXXXXX", actual[Rom.MergeKey]);
Assert.Equal("XXXXXX", actual[Rom.RegionKey]);
Assert.Equal("merge", actual[Rom.MergeKey]);
Assert.Equal("region", actual[Rom.RegionKey]);
Assert.Equal(ItemStatus.Good, actual.Status);
Assert.Equal(true, actual.Optional);
Assert.Equal("XXXXXX", actual[Rom.MD5Key]);
Assert.Equal("XXXXXX", actual[Rom.SHA1Key]);
Assert.Equal("md5", actual[Rom.MD5Key]);
Assert.Equal("sha1", actual[Rom.SHA1Key]);
}
[Fact]
@@ -84,10 +84,10 @@ namespace SabreTools.Data.Extensions.Test
DictionaryBase? self = new Media
{
Name = "name",
MD5 = "XXXXXX",
SHA1 = "XXXXXX",
SHA256 = "XXXXXX",
SpamSum = "XXXXXX",
MD5 = "md5",
SHA1 = "sha1",
SHA256 = "sha256",
SpamSum = "spamsum",
};
Rom? actual = self.ConvertToRom();
@@ -96,10 +96,10 @@ namespace SabreTools.Data.Extensions.Test
Assert.Equal(4, actual.Count);
Assert.Equal(ItemType.Rom, actual.ItemType);
Assert.Equal("name.aaruf", actual.Name);
Assert.Equal("XXXXXX", actual[Rom.MD5Key]);
Assert.Equal("XXXXXX", actual[Rom.SHA1Key]);
Assert.Equal("XXXXXX", actual[Rom.SHA256Key]);
Assert.Equal("XXXXXX", actual[Rom.SpamSumKey]);
Assert.Equal("md5", actual[Rom.MD5Key]);
Assert.Equal("sha1", actual[Rom.SHA1Key]);
Assert.Equal("sha256", actual[Rom.SHA256Key]);
Assert.Equal("spamsum", actual[Rom.SpamSumKey]);
}
[Fact]
@@ -153,13 +153,13 @@ namespace SabreTools.Data.Extensions.Test
{
Disk self = new Disk
{
[Disk.MD5Key] = "XXXXXX",
[Disk.SHA1Key] = string.Empty,
MD5 = "md5",
SHA1 = string.Empty,
};
Disk other = new Disk
{
[Disk.MD5Key] = string.Empty,
[Disk.SHA1Key] = "XXXXXX",
MD5 = string.Empty,
SHA1 = "sha1",
};
bool actual = self.HashMatch(other);
@@ -171,13 +171,13 @@ namespace SabreTools.Data.Extensions.Test
{
Disk self = new Disk
{
[Disk.MD5Key] = "XXXXXX",
[Disk.SHA1Key] = string.Empty,
MD5 = "md5",
SHA1 = string.Empty,
};
Disk other = new Disk
{
[Disk.MD5Key] = "XXXXXX",
[Disk.SHA1Key] = "XXXXXX",
MD5 = "md5",
SHA1 = "sha1",
};
bool actual = self.HashMatch(other);
@@ -189,13 +189,13 @@ namespace SabreTools.Data.Extensions.Test
{
Disk self = new Disk
{
[Disk.MD5Key] = string.Empty,
[Disk.SHA1Key] = "XXXXXX",
MD5 = string.Empty,
SHA1 = "sha1",
};
Disk other = new Disk
{
[Disk.MD5Key] = "XXXXXX",
[Disk.SHA1Key] = "XXXXXX",
MD5 = "md5",
SHA1 = "sha1",
};
bool actual = self.HashMatch(other);
@@ -207,13 +207,13 @@ namespace SabreTools.Data.Extensions.Test
{
Disk self = new Disk
{
[Disk.MD5Key] = "XXXXXX",
[Disk.SHA1Key] = "XXXXXX",
MD5 = "md5",
SHA1 = "sha1",
};
Disk other = new Disk
{
[Disk.MD5Key] = "XXXXXX",
[Disk.SHA1Key] = "XXXXXX",
MD5 = "md5",
SHA1 = "sha1",
};
bool actual = self.HashMatch(other);
@@ -225,17 +225,17 @@ namespace SabreTools.Data.Extensions.Test
{
Media self = new Media
{
MD5 = "XXXXXX",
MD5 = "md5",
SHA1 = string.Empty,
SHA256 = "XXXXXX",
SHA256 = "sha256",
SpamSum = string.Empty,
};
Media other = new Media
{
MD5 = string.Empty,
SHA1 = "XXXXXX",
SHA1 = "sha1",
SHA256 = string.Empty,
SpamSum = "XXXXXX",
SpamSum = "spamsum",
};
bool actual = self.HashMatch(other);
@@ -969,8 +969,8 @@ namespace SabreTools.Data.Extensions.Test
{
DictionaryBase self = new Disk
{
[Disk.MD5Key] = "XXXXXX",
[Disk.SHA1Key] = "XXXXXX",
MD5 = "XXXXXX",
SHA1 = "XXXXXX",
};
bool actual = self.HasZeroHash();
@@ -982,8 +982,8 @@ namespace SabreTools.Data.Extensions.Test
{
DictionaryBase self = new Disk
{
[Disk.MD5Key] = HashType.MD5.ZeroString,
[Disk.SHA1Key] = string.Empty,
MD5 = HashType.MD5.ZeroString,
SHA1 = string.Empty,
};
bool actual = self.HasZeroHash();
@@ -995,8 +995,8 @@ namespace SabreTools.Data.Extensions.Test
{
DictionaryBase self = new Disk
{
[Disk.MD5Key] = string.Empty,
[Disk.SHA1Key] = HashType.SHA1.ZeroString,
MD5 = string.Empty,
SHA1 = HashType.SHA1.ZeroString,
};
bool actual = self.HasZeroHash();
@@ -1008,8 +1008,8 @@ namespace SabreTools.Data.Extensions.Test
{
DictionaryBase self = new Disk
{
[Disk.MD5Key] = HashType.MD5.ZeroString,
[Disk.SHA1Key] = HashType.SHA1.ZeroString,
MD5 = HashType.MD5.ZeroString,
SHA1 = HashType.SHA1.ZeroString,
};
bool actual = self.HasZeroHash();
@@ -1510,8 +1510,8 @@ namespace SabreTools.Data.Extensions.Test
DictionaryBase self = new Disk();
DictionaryBase other = new Disk
{
[Disk.MD5Key] = "XXXXXX",
[Disk.SHA1Key] = "XXXXXX",
MD5 = "XXXXXX",
SHA1 = "XXXXXX",
};
self.FillMissingHashes(other);

View File

@@ -173,6 +173,8 @@ namespace SabreTools.Data.Extensions
return dipSwitch.Clone() as DipSwitch;
else if (self is DipValue dipValue)
return dipValue.Clone() as DipValue;
else if (self is Disk disk)
return disk.Clone() as Disk;
else if (self is Display display)
return display.Clone() as Display;
else if (self is Driver driver)
@@ -224,12 +226,6 @@ namespace SabreTools.Data.Extensions
cloneDataArea.Size = selfDataArea.Size;
cloneDataArea.Width = selfDataArea.Width;
}
else if (self is Disk selfDisk && clone is Disk cloneDisk)
{
cloneDisk.Optional = selfDisk.Optional;
cloneDisk.Status = selfDisk.Status;
cloneDisk.Writable = selfDisk.Writable;
}
else if (self is Feature selfFeature && clone is Feature cloneFeature)
{
// TODO: Remove when PartFeature no longer needs nesting
@@ -434,12 +430,12 @@ namespace SabreTools.Data.Extensions
return new Rom
{
Name = name,
[Rom.MergeKey] = disk.ReadString(Disk.MergeKey),
[Rom.RegionKey] = disk.ReadString(Disk.RegionKey),
[Rom.MergeKey] = disk.Merge,
[Rom.RegionKey] = disk.Region,
Status = disk.Status,
Optional = disk.Optional,
[Rom.MD5Key] = disk.ReadString(Disk.MD5Key),
[Rom.SHA1Key] = disk.ReadString(Disk.SHA1Key),
[Rom.MD5Key] = disk.MD5,
[Rom.SHA1Key] = disk.SHA1,
};
}
@@ -519,13 +515,8 @@ namespace SabreTools.Data.Extensions
return false;
// Return if all hashes match according to merge rules
string? selfMd5 = self.ReadString(Disk.MD5Key);
string? otherMd5 = other.ReadString(Disk.MD5Key);
bool conditionalMd5 = ConditionalHashEquals(selfMd5, otherMd5);
string? selfSha1 = self.ReadString(Disk.SHA1Key);
string? otherSha1 = other.ReadString(Disk.SHA1Key);
bool conditionalSha1 = ConditionalHashEquals(selfSha1, otherSha1);
bool conditionalMd5 = ConditionalHashEquals(self.MD5, other.MD5);
bool conditionalSha1 = ConditionalHashEquals(self.SHA1, other.SHA1);
return conditionalMd5
&& conditionalSha1;
@@ -670,11 +661,11 @@ namespace SabreTools.Data.Extensions
/// </summary>
private static bool HasCommonHash(this Disk self, Disk other)
{
bool md5Null = string.IsNullOrEmpty(self.ReadString(Disk.MD5Key));
md5Null ^= string.IsNullOrEmpty(other.ReadString(Disk.MD5Key));
bool md5Null = string.IsNullOrEmpty(self.MD5);
md5Null ^= string.IsNullOrEmpty(other.MD5);
bool sha1Null = string.IsNullOrEmpty(self.ReadString(Disk.SHA1Key));
sha1Null ^= string.IsNullOrEmpty(other.ReadString(Disk.SHA1Key));
bool sha1Null = string.IsNullOrEmpty(self.SHA1);
sha1Null ^= string.IsNullOrEmpty(other.SHA1);
return !md5Null
|| !sha1Null;
@@ -767,8 +758,8 @@ namespace SabreTools.Data.Extensions
/// </summary>
private static bool HasHashes(this Disk disk)
{
bool md5Null = string.IsNullOrEmpty(disk.ReadString(Disk.MD5Key));
bool sha1Null = string.IsNullOrEmpty(disk.ReadString(Disk.SHA1Key));
bool md5Null = string.IsNullOrEmpty(disk.MD5);
bool sha1Null = string.IsNullOrEmpty(disk.SHA1);
return !md5Null
|| !sha1Null;
@@ -829,10 +820,10 @@ namespace SabreTools.Data.Extensions
/// </summary>
private static bool HasZeroHash(this Disk disk)
{
string? md5 = disk.ReadString(Disk.MD5Key);
string? md5 = disk.MD5;
bool md5Null = string.IsNullOrEmpty(md5) || string.Equals(md5, HashType.MD5.ZeroString, StringComparison.OrdinalIgnoreCase);
string? sha1 = disk.ReadString(Disk.SHA1Key);
string? sha1 = disk.SHA1;
bool sha1Null = string.IsNullOrEmpty(sha1) || string.Equals(sha1, HashType.SHA1.ZeroString, StringComparison.OrdinalIgnoreCase);
return md5Null
@@ -967,15 +958,15 @@ namespace SabreTools.Data.Extensions
if (self is null || other is null)
return;
string? selfMd5 = self.ReadString(Disk.MD5Key);
string? otherMd5 = other.ReadString(Disk.MD5Key);
string? selfMd5 = self.MD5;
string? otherMd5 = other.MD5;
if (string.IsNullOrEmpty(selfMd5) && !string.IsNullOrEmpty(otherMd5))
self[Disk.MD5Key] = otherMd5;
self.MD5 = otherMd5;
string? selfSha1 = self.ReadString(Disk.SHA1Key);
string? otherSha1 = other.ReadString(Disk.SHA1Key);
string? selfSha1 = self.SHA1;
string? otherSha1 = other.SHA1;
if (string.IsNullOrEmpty(selfSha1) && !string.IsNullOrEmpty(otherSha1))
self[Disk.SHA1Key] = otherSha1;
self.SHA1 = otherSha1;
}
/// <summary>

View File

@@ -24,9 +24,8 @@ namespace SabreTools.Data.Models.Listxml
[XmlAttribute("region")]
public string? Region { get; set; }
/// <remarks>Numeric?</remarks>
[XmlAttribute("index")]
public string? Index { get; set; }
public long? Index { get; set; }
/// <remarks>(yes|no) "no"</remarks>
[XmlAttribute("writable")]

View File

@@ -1,18 +1,32 @@
using System;
using System.Xml.Serialization;
using Newtonsoft.Json;
namespace SabreTools.Data.Models.Metadata
{
// TODO: IEquatable<Disk>
[JsonObject("disk"), XmlRoot(elementName: "disk")]
public class Disk : DatItem
public class Disk : DatItem, ICloneable
{
#region Properties
public string? Flags { get; set; }
public long? Index { get; set; }
public string? MD5 { get; set; }
public string? Merge { get; set; }
public string? Name { get; set; }
/// <remarks>(yes|no) "no"</remarks>
public bool? Optional { get; set; }
public string? Region { get; set; }
public string? SHA1 { get; set; }
/// <remarks>(baddump|nodump|good|verified) "good"</remarks>
public ItemStatus? Status { get; set; }
@@ -21,28 +35,25 @@ namespace SabreTools.Data.Models.Metadata
#endregion
#region Keys
/// <remarks>string</remarks>
public const string FlagsKey = "flags";
/// <remarks>string, possibly long</remarks>
public const string IndexKey = "index";
/// <remarks>string</remarks>
public const string MD5Key = "md5";
/// <remarks>string</remarks>
public const string MergeKey = "merge";
/// <remarks>string</remarks>
public const string RegionKey = "region";
/// <remarks>string</remarks>
public const string SHA1Key = "sha1";
#endregion
public Disk() => ItemType = ItemType.Disk;
/// <inheritdoc/>
public object Clone()
{
var obj = new Disk();
obj.Flags = Flags;
obj.Index = Index;
obj.MD5 = MD5;
obj.Merge = Merge;
obj.Name = Name;
obj.Optional = Optional;
obj.Region = Region;
obj.SHA1 = SHA1;
obj.Status = Status;
obj.Writable = Writable;
return obj;
}
}
}

View File

@@ -133,10 +133,8 @@ namespace SabreTools.Metadata.DatFiles.Test
// All other fields are tested separately
Disk? partDisk = Array.Find(datItems, item => item is Disk disk && disk.DiskAreaSpecified && disk.PartSpecified) as Disk;
Assert.NotNull(partDisk);
DiskArea? diskDiskArea = partDisk.Read<DiskArea>(Disk.DiskAreaKey);
ValidateDiskArea(diskDiskArea);
Part? diskPart = partDisk.Read<Part>(Disk.PartKey);
ValidatePart(diskPart);
ValidateDiskArea(partDisk.DiskArea);
ValidatePart(partDisk.Part);
PartFeature? partFeature = Array.Find(datItems, item => item is PartFeature) as PartFeature;
ValidatePartFeature(partFeature);
@@ -551,14 +549,14 @@ namespace SabreTools.Metadata.DatFiles.Test
{
return new Data.Models.Metadata.Disk
{
[Data.Models.Metadata.Disk.FlagsKey] = "flags",
[Data.Models.Metadata.Disk.IndexKey] = "index",
[Data.Models.Metadata.Disk.MD5Key] = HashType.MD5.ZeroString,
[Data.Models.Metadata.Disk.MergeKey] = "merge",
Flags = "flags",
Index = 12345,
MD5 = HashType.MD5.ZeroString,
Merge = "merge",
Name = "name",
Optional = true,
[Data.Models.Metadata.Disk.RegionKey] = "region",
[Data.Models.Metadata.Disk.SHA1Key] = HashType.SHA1.ZeroString,
Region = "region",
SHA1 = HashType.SHA1.ZeroString,
Writable = true,
};
}
@@ -1307,14 +1305,14 @@ namespace SabreTools.Metadata.DatFiles.Test
private static void ValidateDisk(Disk? disk)
{
Assert.NotNull(disk);
Assert.Equal("flags", disk.ReadString(Data.Models.Metadata.Disk.FlagsKey));
Assert.Equal("index", disk.ReadString(Data.Models.Metadata.Disk.IndexKey));
Assert.Equal(HashType.MD5.ZeroString, disk.ReadString(Data.Models.Metadata.Disk.MD5Key));
Assert.Equal("merge", disk.ReadString(Data.Models.Metadata.Disk.MergeKey));
Assert.Equal("flags", disk.Flags);
Assert.Equal(12345, disk.Index);
Assert.Equal(HashType.MD5.ZeroString, disk.MD5);
Assert.Equal("merge", disk.Merge);
Assert.Equal("name", disk.Name);
Assert.True(disk.Optional);
Assert.Equal("region", disk.ReadString(Data.Models.Metadata.Disk.RegionKey));
Assert.Equal(HashType.SHA1.ZeroString, disk.ReadString(Data.Models.Metadata.Disk.SHA1Key));
Assert.Equal("region", disk.Region);
Assert.Equal(HashType.SHA1.ZeroString, disk.SHA1);
Assert.True(disk.Writable);
}

View File

@@ -196,8 +196,8 @@ namespace SabreTools.Metadata.DatFiles.Test
{
Disk item = new Disk(CreateMetadataDisk());
item.CopyMachineInformation(machine);
item.Write(Disk.DiskAreaKey, CreateDiskArea(machine));
item.Write(Disk.PartKey, CreatePart(machine));
item.DiskArea = CreateDiskArea(machine);
item.Part = CreatePart(machine);
return item;
}
@@ -837,14 +837,14 @@ namespace SabreTools.Metadata.DatFiles.Test
private static void ValidateMetadataDisk(Data.Models.Metadata.Disk? disk)
{
Assert.NotNull(disk);
Assert.Equal("flags", disk.ReadString(Data.Models.Metadata.Disk.FlagsKey));
Assert.Equal("index", disk.ReadString(Data.Models.Metadata.Disk.IndexKey));
Assert.Equal(HashType.MD5.ZeroString, disk.ReadString(Data.Models.Metadata.Disk.MD5Key));
Assert.Equal("merge", disk.ReadString(Data.Models.Metadata.Disk.MergeKey));
Assert.Equal("flags", disk.Flags);
Assert.Equal(12345, disk.Index);
Assert.Equal(HashType.MD5.ZeroString, disk.MD5);
Assert.Equal("merge", disk.Merge);
Assert.Equal("name", disk.Name);
Assert.True(disk.Optional);
Assert.Equal("region", disk.ReadString(Data.Models.Metadata.Disk.RegionKey));
Assert.Equal(HashType.SHA1.ZeroString, disk.ReadString(Data.Models.Metadata.Disk.SHA1Key));
Assert.Equal("region", disk.Region);
Assert.Equal(HashType.SHA1.ZeroString, disk.SHA1);
Assert.True(disk.Writable);
}

View File

@@ -1404,9 +1404,12 @@ namespace SabreTools.Metadata.DatFiles.Test
};
machine.Write(Data.Models.Metadata.Machine.CategoryKey, "category");
DatItem item = new Disk { Name = "name" };
item.Write(Data.Models.Metadata.Disk.MD5Key, "md5");
item.Write(Data.Models.Metadata.Disk.SHA1Key, "sha1");
DatItem item = new Disk
{
Name = "name",
MD5 = "md5",
SHA1 = "sha1",
};
string actual = DatFile.FormatPrefixPostfix(item, machine, fix);
Assert.Equal(expected, actual);
@@ -1670,8 +1673,7 @@ namespace SabreTools.Metadata.DatFiles.Test
public void GetDuplicateSuffix_Disk_MD5()
{
string hash = "XXXXXX";
DatItem datItem = new Disk();
datItem.Write(Data.Models.Metadata.Disk.MD5Key, hash);
DatItem datItem = new Disk { MD5 = hash };
string actual = DatFile.GetDuplicateSuffix(datItem);
Assert.Equal($"_{hash}", actual);
@@ -1681,8 +1683,7 @@ namespace SabreTools.Metadata.DatFiles.Test
public void GetDuplicateSuffix_Disk_SHA1()
{
string hash = "XXXXXX";
DatItem datItem = new Disk();
datItem.Write(Data.Models.Metadata.Disk.SHA1Key, hash);
DatItem datItem = new Disk { SHA1 = hash };
string actual = DatFile.GetDuplicateSuffix(datItem);
Assert.Equal($"_{hash}", actual);

View File

@@ -251,9 +251,12 @@ namespace SabreTools.Metadata.DatFiles.Test
/// </summary>
private static Disk CreateDisk()
{
var disk = new Disk { Status = ItemStatus.Good };
disk.Write<string?>(Data.Models.Metadata.Disk.MD5Key, HashType.MD5.ZeroString);
disk.Write<string?>(Data.Models.Metadata.Disk.SHA1Key, HashType.SHA1.ZeroString);
var disk = new Disk
{
Status = ItemStatus.Good,
MD5 = HashType.MD5.ZeroString,
SHA1 = HashType.SHA1.ZeroString,
};
return disk;
}

View File

@@ -143,7 +143,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.NotNull(actual);
Assert.True(actual.SequenceEqual([
nameof(Data.Models.Metadata.Disk.Name),
Data.Models.Metadata.Disk.SHA1Key,
nameof(Data.Models.Metadata.Disk.SHA1),
]));
}
@@ -427,7 +427,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.NotNull(actual);
Assert.True(actual.SequenceEqual([
nameof(Data.Models.Metadata.Disk.Name),
Data.Models.Metadata.Disk.MD5Key,
nameof(Data.Models.Metadata.Disk.MD5),
]));
}
@@ -534,7 +534,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.NotNull(actual);
Assert.True(actual.SequenceEqual([
nameof(Data.Models.Metadata.Disk.Name),
Data.Models.Metadata.Disk.SHA1Key,
nameof(Data.Models.Metadata.Disk.SHA1),
]));
}
@@ -726,7 +726,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.NotNull(actual);
Assert.True(actual.SequenceEqual([
nameof(Data.Models.Metadata.Disk.Name),
Data.Models.Metadata.Disk.SHA1Key,
nameof(Data.Models.Metadata.Disk.SHA1),
]));
}
@@ -822,7 +822,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.NotNull(actual);
Assert.True(actual.SequenceEqual([
nameof(Data.Models.Metadata.Disk.Name),
Data.Models.Metadata.Disk.SHA1Key,
nameof(Data.Models.Metadata.Disk.SHA1),
]));
}
@@ -1139,7 +1139,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.NotNull(actual);
Assert.True(actual.SequenceEqual([
nameof(Data.Models.Metadata.Disk.Name),
Data.Models.Metadata.Disk.SHA1Key,
nameof(Data.Models.Metadata.Disk.SHA1),
]));
}
@@ -1391,7 +1391,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.NotNull(actual);
Assert.True(actual.SequenceEqual([
nameof(Data.Models.Metadata.Disk.Name),
Data.Models.Metadata.Disk.SHA1Key,
nameof(Data.Models.Metadata.Disk.SHA1),
]));
}
@@ -1449,7 +1449,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.NotNull(actual);
Assert.True(actual.SequenceEqual([
nameof(Data.Models.Metadata.Disk.Name),
Data.Models.Metadata.Disk.SHA1Key,
nameof(Data.Models.Metadata.Disk.SHA1),
]));
}
@@ -1507,7 +1507,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.NotNull(actual);
Assert.True(actual.SequenceEqual([
nameof(Data.Models.Metadata.Disk.Name),
Data.Models.Metadata.Disk.SHA1Key,
nameof(Data.Models.Metadata.Disk.SHA1),
]));
}

View File

@@ -16,8 +16,11 @@ namespace SabreTools.Metadata.DatFiles.Test
Source source = new Source(0, source: null);
Machine machine = new Machine();
DatItem disk = new Disk { Name = "item" };
disk.Write<string?>(Data.Models.Metadata.Disk.SHA1Key, "deadbeef");
DatItem disk = new Disk
{
Name = "item",
SHA1 = "deadbeef",
};
var dict = new ItemDictionaryDB();
long sourceIndex = dict.AddSource(source);

View File

@@ -16,10 +16,13 @@ namespace SabreTools.Metadata.DatFiles.Test
Source source = new Source(0, source: null);
Machine machine = new Machine();
DatItem disk = new Disk { Name = "item" };
disk.Write<string?>(Data.Models.Metadata.Disk.SHA1Key, "deadbeef");
disk.Source = source;
disk.Machine = machine;
DatItem disk = new Disk
{
Name = "item",
SHA1 = "deadbeef",
Source = source,
Machine = machine,
};
var dict = new ItemDictionary();
_ = dict.AddItem(disk, statsOnly: false);

View File

@@ -654,9 +654,11 @@ namespace SabreTools.Metadata.DatFiles
if (filterRunner is not null && !filterRunner.Run(disk))
continue;
var diskItem = new Disk(disk, machine, source);
diskItem.Write<DiskArea?>(Disk.DiskAreaKey, diskAreaitem);
diskItem.Write<Part?>(Disk.PartKey, partItem);
var diskItem = new Disk(disk, machine, source)
{
DiskArea = diskAreaitem,
Part = partItem,
};
AddItem(diskItem, statsOnly);
// AddItemDB(diskItem, machineIndex, sourceIndex, statsOnly);

View File

@@ -297,7 +297,7 @@ namespace SabreTools.Metadata.DatFiles
// Special disk handling
if (item is Disk disk)
{
string? mergeTag = disk.ReadString(Data.Models.Metadata.Disk.MergeKey);
string? mergeTag = disk.Merge;
// If the merge tag exists and the parent already contains it, skip
if (mergeTag is not null && GetItemsForBucket(cloneOf)
@@ -433,7 +433,7 @@ namespace SabreTools.Metadata.DatFiles
// Special disk handling
if (item.Value is Disk disk)
{
string? mergeTag = disk.ReadString(Data.Models.Metadata.Disk.MergeKey);
string? mergeTag = disk.Merge;
// If the merge tag exists and the parent already contains it, skip
if (mergeTag is not null && GetItemsForBucketDB(cloneOf).Values
@@ -722,8 +722,7 @@ namespace SabreTools.Metadata.DatFiles
continue;
deviceReferences.Add(deviceReference);
var deviceRef = new DeviceRef();
deviceRef.Name = deviceReference;
var deviceRef = new DeviceRef { Name = deviceReference };
deviceRef.CopyMachineInformation(copyFrom);
Items.AddItem(deviceRef, statsOnly: false);
}
@@ -772,8 +771,7 @@ namespace SabreTools.Metadata.DatFiles
continue;
slotOptions.Add(slotOption);
var slotOptionItem = new SlotOption();
slotOptionItem.DevName = slotOption;
var slotOptionItem = new SlotOption { DevName = slotOption };
slotOptionItem.CopyMachineInformation(copyFrom);
var slotItem = new Slot();
@@ -887,8 +885,7 @@ namespace SabreTools.Metadata.DatFiles
{
if (!deviceReferences.Contains(deviceReference))
{
var deviceRef = new DeviceRef();
deviceRef.Name = deviceReference;
var deviceRef = new DeviceRef { Name = deviceReference };
ItemsDB.AddItem(deviceRef, machine.Key, source.Key);
}
}
@@ -943,8 +940,7 @@ namespace SabreTools.Metadata.DatFiles
{
if (!slotOptions.Contains(slotOption))
{
var slotOptionItem = new SlotOption();
slotOptionItem.DevName = slotOption;
var slotOptionItem = new SlotOption { DevName = slotOption };
var slotItem = new Slot();
slotItem.Write<SlotOption[]?>(Data.Models.Metadata.Slot.SlotOptionKey, [slotOptionItem]);

View File

@@ -164,17 +164,17 @@ namespace SabreTools.Metadata.DatFiles
AppendToMachineKey(machine, Data.Models.Metadata.Machine.DiskKey, diskItem);
// Add Part and DiskArea mappings
bool diskContainsPart = diskItem.ContainsKey(DatItems.Formats.Disk.PartKey);
bool diskContainsDiskArea = diskItem.ContainsKey(DatItems.Formats.Disk.DiskAreaKey);
bool diskContainsPart = disk.Part is not null;
bool diskContainsDiskArea = disk.DiskArea is not null;
if (diskContainsPart && diskContainsDiskArea)
{
var partItem = diskItem.Read<DatItems.Formats.Part>(DatItems.Formats.Disk.PartKey);
var partItem = disk.Part;
if (partItem is not null)
{
var partItemInternal = partItem.GetInternalClone();
partMappings[partItemInternal] = diskItem;
var diskAreaItem = diskItem.Read<DatItems.Formats.DiskArea>(DatItems.Formats.Disk.DiskAreaKey);
var diskAreaItem = disk.DiskArea;
if (diskAreaItem is not null)
diskAreaMappings[partItemInternal] = (diskAreaItem.GetInternalClone(), diskItem);
}
@@ -585,17 +585,17 @@ namespace SabreTools.Metadata.DatFiles
AppendToMachineKey(machine, Data.Models.Metadata.Machine.DiskKey, diskItem);
// Add Part and DiskArea mappings
bool diskContainsPart = diskItem.ContainsKey(DatItems.Formats.Disk.PartKey);
bool diskContainsDiskArea = diskItem.ContainsKey(DatItems.Formats.Disk.DiskAreaKey);
bool diskContainsPart = disk.Part is not null;
bool diskContainsDiskArea = disk.DiskArea is not null;
if (diskContainsPart && diskContainsDiskArea)
{
var partItem = diskItem.Read<DatItems.Formats.Part>(DatItems.Formats.Disk.PartKey);
var partItem = disk.Part;
if (partItem is not null)
{
var partItemInternal = partItem.GetInternalClone();
partMappings[partItemInternal] = diskItem;
var diskAreaItem = diskItem.Read<DatItems.Formats.DiskArea>(DatItems.Formats.Disk.DiskAreaKey);
var diskAreaItem = disk.DiskArea;
if (diskAreaItem is not null)
diskAreaMappings[partItemInternal] = (diskAreaItem.GetInternalClone(), diskItem);
}

View File

@@ -503,7 +503,7 @@ namespace SabreTools.Metadata.DatFiles
if (item is Disk disk)
{
// We can only write out if there's a SHA-1
string? sha1 = disk.ReadString(Data.Models.Metadata.Disk.SHA1Key);
string? sha1 = disk.SHA1;
if (!string.IsNullOrEmpty(sha1))
{
name = Utilities.GetDepotPath(sha1, Modifiers.OutputDepot.Depth)?.Replace('\\', '/');
@@ -606,8 +606,8 @@ namespace SabreTools.Metadata.DatFiles
// Ensure we have the proper values for replacement
if (item is Disk disk)
{
md5 = disk.ReadString(Data.Models.Metadata.Disk.MD5Key) ?? string.Empty;
sha1 = disk.ReadString(Data.Models.Metadata.Disk.SHA1Key) ?? string.Empty;
md5 = disk.MD5 ?? string.Empty;
sha1 = disk.SHA1 ?? string.Empty;
}
else if (item is DatItems.Formats.File file)
{
@@ -1038,11 +1038,11 @@ namespace SabreTools.Metadata.DatFiles
/// </summary>
private static string GetDuplicateSuffix(Disk datItem)
{
string? md5 = datItem.ReadString(Data.Models.Metadata.Disk.MD5Key);
string? md5 = datItem.MD5;
if (!string.IsNullOrEmpty(md5))
return $"_{md5}";
string? sha1 = datItem.ReadString(Data.Models.Metadata.Disk.SHA1Key);
string? sha1 = datItem.SHA1;
if (!string.IsNullOrEmpty(sha1))
return $"_{sha1}";

View File

@@ -330,8 +330,8 @@ namespace SabreTools.Metadata.DatFiles
ItemStatus? status = disk.Status;
if (status != ItemStatus.Nodump)
{
AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) ? 0 : 1);
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key)) ? 0 : 1);
AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.MD5) ? 0 : 1);
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.SHA1) ? 0 : 1);
}
AddStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0);
@@ -459,8 +459,8 @@ namespace SabreTools.Metadata.DatFiles
ItemStatus? status = disk.Status;
if (status != ItemStatus.Nodump)
{
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) ? 0 : 1);
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key)) ? 0 : 1);
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.MD5) ? 0 : 1);
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.SHA1) ? 0 : 1);
}
RemoveStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0);

View File

@@ -114,10 +114,10 @@ namespace SabreTools.Metadata.DatFiles.Formats
case Disk disk:
if (string.IsNullOrEmpty(disk.Name))
missingFields.Add(nameof(Data.Models.Metadata.Disk.Name));
if (string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key))
&& string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key)))
if (string.IsNullOrEmpty(disk.MD5)
&& string.IsNullOrEmpty(disk.SHA1))
{
missingFields.Add(Data.Models.Metadata.Disk.SHA1Key);
missingFields.Add(nameof(Data.Models.Metadata.Disk.SHA1));
}
break;

View File

@@ -37,10 +37,10 @@ namespace SabreTools.Metadata.DatFiles.Formats
switch (datItem)
{
case Disk disk:
if (string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key))
&& string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key)))
if (string.IsNullOrEmpty(disk.MD5)
&& string.IsNullOrEmpty(disk.SHA1))
{
missingFields.Add(Data.Models.Metadata.Disk.SHA1Key);
missingFields.Add(nameof(Data.Models.Metadata.Disk.SHA1));
}
break;

View File

@@ -282,10 +282,10 @@ namespace SabreTools.Metadata.DatFiles.Formats
case Disk disk:
if (string.IsNullOrEmpty(disk.Name))
missingFields.Add(nameof(Data.Models.Metadata.Disk.Name));
if (string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key))
&& string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key)))
if (string.IsNullOrEmpty(disk.MD5)
&& string.IsNullOrEmpty(disk.SHA1))
{
missingFields.Add(Data.Models.Metadata.Disk.SHA1Key);
missingFields.Add(nameof(Data.Models.Metadata.Disk.SHA1));
}
break;

View File

@@ -306,10 +306,10 @@ namespace SabreTools.Metadata.DatFiles.Formats
case Disk disk:
if (string.IsNullOrEmpty(disk.Name))
missingFields.Add(nameof(Data.Models.Metadata.Disk.Name));
if (string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key))
&& string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key)))
if (string.IsNullOrEmpty(disk.MD5)
&& string.IsNullOrEmpty(disk.SHA1))
{
missingFields.Add(Data.Models.Metadata.Disk.SHA1Key);
missingFields.Add(nameof(Data.Models.Metadata.Disk.SHA1));
}
break;

View File

@@ -40,8 +40,8 @@ namespace SabreTools.Metadata.DatFiles.Formats
switch (datItem)
{
case Disk disk:
if (string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)))
missingFields.Add(Data.Models.Metadata.Disk.MD5Key);
if (string.IsNullOrEmpty(disk.MD5))
missingFields.Add(nameof(Data.Models.Metadata.Disk.MD5));
break;
case Media medium:

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using SabreTools.Metadata.DatItems;
using SabreTools.Metadata.DatItems.Formats;
@@ -73,10 +73,10 @@ namespace SabreTools.Metadata.DatFiles.Formats
switch (datItem)
{
case Disk disk:
if (string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key))
&& string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key)))
if (string.IsNullOrEmpty(disk.MD5)
&& string.IsNullOrEmpty(disk.SHA1))
{
missingFields.Add(Data.Models.Metadata.Disk.SHA1Key);
missingFields.Add(nameof(Data.Models.Metadata.Disk.SHA1));
}
break;

View File

@@ -40,8 +40,8 @@ namespace SabreTools.Metadata.DatFiles.Formats
switch (datItem)
{
case Disk disk:
if (string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key)))
missingFields.Add(Data.Models.Metadata.Disk.SHA1Key);
if (string.IsNullOrEmpty(disk.SHA1))
missingFields.Add(nameof(Data.Models.Metadata.Disk.SHA1));
break;
case Media medium:

View File

@@ -145,9 +145,9 @@ namespace SabreTools.Metadata.DatFiles.Formats
}
else
{
if (string.IsNullOrEmpty(disk.Read<Part?>(Disk.PartKey)!.Name))
if (string.IsNullOrEmpty(disk.Part!.Name))
missingFields.Add(nameof(Data.Models.Metadata.Part.Name));
if (string.IsNullOrEmpty(disk.Read<Part?>(Disk.PartKey)!.Interface))
if (string.IsNullOrEmpty(disk.Part.Interface))
missingFields.Add(nameof(Data.Models.Metadata.Part.Interface));
}
@@ -157,7 +157,7 @@ namespace SabreTools.Metadata.DatFiles.Formats
}
else
{
if (string.IsNullOrEmpty(disk.Read<DiskArea?>(Disk.DiskAreaKey)!.Name))
if (string.IsNullOrEmpty(disk.DiskArea!.Name))
missingFields.Add(nameof(Data.Models.Metadata.DiskArea.Name));
}

View File

@@ -99,8 +99,8 @@ namespace SabreTools.Metadata.DatFiles
{
// If the file has aboslutely no hashes, skip and log
if (disk.Status != ItemStatus.Nodump
&& string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key))
&& string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key)))
&& string.IsNullOrEmpty(disk.MD5)
&& string.IsNullOrEmpty(disk.SHA1))
{
_logger.Verbose($"Incomplete entry for '{disk.Name}' will be output as nodump");
disk.Status = ItemStatus.Nodump;

View File

@@ -188,8 +188,8 @@ namespace SabreTools.Metadata.DatFiles
{
// If the file has aboslutely no hashes, skip and log
if (disk.Status != ItemStatus.Nodump
&& string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key))
&& string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key)))
&& string.IsNullOrEmpty(disk.MD5)
&& string.IsNullOrEmpty(disk.SHA1))
{
_logger.Verbose($"Incomplete entry for '{disk.Name}' will be output as nodump");
disk.Status = ItemStatus.Nodump;

View File

@@ -10,39 +10,36 @@ namespace SabreTools.Metadata.DatItems.Formats.Test
[Fact]
public void ConvertToRomTest()
{
DiskArea diskArea = new DiskArea
{
Name = "name"
};
DiskArea diskArea = new DiskArea { Name = "name" };
Machine machine = new Machine { Name = "name" };
Part part = new Part
Part part = new Part { Name = "name" };
Source source = new Source(0, "source");
Disk disk = new Disk
{
Name = "name"
Name = "name",
DiskArea = diskArea,
Merge = "merge",
Region = "region",
Status = Data.Models.Metadata.ItemStatus.Good,
Optional = true,
MD5 = HashType.MD5.ZeroString,
SHA1 = HashType.SHA1.ZeroString,
DupeType = DupeType.All | DupeType.External,
Machine = machine,
Part = part,
RemoveFlag = false,
Source = source,
};
Source source = new Source(0, "XXXXXX");
Disk disk = new Disk { Name = "name" };
disk.Write(Disk.DiskAreaKey, diskArea);
disk.Write(Data.Models.Metadata.Disk.MergeKey, "XXXXXX");
disk.Write(Data.Models.Metadata.Disk.RegionKey, "XXXXXX");
disk.Status = Data.Models.Metadata.ItemStatus.Good;
disk.Optional = true;
disk.Write(Data.Models.Metadata.Disk.MD5Key, HashType.MD5.ZeroString);
disk.Write(Data.Models.Metadata.Disk.SHA1Key, HashType.SHA1.ZeroString);
disk.DupeType = DupeType.All | DupeType.External;
disk.Machine = machine;
disk.Write(Disk.PartKey, part);
disk.RemoveFlag = false;
disk.Source = source;
Rom actual = disk.ConvertToRom();
Assert.Equal("name.chd", actual.Name);
Assert.Equal("XXXXXX", actual.ReadString(Data.Models.Metadata.Rom.MergeKey));
Assert.Equal("XXXXXX", actual.ReadString(Data.Models.Metadata.Rom.RegionKey));
Assert.Equal("merge", actual.ReadString(Data.Models.Metadata.Rom.MergeKey));
Assert.Equal("region", actual.ReadString(Data.Models.Metadata.Rom.RegionKey));
Assert.Equal(Data.Models.Metadata.ItemStatus.Good, actual.Status);
Assert.Equal(true, actual.Optional);
Assert.Equal(HashType.MD5.ZeroString, actual.ReadString(Data.Models.Metadata.Rom.MD5Key));
@@ -66,7 +63,7 @@ namespace SabreTools.Metadata.DatItems.Formats.Test
Source? actualSource = actual.Source;
Assert.NotNull(actualSource);
Assert.Equal(0, actualSource.Index);
Assert.Equal("XXXXXX", actualSource.Name);
Assert.Equal("source", actualSource.Name);
}
#endregion
@@ -81,8 +78,8 @@ namespace SabreTools.Metadata.DatItems.Formats.Test
self.FillMissingInformation(other);
Assert.Null(self.ReadString(Data.Models.Metadata.Disk.MD5Key));
Assert.Null(self.ReadString(Data.Models.Metadata.Disk.SHA1Key));
Assert.Null(self.MD5);
Assert.Null(self.SHA1);
}
[Fact]
@@ -90,14 +87,16 @@ namespace SabreTools.Metadata.DatItems.Formats.Test
{
Disk self = new Disk();
Disk other = new Disk();
other.Write(Data.Models.Metadata.Disk.MD5Key, "XXXXXX");
other.Write(Data.Models.Metadata.Disk.SHA1Key, "XXXXXX");
Disk other = new Disk
{
MD5 = "md5",
SHA1 = "sha1",
};
self.FillMissingInformation(other);
Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Disk.MD5Key));
Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Disk.SHA1Key));
Assert.Equal("md5", self.MD5);
Assert.Equal("sha1", self.SHA1);
}
#endregion
@@ -115,9 +114,11 @@ namespace SabreTools.Metadata.DatItems.Formats.Test
[Fact]
public void HasHashes_MD5_True()
{
Disk self = new Disk();
self.Write(Data.Models.Metadata.Disk.MD5Key, "XXXXXX");
self.Write(Data.Models.Metadata.Disk.SHA1Key, string.Empty);
Disk self = new Disk
{
MD5 = "md5",
SHA1 = string.Empty,
};
bool actual = self.HasHashes();
Assert.True(actual);
@@ -126,9 +127,11 @@ namespace SabreTools.Metadata.DatItems.Formats.Test
[Fact]
public void HasHashes_SHA1_True()
{
Disk self = new Disk();
self.Write(Data.Models.Metadata.Disk.MD5Key, string.Empty);
self.Write(Data.Models.Metadata.Disk.SHA1Key, "XXXXXX");
Disk self = new Disk
{
MD5 = string.Empty,
SHA1 = "sha1",
};
bool actual = self.HasHashes();
Assert.True(actual);
@@ -137,9 +140,11 @@ namespace SabreTools.Metadata.DatItems.Formats.Test
[Fact]
public void HasHashes_All_True()
{
Disk self = new Disk();
self.Write(Data.Models.Metadata.Disk.MD5Key, "XXXXXX");
self.Write(Data.Models.Metadata.Disk.SHA1Key, "XXXXXX");
Disk self = new Disk
{
MD5 = "md5",
SHA1 = "sha1",
};
bool actual = self.HasHashes();
Assert.True(actual);
@@ -160,9 +165,11 @@ namespace SabreTools.Metadata.DatItems.Formats.Test
[Fact]
public void HasZeroHash_NonZeroHash_False()
{
Disk self = new Disk();
self.Write(Data.Models.Metadata.Disk.MD5Key, "DEADBEEF");
self.Write(Data.Models.Metadata.Disk.SHA1Key, "DEADBEEF");
Disk self = new Disk
{
MD5 = "DEADBEEF",
SHA1 = "DEADBEEF",
};
bool actual = self.HasZeroHash();
Assert.False(actual);
@@ -171,9 +178,11 @@ namespace SabreTools.Metadata.DatItems.Formats.Test
[Fact]
public void HasZeroHash_ZeroMD5_True()
{
Disk self = new Disk();
self.Write(Data.Models.Metadata.Disk.MD5Key, HashType.MD5.ZeroString);
self.Write(Data.Models.Metadata.Disk.SHA1Key, string.Empty);
Disk self = new Disk
{
MD5 = HashType.MD5.ZeroString,
SHA1 = string.Empty,
};
bool actual = self.HasZeroHash();
Assert.True(actual);
@@ -182,9 +191,11 @@ namespace SabreTools.Metadata.DatItems.Formats.Test
[Fact]
public void HasZeroHash_ZeroSHA1_True()
{
Disk self = new Disk();
self.Write(Data.Models.Metadata.Disk.MD5Key, string.Empty);
self.Write(Data.Models.Metadata.Disk.SHA1Key, HashType.SHA1.ZeroString);
Disk self = new Disk
{
MD5 = string.Empty,
SHA1 = HashType.SHA1.ZeroString,
};
bool actual = self.HasZeroHash();
Assert.True(actual);
@@ -193,9 +204,11 @@ namespace SabreTools.Metadata.DatItems.Formats.Test
[Fact]
public void HasZeroHash_ZeroAll_True()
{
Disk self = new Disk();
self.Write(Data.Models.Metadata.Disk.MD5Key, HashType.MD5.ZeroString);
self.Write(Data.Models.Metadata.Disk.SHA1Key, HashType.SHA1.ZeroString);
Disk self = new Disk
{
MD5 = HashType.MD5.ZeroString,
SHA1 = HashType.SHA1.ZeroString,
};
bool actual = self.HasZeroHash();
Assert.True(actual);
@@ -257,9 +270,11 @@ namespace SabreTools.Metadata.DatItems.Formats.Test
Machine machine = new Machine { Name = "Machine" };
DatItem datItem = new Disk();
datItem.Write(Data.Models.Metadata.Disk.MD5Key, "DEADBEEF");
datItem.Write(Data.Models.Metadata.Disk.SHA1Key, "DEADBEEF");
DatItem datItem = new Disk
{
MD5 = "DEADBEEF",
SHA1 = "DEADBEEF",
};
string actual = datItem.GetKey(bucketedBy, machine, source, lower, norename);
Assert.Equal(expected, actual);

View File

@@ -12,35 +12,41 @@ namespace SabreTools.Metadata.DatItems.Formats
[JsonObject("disk"), XmlRoot("disk")]
public sealed class Disk : DatItem<Data.Models.Metadata.Disk>
{
#region Constants
/// <summary>
/// Non-standard key for inverted logic
/// </summary>
public const string DiskAreaKey = "DISKAREA";
/// <summary>
/// Non-standard key for inverted logic
/// </summary>
public const string PartKey = "PART";
#endregion
#region Fields
public DiskArea? DiskArea { get; set; }
[JsonIgnore]
public bool DiskAreaSpecified
=> DiskArea is not null && !string.IsNullOrEmpty(DiskArea.Name);
public string? Flags
{
get
{
var diskArea = Read<DiskArea?>(DiskAreaKey);
return diskArea is not null && !string.IsNullOrEmpty(diskArea.Name);
}
get => (_internal as Data.Models.Metadata.Disk)?.Flags;
set => (_internal as Data.Models.Metadata.Disk)?.Flags = value;
}
public long? Index
{
get => (_internal as Data.Models.Metadata.Disk)?.Index;
set => (_internal as Data.Models.Metadata.Disk)?.Index = value;
}
/// <inheritdoc>/>
public override ItemType ItemType => ItemType.Disk;
public string? MD5
{
get => (_internal as Data.Models.Metadata.Disk)?.MD5;
set => (_internal as Data.Models.Metadata.Disk)?.MD5 = value;
}
public string? Merge
{
get => (_internal as Data.Models.Metadata.Disk)?.Merge;
set => (_internal as Data.Models.Metadata.Disk)?.Merge = value;
}
public string? Name
{
get => (_internal as Data.Models.Metadata.Disk)?.Name;
@@ -53,18 +59,31 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.Disk)?.Optional = value;
}
public Part? Part { get; set; }
[JsonIgnore]
public bool PartSpecified
{
get
{
var part = Read<Part?>(PartKey);
return part is not null
&& (!string.IsNullOrEmpty(part.Name)
|| !string.IsNullOrEmpty(part.Interface));
return Part is not null
&& (!string.IsNullOrEmpty(Part.Name)
|| !string.IsNullOrEmpty(Part.Interface));
}
}
public string? Region
{
get => (_internal as Data.Models.Metadata.Disk)?.Region;
set => (_internal as Data.Models.Metadata.Disk)?.Region = value;
}
public string? SHA1
{
get => (_internal as Data.Models.Metadata.Disk)?.SHA1;
set => (_internal as Data.Models.Metadata.Disk)?.SHA1 = value;
}
public ItemStatus? Status
{
get => (_internal as Data.Models.Metadata.Disk)?.Status;
@@ -92,13 +111,11 @@ namespace SabreTools.Metadata.DatItems.Formats
DupeType = 0x00;
// Process hash values
string? md5 = ReadString(Data.Models.Metadata.Disk.MD5Key);
if (md5 is not null)
Write<string?>(Data.Models.Metadata.Disk.MD5Key, TextHelper.NormalizeMD5(md5));
if (MD5 is not null)
MD5 = TextHelper.NormalizeMD5(MD5);
string? sha1 = ReadString(Data.Models.Metadata.Disk.SHA1Key);
if (sha1 is not null)
Write<string?>(Data.Models.Metadata.Disk.SHA1Key, TextHelper.NormalizeSHA1(sha1));
if (SHA1 is not null)
SHA1 = TextHelper.NormalizeSHA1(SHA1);
}
public Disk(Data.Models.Metadata.Disk item, Machine machine, Source source) : this(item)
@@ -123,18 +140,15 @@ namespace SabreTools.Metadata.DatItems.Formats
var rom = new Rom(_internal.ConvertToRom()!);
// Create a DataArea if there was an existing DiskArea
var diskArea = Read<DiskArea?>(DiskAreaKey);
if (diskArea is not null)
if (DiskArea is not null)
{
var dataArea = new DataArea();
dataArea.Name = diskArea.Name;
var dataArea = new DataArea { Name = DiskArea.Name };
rom.Write<DataArea?>(Rom.DataAreaKey, dataArea);
}
rom.DupeType = DupeType;
rom.Machine = Machine?.Clone() as Machine;
rom.Write(Rom.PartKey, Read<Part>(PartKey)?.Clone() as Part);
rom.Write(Rom.PartKey, Part?.Clone() as Part);
rom.RemoveFlag = RemoveFlag;
rom.Source = Source?.Clone() as Source;
@@ -179,11 +193,11 @@ namespace SabreTools.Metadata.DatItems.Formats
switch (bucketedBy)
{
case ItemKey.MD5:
key = ReadString(Data.Models.Metadata.Disk.MD5Key);
key = MD5;
break;
case ItemKey.SHA1:
key = ReadString(Data.Models.Metadata.Disk.SHA1Key);
key = SHA1;
break;
// Let the base handle generic stuff

View File

@@ -504,9 +504,27 @@ namespace SabreTools.Metadata.Filter
checkValue = item.Value;
return true;
case Disk item when fieldName == "flags":
checkValue = item.Flags;
return true;
case Disk item when fieldName == "index":
checkValue = item.Index?.ToString();
return true;
case Disk item when fieldName == "md5":
checkValue = item.MD5;
return true;
case Disk item when fieldName == "merge":
checkValue = item.Merge;
return true;
case Disk item when fieldName == "optional":
checkValue = item.Optional.FromYesNo();
return true;
case Disk item when fieldName == "region":
checkValue = item.Region;
return true;
case Disk item when fieldName == "sha1":
checkValue = item.SHA1;
return true;
case Disk item when fieldName == "status":
checkValue = item.Status?.AsStringValue();
return true;

View File

@@ -24,15 +24,15 @@ namespace SabreTools.Metadata.Test
{
Status = ItemStatus.Nodump,
Name = "name",
[Disk.MD5Key] = string.Empty,
[Disk.SHA1Key] = string.Empty,
MD5 = string.Empty,
SHA1 = string.Empty,
};
DictionaryBase other = new Disk
{
Status = ItemStatus.Nodump,
Name = "name",
[Disk.MD5Key] = string.Empty,
[Disk.SHA1Key] = string.Empty,
MD5 = string.Empty,
SHA1 = string.Empty,
};
bool actual = self.EqualTo(other);
@@ -45,14 +45,14 @@ namespace SabreTools.Metadata.Test
DictionaryBase self = new Disk
{
Name = "name",
[Disk.MD5Key] = "XXXXXX",
[Disk.SHA1Key] = string.Empty,
MD5 = "XXXXXX",
SHA1 = string.Empty,
};
DictionaryBase other = new Disk
{
Name = "name",
[Disk.MD5Key] = string.Empty,
[Disk.SHA1Key] = "XXXXXX",
MD5 = string.Empty,
SHA1 = "XXXXXX",
};
bool actual = self.EqualTo(other);
@@ -65,14 +65,14 @@ namespace SabreTools.Metadata.Test
DictionaryBase self = new Disk
{
Name = "XXXXXX1",
[Disk.MD5Key] = "XXXXXX",
[Disk.SHA1Key] = string.Empty,
MD5 = "XXXXXX",
SHA1 = string.Empty,
};
DictionaryBase other = new Disk
{
Name = "XXXXXX2",
[Disk.MD5Key] = "XXXXXX",
[Disk.SHA1Key] = "XXXXXX",
MD5 = "XXXXXX",
SHA1 = "XXXXXX",
};
bool actual = self.EqualTo(other);
@@ -85,14 +85,14 @@ namespace SabreTools.Metadata.Test
DictionaryBase self = new Disk
{
Name = "XXXXXX1",
[Disk.MD5Key] = string.Empty,
[Disk.SHA1Key] = "XXXXXX",
MD5 = string.Empty,
SHA1 = "XXXXXX",
};
DictionaryBase other = new Disk
{
Name = "XXXXXX2",
[Disk.MD5Key] = "XXXXXX",
[Disk.SHA1Key] = "XXXXXX",
MD5 = "XXXXXX",
SHA1 = "XXXXXX",
};
bool actual = self.EqualTo(other);
@@ -105,14 +105,14 @@ namespace SabreTools.Metadata.Test
DictionaryBase self = new Disk
{
Name = "XXXXXX1",
[Disk.MD5Key] = "XXXXXX",
[Disk.SHA1Key] = "XXXXXX",
MD5 = "XXXXXX",
SHA1 = "XXXXXX",
};
DictionaryBase other = new Disk
{
Name = "XXXXXX2",
[Disk.MD5Key] = "XXXXXX",
[Disk.SHA1Key] = "XXXXXX",
MD5 = "XXXXXX",
SHA1 = "XXXXXX",
};
bool actual = self.EqualTo(other);

View File

@@ -128,11 +128,11 @@ namespace SabreTools.Serialization.CrossModel.Test
var disk = new Data.Models.ClrMamePro.Disk
{
Name = "name",
MD5 = "XXXXXX",
SHA1 = "XXXXXX",
Merge = "XXXXXX",
MD5 = "md5",
SHA1 = "sha1",
Merge = "merge",
Status = Data.Models.Metadata.ItemStatus.Good,
Flags = "XXXXXX",
Flags = "flags",
};
var sample = new Data.Models.ClrMamePro.Sample
@@ -395,11 +395,11 @@ namespace SabreTools.Serialization.CrossModel.Test
{
Assert.NotNull(disk);
Assert.Equal("name", disk.Name);
Assert.Equal("XXXXXX", disk.MD5);
Assert.Equal("XXXXXX", disk.SHA1);
Assert.Equal("XXXXXX", disk.Merge);
Assert.Equal("md5", disk.MD5);
Assert.Equal("sha1", disk.SHA1);
Assert.Equal("merge", disk.Merge);
Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status);
Assert.Equal("XXXXXX", disk.Flags);
Assert.Equal("flags", disk.Flags);
}
/// <summary>

View File

@@ -89,11 +89,11 @@ namespace SabreTools.Serialization.CrossModel.Test
var disk = new Data.Models.Listxml.Disk
{
Name = "name",
MD5 = "XXXXXX",
SHA1 = "XXXXXX",
Merge = "XXXXXX",
Region = "XXXXXX",
Index = "XXXXXX",
MD5 = "md5",
SHA1 = "sha1",
Merge = "merge",
Region = "region",
Index = 12345,
Writable = true,
Status = Data.Models.Metadata.ItemStatus.Good,
Optional = true,
@@ -505,11 +505,11 @@ namespace SabreTools.Serialization.CrossModel.Test
{
Assert.NotNull(disk);
Assert.Equal("name", disk.Name);
Assert.Equal("XXXXXX", disk.MD5);
Assert.Equal("XXXXXX", disk.SHA1);
Assert.Equal("XXXXXX", disk.Merge);
Assert.Equal("XXXXXX", disk.Region);
Assert.Equal("XXXXXX", disk.Index);
Assert.Equal("md5", disk.MD5);
Assert.Equal("sha1", disk.SHA1);
Assert.Equal("merge", disk.Merge);
Assert.Equal("region", disk.Region);
Assert.Equal(12345, disk.Index);
Assert.Equal(true, disk.Writable);
Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status);
Assert.Equal(true, disk.Optional);

View File

@@ -85,11 +85,11 @@ namespace SabreTools.Serialization.CrossModel.Test
var disk = new Data.Models.Listxml.Disk
{
Name = "name",
MD5 = "XXXXXX",
SHA1 = "XXXXXX",
Merge = "XXXXXX",
Region = "XXXXXX",
Index = "XXXXXX",
MD5 = "md5",
SHA1 = "sha1",
Merge = "merge",
Region = "region",
Index = 12345,
Writable = true,
Status = Data.Models.Metadata.ItemStatus.Good,
Optional = true,
@@ -499,11 +499,11 @@ namespace SabreTools.Serialization.CrossModel.Test
{
Assert.NotNull(disk);
Assert.Equal("name", disk.Name);
Assert.Equal("XXXXXX", disk.MD5);
Assert.Equal("XXXXXX", disk.SHA1);
Assert.Equal("XXXXXX", disk.Merge);
Assert.Equal("XXXXXX", disk.Region);
Assert.Equal("XXXXXX", disk.Index);
Assert.Equal("md5", disk.MD5);
Assert.Equal("sha1", disk.SHA1);
Assert.Equal("merge", disk.Merge);
Assert.Equal("region", disk.Region);
Assert.Equal(12345, disk.Index);
Assert.Equal(true, disk.Writable);
Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status);
Assert.Equal(true, disk.Optional);

View File

@@ -85,11 +85,11 @@ namespace SabreTools.Serialization.CrossModel.Test
var disk = new Data.Models.Listxml.Disk
{
Name = "name",
MD5 = "XXXXXX",
SHA1 = "XXXXXX",
Merge = "XXXXXX",
Region = "XXXXXX",
Index = "XXXXXX",
MD5 = "md5",
SHA1 = "sha1",
Merge = "merge",
Region = "region",
Index = 12345,
Writable = true,
Status = Data.Models.Metadata.ItemStatus.Good,
Optional = true,
@@ -499,11 +499,11 @@ namespace SabreTools.Serialization.CrossModel.Test
{
Assert.NotNull(disk);
Assert.Equal("name", disk.Name);
Assert.Equal("XXXXXX", disk.MD5);
Assert.Equal("XXXXXX", disk.SHA1);
Assert.Equal("XXXXXX", disk.Merge);
Assert.Equal("XXXXXX", disk.Region);
Assert.Equal("XXXXXX", disk.Index);
Assert.Equal("md5", disk.MD5);
Assert.Equal("sha1", disk.SHA1);
Assert.Equal("merge", disk.Merge);
Assert.Equal("region", disk.Region);
Assert.Equal(12345, disk.Index);
Assert.Equal(true, disk.Writable);
Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status);
Assert.Equal(true, disk.Optional);

View File

@@ -197,11 +197,11 @@ namespace SabreTools.Serialization.CrossModel
var disk = new Disk
{
Name = item.Name,
MD5 = item.ReadString(Data.Models.Metadata.Disk.MD5Key),
SHA1 = item.ReadString(Data.Models.Metadata.Disk.SHA1Key),
Merge = item.ReadString(Data.Models.Metadata.Disk.MergeKey),
MD5 = item.MD5,
SHA1 = item.SHA1,
Merge = item.Merge,
Status = item.Status,
Flags = item.ReadString(Data.Models.Metadata.Disk.FlagsKey),
Flags = item.Flags,
};
return disk;
}

View File

@@ -210,11 +210,11 @@ namespace SabreTools.Serialization.CrossModel
var disk = new Data.Models.Metadata.Disk
{
Name = item.Name,
[Data.Models.Metadata.Disk.MD5Key] = item.MD5,
[Data.Models.Metadata.Disk.SHA1Key] = item.SHA1,
[Data.Models.Metadata.Disk.MergeKey] = item.Merge,
MD5 = item.MD5,
SHA1 = item.SHA1,
Merge = item.Merge,
Status = item.Status,
[Data.Models.Metadata.Disk.FlagsKey] = item.Flags,
Flags = item.Flags,
};
return disk;
}

View File

@@ -56,8 +56,8 @@ namespace SabreTools.Serialization.CrossModel
var row = new Row
{
Name = item.Name,
MD5 = item.ReadString(Data.Models.Metadata.Disk.MD5Key),
SHA1 = item.ReadString(Data.Models.Metadata.Disk.SHA1Key),
MD5 = item.MD5,
SHA1 = item.SHA1,
};
if (item.Status == Data.Models.Metadata.ItemStatus.Nodump)

View File

@@ -84,8 +84,8 @@ namespace SabreTools.Serialization.CrossModel
var disk = new Data.Models.Metadata.Disk
{
Name = item.Name,
[Data.Models.Metadata.Disk.MD5Key] = item.MD5,
[Data.Models.Metadata.Disk.SHA1Key] = item.SHA1,
MD5 = item.MD5,
SHA1 = item.SHA1,
};
if (item.NoGoodDumpKnown)

View File

@@ -404,11 +404,11 @@ namespace SabreTools.Serialization.CrossModel
var disk = new Disk
{
Name = item.Name,
MD5 = item.ReadString(Data.Models.Metadata.Disk.MD5Key),
SHA1 = item.ReadString(Data.Models.Metadata.Disk.SHA1Key),
Merge = item.ReadString(Data.Models.Metadata.Disk.MergeKey),
Region = item.ReadString(Data.Models.Metadata.Disk.RegionKey),
Index = item.ReadString(Data.Models.Metadata.Disk.IndexKey),
MD5 = item.MD5,
SHA1 = item.SHA1,
Merge = item.Merge,
Region = item.Region,
Index = item.Index,
Writable = item.Writable,
Status = item.Status,
Optional = item.Optional,

View File

@@ -427,11 +427,11 @@ namespace SabreTools.Serialization.CrossModel
var disk = new Data.Models.Metadata.Disk
{
Name = item.Name,
[Data.Models.Metadata.Disk.MD5Key] = item.MD5,
[Data.Models.Metadata.Disk.SHA1Key] = item.SHA1,
[Data.Models.Metadata.Disk.MergeKey] = item.Merge,
[Data.Models.Metadata.Disk.RegionKey] = item.Region,
[Data.Models.Metadata.Disk.IndexKey] = item.Index,
MD5 = item.MD5,
SHA1 = item.SHA1,
Merge = item.Merge,
Region = item.Region,
Index = item.Index,
Writable = item.Writable,
Status = item.Status,
Optional = item.Optional,

View File

@@ -233,11 +233,11 @@ namespace SabreTools.Serialization.CrossModel
var disk = new Disk
{
Name = item.Name,
MD5 = item.ReadString(Data.Models.Metadata.Disk.MD5Key),
SHA1 = item.ReadString(Data.Models.Metadata.Disk.SHA1Key),
Merge = item.ReadString(Data.Models.Metadata.Disk.MergeKey),
MD5 = item.MD5,
SHA1 = item.SHA1,
Merge = item.Merge,
Status = item.Status,
Region = item.ReadString(Data.Models.Metadata.Disk.RegionKey),
Region = item.Region,
};
return disk;
}

View File

@@ -227,11 +227,11 @@ namespace SabreTools.Serialization.CrossModel
var disk = new Data.Models.Metadata.Disk
{
Name = item.Name,
[Data.Models.Metadata.Disk.MD5Key] = item.MD5,
[Data.Models.Metadata.Disk.SHA1Key] = item.SHA1,
[Data.Models.Metadata.Disk.MergeKey] = item.Merge,
MD5 = item.MD5,
SHA1 = item.SHA1,
Merge = item.Merge,
Status = item.Status,
[Data.Models.Metadata.Disk.RegionKey] = item.Region,
Region = item.Region,
};
return disk;
}

View File

@@ -86,8 +86,8 @@ namespace SabreTools.Serialization.CrossModel
DiskName = item.Name,
Size = null,
CRC = null,
MD5 = item.ReadString(Data.Models.Metadata.Disk.MD5Key),
SHA1 = item.ReadString(Data.Models.Metadata.Disk.SHA1Key),
MD5 = item.MD5,
SHA1 = item.SHA1,
SHA256 = null,
SHA384 = null,
SHA512 = null,

View File

@@ -90,8 +90,8 @@ namespace SabreTools.Serialization.CrossModel
"disk" => new Data.Models.Metadata.Disk
{
Name = item.DiskName,
[Data.Models.Metadata.Disk.MD5Key] = item.MD5,
[Data.Models.Metadata.Disk.SHA1Key] = item.SHA1,
MD5 = item.MD5,
SHA1 = item.SHA1,
Status = item.Status,
},
"media" => new Data.Models.Metadata.Media

View File

@@ -127,8 +127,8 @@ namespace SabreTools.Serialization.CrossModel
var disk = new Disk
{
Name = item.Name,
MD5 = item.ReadString(Data.Models.Metadata.Disk.MD5Key),
SHA1 = item.ReadString(Data.Models.Metadata.Disk.SHA1Key),
MD5 = item.MD5,
SHA1 = item.SHA1,
Status = item.Status,
Writeable = item.Writable,
};

View File

@@ -126,8 +126,8 @@ namespace SabreTools.Serialization.CrossModel
var disk = new Data.Models.Metadata.Disk
{
Name = item.Name,
[Data.Models.Metadata.Disk.MD5Key] = item.MD5,
[Data.Models.Metadata.Disk.SHA1Key] = item.SHA1,
MD5 = item.MD5,
SHA1 = item.SHA1,
Status = item.Status,
Writable = item.Writeable,
};

View File

@@ -156,11 +156,11 @@ namespace SabreTools.Serialization.Readers.Test
var disk = new Data.Models.Listxml.Disk
{
Name = "name",
MD5 = "XXXXXX",
SHA1 = "XXXXXX",
Merge = "XXXXXX",
Region = "XXXXXX",
Index = "XXXXXX",
MD5 = "md5",
SHA1 = "sha1",
Merge = "merge",
Region = "region",
Index = 12345,
Writable = true,
Status = Data.Models.Metadata.ItemStatus.Good,
Optional = true,
@@ -572,11 +572,11 @@ namespace SabreTools.Serialization.Readers.Test
{
Assert.NotNull(disk);
Assert.Equal("name", disk.Name);
Assert.Equal("XXXXXX", disk.MD5);
Assert.Equal("XXXXXX", disk.SHA1);
Assert.Equal("XXXXXX", disk.Merge);
Assert.Equal("XXXXXX", disk.Region);
Assert.Equal("XXXXXX", disk.Index);
Assert.Equal("md5", disk.MD5);
Assert.Equal("sha1", disk.SHA1);
Assert.Equal("merge", disk.Merge);
Assert.Equal("region", disk.Region);
Assert.Equal(12345, disk.Index);
Assert.Equal(true, disk.Writable);
Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status);
Assert.Equal(true, disk.Optional);

View File

@@ -152,11 +152,11 @@ namespace SabreTools.Serialization.Readers.Test
var disk = new Data.Models.Listxml.Disk
{
Name = "name",
MD5 = "XXXXXX",
SHA1 = "XXXXXX",
Merge = "XXXXXX",
Region = "XXXXXX",
Index = "XXXXXX",
MD5 = "md5",
SHA1 = "sha1",
Merge = "merge",
Region = "region",
Index = 12345,
Writable = true,
Status = Data.Models.Metadata.ItemStatus.Good,
Optional = true,
@@ -566,11 +566,11 @@ namespace SabreTools.Serialization.Readers.Test
{
Assert.NotNull(disk);
Assert.Equal("name", disk.Name);
Assert.Equal("XXXXXX", disk.MD5);
Assert.Equal("XXXXXX", disk.SHA1);
Assert.Equal("XXXXXX", disk.Merge);
Assert.Equal("XXXXXX", disk.Region);
Assert.Equal("XXXXXX", disk.Index);
Assert.Equal("md5", disk.MD5);
Assert.Equal("sha1", disk.SHA1);
Assert.Equal("merge", disk.Merge);
Assert.Equal("region", disk.Region);
Assert.Equal(12345, disk.Index);
Assert.Equal(true, disk.Writable);
Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status);
Assert.Equal(true, disk.Optional);

View File

@@ -152,11 +152,11 @@ namespace SabreTools.Serialization.Readers.Test
var disk = new Data.Models.Listxml.Disk
{
Name = "name",
MD5 = "XXXXXX",
SHA1 = "XXXXXX",
Merge = "XXXXXX",
Region = "XXXXXX",
Index = "XXXXXX",
MD5 = "md5",
SHA1 = "sha1",
Merge = "merge",
Region = "region",
Index = 12345,
Writable = true,
Status = Data.Models.Metadata.ItemStatus.Good,
Optional = true,
@@ -566,11 +566,11 @@ namespace SabreTools.Serialization.Readers.Test
{
Assert.NotNull(disk);
Assert.Equal("name", disk.Name);
Assert.Equal("XXXXXX", disk.MD5);
Assert.Equal("XXXXXX", disk.SHA1);
Assert.Equal("XXXXXX", disk.Merge);
Assert.Equal("XXXXXX", disk.Region);
Assert.Equal("XXXXXX", disk.Index);
Assert.Equal("md5", disk.MD5);
Assert.Equal("sha1", disk.SHA1);
Assert.Equal("merge", disk.Merge);
Assert.Equal("region", disk.Region);
Assert.Equal(12345, disk.Index);
Assert.Equal(true, disk.Writable);
Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status);
Assert.Equal(true, disk.Optional);

View File

@@ -557,7 +557,7 @@ namespace SabreTools.Serialization.Readers
obj.SHA1 = reader.GetAttribute("sha1");
obj.Merge = reader.GetAttribute("merge");
obj.Region = reader.GetAttribute("region");
obj.Index = reader.GetAttribute("index");
obj.Index = NumberHelper.ConvertToInt64(reader.GetAttribute("index"));
obj.Writable = reader.GetAttribute("writable").AsYesNo();
obj.Status = reader.GetAttribute("status").AsItemStatus();
obj.Optional = reader.GetAttribute("optional").AsYesNo();

View File

@@ -555,7 +555,7 @@ namespace SabreTools.Serialization.Readers
obj.SHA1 = reader.GetAttribute("sha1");
obj.Merge = reader.GetAttribute("merge");
obj.Region = reader.GetAttribute("region");
obj.Index = reader.GetAttribute("index");
obj.Index = NumberHelper.ConvertToInt64(reader.GetAttribute("index"));
obj.Writable = reader.GetAttribute("writable").AsYesNo();
obj.Status = reader.GetAttribute("status").AsItemStatus();
obj.Optional = reader.GetAttribute("optional").AsYesNo();

View File

@@ -555,7 +555,7 @@ namespace SabreTools.Serialization.Readers
obj.SHA1 = reader.GetAttribute("sha1");
obj.Merge = reader.GetAttribute("merge");
obj.Region = reader.GetAttribute("region");
obj.Index = reader.GetAttribute("index");
obj.Index = NumberHelper.ConvertToInt64(reader.GetAttribute("index"));
obj.Writable = reader.GetAttribute("writable").AsYesNo();
obj.Status = reader.GetAttribute("status").AsItemStatus();
obj.Optional = reader.GetAttribute("optional").AsYesNo();

View File

@@ -372,7 +372,7 @@ namespace SabreTools.Serialization.Writers
writer.WriteOptionalAttributeString("sha1", obj.SHA1);
writer.WriteOptionalAttributeString("merge", obj.Merge);
writer.WriteOptionalAttributeString("region", obj.Region);
writer.WriteOptionalAttributeString("index", obj.Index);
writer.WriteOptionalAttributeString("index", obj.Index?.ToString());
writer.WriteOptionalAttributeString("writable", obj.Writable.FromYesNo());
writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue());
writer.WriteOptionalAttributeString("optional", obj.Optional.FromYesNo());

View File

@@ -370,7 +370,7 @@ namespace SabreTools.Serialization.Writers
writer.WriteOptionalAttributeString("sha1", obj.SHA1);
writer.WriteOptionalAttributeString("merge", obj.Merge);
writer.WriteOptionalAttributeString("region", obj.Region);
writer.WriteOptionalAttributeString("index", obj.Index);
writer.WriteOptionalAttributeString("index", obj.Index?.ToString());
writer.WriteOptionalAttributeString("writable", obj.Writable.FromYesNo());
writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue());
writer.WriteOptionalAttributeString("optional", obj.Optional.FromYesNo());

View File

@@ -370,7 +370,7 @@ namespace SabreTools.Serialization.Writers
writer.WriteOptionalAttributeString("sha1", obj.SHA1);
writer.WriteOptionalAttributeString("merge", obj.Merge);
writer.WriteOptionalAttributeString("region", obj.Region);
writer.WriteOptionalAttributeString("index", obj.Index);
writer.WriteOptionalAttributeString("index", obj.Index?.ToString());
writer.WriteOptionalAttributeString("writable", obj.Writable.FromYesNo());
writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue());
writer.WriteOptionalAttributeString("optional", obj.Optional.FromYesNo());