mirror of
https://github.com/SabreTools/SabreTools.Serialization.git
synced 2026-04-05 22:01:33 +00:00
Fix everything
This commit is contained in:
@@ -5,6 +5,7 @@ using SabreTools.CommandLine;
|
||||
using SabreTools.CommandLine.Inputs;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
using SabreTools.Wrappers;
|
||||
|
||||
namespace InfoPrint.Features
|
||||
|
||||
@@ -79,6 +79,10 @@ Below are a list of the included namespaces with links to their README files:
|
||||
|
||||
- [SabreTools.Data.Extensions](https://github.com/SabreTools/SabreTools.Serialization/tree/main/SabreTools.Data.Extensions)
|
||||
- [SabreTools.Data.Models](https://github.com/SabreTools/SabreTools.Serialization/tree/main/SabreTools.Data.Models)
|
||||
- [SabreTools.Metadata](https://github.com/SabreTools/SabreTools.Serialization/tree/main/SabreTools.Metadata)
|
||||
- [SabreTools.Metadata.DatFiles](https://github.com/SabreTools/SabreTools.Serialization/tree/main/SabreTools.Metadata.DatFiles)
|
||||
- [SabreTools.Metadata.DatItems](https://github.com/SabreTools/SabreTools.Serialization/tree/main/SabreTools.Metadata.Datitems)
|
||||
- [SabreTools.Metadata.Filter](https://github.com/SabreTools/SabreTools.Serialization/tree/main/SabreTools.Metadata.Filter)
|
||||
- [SabreTools.ObjectIdentifier](https://github.com/SabreTools/SabreTools.Serialization/tree/main/SabreTools.ObjectIdentifier)
|
||||
- [SabreTools.Serialization.CrossModel](https://github.com/SabreTools/SabreTools.Serialization/tree/main/SabreTools.Serialization.CrossModel)
|
||||
- [SabreTools.Serialization.Readers](https://github.com/SabreTools/SabreTools.Serialization/tree/main/SabreTools.Serialization.Readers)
|
||||
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using System.IO;
|
||||
using SabreTools.Data.Models.CDROM;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
|
||||
namespace SabreTools.Data.Extensions
|
||||
{
|
||||
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using SabreTools.Data.Models.Metadata;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Matching;
|
||||
|
||||
namespace SabreTools.Data.Extensions
|
||||
{
|
||||
|
||||
@@ -178,7 +178,7 @@ namespace SabreTools.Data.Extensions
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <summary>
|
||||
/// Convert a <see cref="TVSystemExtended"/> value to string
|
||||
/// </summary>
|
||||
public static string FromTVSystemExtended(this TVSystemExtended system)
|
||||
|
||||
@@ -36,8 +36,8 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\SabreTools.Data.Models\SabreTools.Data.Models.csproj" />
|
||||
<ProjectReference Include="..\SabreTools.ObjectIdentifier\SabreTools.ObjectIdentifier.csproj" />
|
||||
<ProjectReference Include="..\SabreTools.Data.Models\SabreTools.Data.Models.csproj" />
|
||||
<ProjectReference Include="..\SabreTools.ObjectIdentifier\SabreTools.ObjectIdentifier.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -1,5 +1,5 @@
|
||||
using System;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
|
||||
namespace SabreTools.Data.Extensions
|
||||
{
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
using SabreTools.Numerics;
|
||||
|
||||
namespace SabreTools.Data.Models.AACS
|
||||
{
|
||||
/// <summary>
|
||||
@@ -23,6 +25,6 @@ namespace SabreTools.Data.Models.AACS
|
||||
/// fields themselves. Record lengths are always multiples of 4 bytes.
|
||||
/// </summary>
|
||||
// <remarks>UInt24 not UInt32</remarks>
|
||||
public uint RecordLength { get; set; }
|
||||
public UInt24 RecordLength { get; set; } = new();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -717,7 +717,7 @@ namespace SabreTools.Metadata.DatFiles
|
||||
}
|
||||
|
||||
// Now that every device reference is accounted for, add the new list of device references, if they don't already exist
|
||||
foreach (string deviceReference in newDeviceReferences)
|
||||
foreach (var deviceReference in newDeviceReferences)
|
||||
{
|
||||
if (!deviceReferences.Contains(deviceReference))
|
||||
{
|
||||
@@ -767,7 +767,7 @@ namespace SabreTools.Metadata.DatFiles
|
||||
}
|
||||
|
||||
// Now that every device is accounted for, add the new list of slot options, if they don't already exist
|
||||
foreach (string slotOption in newSlotOptions)
|
||||
foreach (var slotOption in newSlotOptions)
|
||||
{
|
||||
if (!slotOptions.Contains(slotOption))
|
||||
{
|
||||
@@ -884,7 +884,7 @@ namespace SabreTools.Metadata.DatFiles
|
||||
}
|
||||
|
||||
// Now that every device reference is accounted for, add the new list of device references, if they don't already exist
|
||||
foreach (string deviceReference in newDeviceReferences)
|
||||
foreach (var deviceReference in newDeviceReferences)
|
||||
{
|
||||
if (!deviceReferences.Contains(deviceReference))
|
||||
{
|
||||
@@ -940,7 +940,7 @@ namespace SabreTools.Metadata.DatFiles
|
||||
}
|
||||
|
||||
// Now that every device is accounted for, add the new list of slot options, if they don't already exist
|
||||
foreach (string slotOption in newSlotOptions)
|
||||
foreach (var slotOption in newSlotOptions)
|
||||
{
|
||||
if (!slotOptions.Contains(slotOption))
|
||||
{
|
||||
|
||||
@@ -80,7 +80,7 @@ namespace SabreTools.Metadata.DatFiles
|
||||
// Handle Trurip object, if it exists
|
||||
if (machine.ContainsKey(Data.Models.Metadata.Machine.TruripKey))
|
||||
{
|
||||
var trurip = machine.Read<DatItems.Trurip>(Data.Models.Metadata.Machine.TruripKey);
|
||||
var trurip = machine.Read<Trurip>(Data.Models.Metadata.Machine.TruripKey);
|
||||
if (trurip is not null)
|
||||
{
|
||||
var truripItem = trurip.ConvertToLogiqx();
|
||||
@@ -294,6 +294,9 @@ namespace SabreTools.Metadata.DatFiles
|
||||
EnsureMachineKey<Data.Models.Metadata.Sound?>(machine, Data.Models.Metadata.Machine.SoundKey);
|
||||
AppendToMachineKey(machine, Data.Models.Metadata.Machine.SoundKey, soundItem);
|
||||
break;
|
||||
default:
|
||||
// This should never happen
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -506,7 +509,7 @@ namespace SabreTools.Metadata.DatFiles
|
||||
// Handle Trurip object, if it exists
|
||||
if (machine.ContainsKey(Data.Models.Metadata.Machine.TruripKey))
|
||||
{
|
||||
var trurip = machine.Read<DatItems.Trurip>(Data.Models.Metadata.Machine.TruripKey);
|
||||
var trurip = machine.Read<Trurip>(Data.Models.Metadata.Machine.TruripKey);
|
||||
if (trurip is not null)
|
||||
{
|
||||
var truripItem = trurip.ConvertToLogiqx();
|
||||
@@ -717,6 +720,9 @@ namespace SabreTools.Metadata.DatFiles
|
||||
EnsureMachineKey<Data.Models.Metadata.Sound?>(machine, Data.Models.Metadata.Machine.SoundKey);
|
||||
AppendToMachineKey(machine, Data.Models.Metadata.Machine.SoundKey, soundItem);
|
||||
break;
|
||||
default:
|
||||
// This should never happen
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -944,6 +950,9 @@ namespace SabreTools.Metadata.DatFiles
|
||||
case 270:
|
||||
videoItem[Data.Models.Metadata.Video.OrientationKey] = "vertical";
|
||||
break;
|
||||
default:
|
||||
// This should never happen
|
||||
break;
|
||||
}
|
||||
|
||||
EnsureMachineKey<Data.Models.Metadata.Video?>(machine, Data.Models.Metadata.Machine.VideoKey);
|
||||
@@ -1052,6 +1061,11 @@ namespace SabreTools.Metadata.DatFiles
|
||||
EnsureMachineKey<Data.Models.Metadata.Dump?>(machine, Data.Models.Metadata.Machine.DumpKey);
|
||||
AppendToMachineKey(machine, Data.Models.Metadata.Machine.DumpKey, dumpSccPlusCart);
|
||||
break;
|
||||
case OpenMSXSubType.NULL:
|
||||
break;
|
||||
default:
|
||||
// This should never happen
|
||||
break;
|
||||
}
|
||||
|
||||
return romItem;
|
||||
|
||||
@@ -3,13 +3,14 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Metadata.Filter;
|
||||
using SabreTools.Metadata.Tools;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.Logging;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.IO.Logging;
|
||||
using SabreTools.Metadata.Filter;
|
||||
using SabreTools.Metadata.Tools;
|
||||
using SabreTools.Text.Compare;
|
||||
using SabreTools.Text.Extensions;
|
||||
|
||||
namespace SabreTools.Metadata.DatFiles
|
||||
{
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using SabreTools.Metadata.Filter;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
using SabreTools.Metadata.Filter;
|
||||
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
{
|
||||
|
||||
19
SabreTools.Metadata.DatFiles/Formats/CommaSeparatedValue.cs
Normal file
19
SabreTools.Metadata.DatFiles/Formats/CommaSeparatedValue.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
#pragma warning disable IDE0290 // Use primary constructor
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a comma-separated value file
|
||||
/// </summary>
|
||||
public sealed class CommaSeparatedValue : SeparatedValue
|
||||
{
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public CommaSeparatedValue(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_delim = ',';
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.CSV);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using SabreTools.Metadata.Filter;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.Metadata.Filter;
|
||||
|
||||
#pragma warning disable IDE0290 // Use primary constructor
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
@@ -26,6 +23,7 @@ namespace SabreTools.Metadata.DatFiles.Formats
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public Hashfile(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.SHA1;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -78,524 +76,4 @@ namespace SabreTools.Metadata.DatFiles.Formats
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents an SFV (CRC-32) hashfile
|
||||
/// </summary>
|
||||
public sealed class SfvFile : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public SfvFile(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.CRC32;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpSFV);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.CRCKey)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.CRCKey);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents an MD2 hashfile
|
||||
/// </summary>
|
||||
public sealed class Md2File : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public Md2File(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.MD2;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpMD2);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.MD2Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.MD2Key);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents an MD4 hashfile
|
||||
/// </summary>
|
||||
public sealed class Md4File : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public Md4File(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.MD4;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpMD4);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.MD4Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.MD4Key);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents an MD5 hashfile
|
||||
/// </summary>
|
||||
public sealed class Md5File : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Disk,
|
||||
ItemType.Media,
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public Md5File(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.MD5;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpMD5);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Disk disk:
|
||||
if (string.IsNullOrEmpty(disk.GetStringFieldValue(Data.Models.Metadata.Disk.MD5Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Disk.MD5Key);
|
||||
break;
|
||||
|
||||
case Media medium:
|
||||
if (string.IsNullOrEmpty(medium.GetStringFieldValue(Data.Models.Metadata.Media.MD5Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Media.MD5Key);
|
||||
break;
|
||||
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.MD5Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.MD5Key);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents an RIPEMD128 hashfile
|
||||
/// </summary>
|
||||
public sealed class RipeMD128File : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public RipeMD128File(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.RIPEMD128;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpRIPEMD128);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.RIPEMD128Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.RIPEMD128Key);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents an RIPEMD160 hashfile
|
||||
/// </summary>
|
||||
public sealed class RipeMD160File : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public RipeMD160File(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.RIPEMD160;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpRIPEMD160);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.RIPEMD160Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.RIPEMD160Key);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents an SHA-1 hashfile
|
||||
/// </summary>
|
||||
public sealed class Sha1File : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Disk,
|
||||
ItemType.Media,
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public Sha1File(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.SHA1;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpSHA1);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Disk disk:
|
||||
if (string.IsNullOrEmpty(disk.GetStringFieldValue(Data.Models.Metadata.Disk.SHA1Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Disk.SHA1Key);
|
||||
break;
|
||||
|
||||
case Media medium:
|
||||
if (string.IsNullOrEmpty(medium.GetStringFieldValue(Data.Models.Metadata.Media.SHA1Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Media.SHA1Key);
|
||||
break;
|
||||
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.SHA1Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.SHA1Key);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents an SHA-256 hashfile
|
||||
/// </summary>
|
||||
public sealed class Sha256File : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Media,
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public Sha256File(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.SHA256;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpSHA256);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Media medium:
|
||||
if (string.IsNullOrEmpty(medium.GetStringFieldValue(Data.Models.Metadata.Media.SHA256Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Media.SHA256Key);
|
||||
break;
|
||||
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.SHA256Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.SHA256Key);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents an SHA-384 hashfile
|
||||
/// </summary>
|
||||
public sealed class Sha384File : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public Sha384File(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.SHA384;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpSHA384);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.SHA384Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.SHA384Key);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents an SHA-512 hashfile
|
||||
/// </summary>
|
||||
public sealed class Sha512File : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public Sha512File(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.SHA512;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpSHA512);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.SHA512Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.SHA512Key);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents an SpamSum hashfile
|
||||
/// </summary>
|
||||
public sealed class SpamSumFile : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Media,
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public SpamSumFile(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.SpamSum;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpSpamSum);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Media medium:
|
||||
if (string.IsNullOrEmpty(medium.GetStringFieldValue(Data.Models.Metadata.Media.SpamSumKey)))
|
||||
missingFields.Add(Data.Models.Metadata.Media.SpamSumKey);
|
||||
break;
|
||||
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.SpamSumKey)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.SpamSumKey);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using SabreTools.Metadata.Filter;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
using SabreTools.Metadata.Filter;
|
||||
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
{
|
||||
|
||||
52
SabreTools.Metadata.DatFiles/Formats/Md2File.cs
Normal file
52
SabreTools.Metadata.DatFiles/Formats/Md2File.cs
Normal file
@@ -0,0 +1,52 @@
|
||||
using System.Collections.Generic;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
|
||||
#pragma warning disable IDE0290 // Use primary constructor
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an MD2 hashfile
|
||||
/// </summary>
|
||||
public sealed class Md2File : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public Md2File(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.MD2;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpMD2);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.MD2Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.MD2Key);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
}
|
||||
52
SabreTools.Metadata.DatFiles/Formats/Md4File.cs
Normal file
52
SabreTools.Metadata.DatFiles/Formats/Md4File.cs
Normal file
@@ -0,0 +1,52 @@
|
||||
using System.Collections.Generic;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
|
||||
#pragma warning disable IDE0290 // Use primary constructor
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an MD4 hashfile
|
||||
/// </summary>
|
||||
public sealed class Md4File : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public Md4File(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.MD4;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpMD4);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.MD4Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.MD4Key);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
}
|
||||
64
SabreTools.Metadata.DatFiles/Formats/Md5File.cs
Normal file
64
SabreTools.Metadata.DatFiles/Formats/Md5File.cs
Normal file
@@ -0,0 +1,64 @@
|
||||
using System.Collections.Generic;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
|
||||
#pragma warning disable IDE0290 // Use primary constructor
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an MD5 hashfile
|
||||
/// </summary>
|
||||
public sealed class Md5File : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Disk,
|
||||
ItemType.Media,
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public Md5File(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.MD5;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpMD5);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Disk disk:
|
||||
if (string.IsNullOrEmpty(disk.GetStringFieldValue(Data.Models.Metadata.Disk.MD5Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Disk.MD5Key);
|
||||
break;
|
||||
|
||||
case Media medium:
|
||||
if (string.IsNullOrEmpty(medium.GetStringFieldValue(Data.Models.Metadata.Media.MD5Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Media.MD5Key);
|
||||
break;
|
||||
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.MD5Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.MD5Key);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,8 +2,8 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Metadata.Filter;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.Filter;
|
||||
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
{
|
||||
|
||||
52
SabreTools.Metadata.DatFiles/Formats/RipeMD128File.cs
Normal file
52
SabreTools.Metadata.DatFiles/Formats/RipeMD128File.cs
Normal file
@@ -0,0 +1,52 @@
|
||||
using System.Collections.Generic;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
|
||||
#pragma warning disable IDE0290 // Use primary constructor
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an RIPEMD128 hashfile
|
||||
/// </summary>
|
||||
public sealed class RipeMD128File : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public RipeMD128File(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.RIPEMD128;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpRIPEMD128);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.RIPEMD128Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.RIPEMD128Key);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
}
|
||||
52
SabreTools.Metadata.DatFiles/Formats/RipeMD160File.cs
Normal file
52
SabreTools.Metadata.DatFiles/Formats/RipeMD160File.cs
Normal file
@@ -0,0 +1,52 @@
|
||||
using System.Collections.Generic;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
|
||||
#pragma warning disable IDE0290 // Use primary constructor
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an RIPEMD160 hashfile
|
||||
/// </summary>
|
||||
public sealed class RipeMD160File : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public RipeMD160File(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.RIPEMD160;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpRIPEMD160);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.RIPEMD160Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.RIPEMD160Key);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,9 +6,9 @@ using System.Text;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json.Serialization;
|
||||
using SabreTools.Metadata.Filter;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
using SabreTools.Metadata.Filter;
|
||||
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
{
|
||||
|
||||
@@ -5,8 +5,8 @@ using System.Text;
|
||||
using System.Xml;
|
||||
using System.Xml.Schema;
|
||||
using System.Xml.Serialization;
|
||||
using SabreTools.Metadata.Filter;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.Filter;
|
||||
|
||||
#pragma warning disable IDE0060 // Remove unused parameter
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
#pragma warning disable IDE0290 // Use primary constructor
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a semicolon-separated value file
|
||||
/// </summary>
|
||||
public sealed class SemicolonSeparatedValue : SeparatedValue
|
||||
{
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public SemicolonSeparatedValue(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_delim = ';';
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.SSV);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using SabreTools.Metadata.Filter;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
using SabreTools.Metadata.Filter;
|
||||
|
||||
#pragma warning disable IDE0290 // Use primary constructor
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
@@ -140,52 +140,4 @@ namespace SabreTools.Metadata.DatFiles.Formats
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents a comma-separated value file
|
||||
/// </summary>
|
||||
public sealed class CommaSeparatedValue : SeparatedValue
|
||||
{
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public CommaSeparatedValue(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_delim = ',';
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.CSV);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents a semicolon-separated value file
|
||||
/// </summary>
|
||||
public sealed class SemicolonSeparatedValue : SeparatedValue
|
||||
{
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public SemicolonSeparatedValue(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_delim = ';';
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.SSV);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents a tab-separated value file
|
||||
/// </summary>
|
||||
public sealed class TabSeparatedValue : SeparatedValue
|
||||
{
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public TabSeparatedValue(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_delim = '\t';
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.TSV);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using System;
|
||||
using SabreTools.Metadata.Filter;
|
||||
using SabreTools.Data.Models.Metadata;
|
||||
using SabreTools.Metadata.Filter;
|
||||
using SabreTools.Serialization.CrossModel;
|
||||
using SabreTools.Serialization.Readers;
|
||||
using SabreTools.Serialization.Writers;
|
||||
|
||||
52
SabreTools.Metadata.DatFiles/Formats/SfvFile.cs
Normal file
52
SabreTools.Metadata.DatFiles/Formats/SfvFile.cs
Normal file
@@ -0,0 +1,52 @@
|
||||
using System.Collections.Generic;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
|
||||
#pragma warning disable IDE0290 // Use primary constructor
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an SFV (CRC-32) hashfile
|
||||
/// </summary>
|
||||
public sealed class SfvFile : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public SfvFile(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.CRC32;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpSFV);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.CRCKey)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.CRCKey);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
}
|
||||
64
SabreTools.Metadata.DatFiles/Formats/Sha1File.cs
Normal file
64
SabreTools.Metadata.DatFiles/Formats/Sha1File.cs
Normal file
@@ -0,0 +1,64 @@
|
||||
using System.Collections.Generic;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
|
||||
#pragma warning disable IDE0290 // Use primary constructor
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an SHA-1 hashfile
|
||||
/// </summary>
|
||||
public sealed class Sha1File : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Disk,
|
||||
ItemType.Media,
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public Sha1File(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.SHA1;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpSHA1);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Disk disk:
|
||||
if (string.IsNullOrEmpty(disk.GetStringFieldValue(Data.Models.Metadata.Disk.SHA1Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Disk.SHA1Key);
|
||||
break;
|
||||
|
||||
case Media medium:
|
||||
if (string.IsNullOrEmpty(medium.GetStringFieldValue(Data.Models.Metadata.Media.SHA1Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Media.SHA1Key);
|
||||
break;
|
||||
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.SHA1Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.SHA1Key);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
}
|
||||
58
SabreTools.Metadata.DatFiles/Formats/Sha256File.cs
Normal file
58
SabreTools.Metadata.DatFiles/Formats/Sha256File.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
using System.Collections.Generic;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
|
||||
#pragma warning disable IDE0290 // Use primary constructor
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an SHA-256 hashfile
|
||||
/// </summary>
|
||||
public sealed class Sha256File : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Media,
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public Sha256File(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.SHA256;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpSHA256);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Media medium:
|
||||
if (string.IsNullOrEmpty(medium.GetStringFieldValue(Data.Models.Metadata.Media.SHA256Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Media.SHA256Key);
|
||||
break;
|
||||
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.SHA256Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.SHA256Key);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
}
|
||||
52
SabreTools.Metadata.DatFiles/Formats/Sha384File.cs
Normal file
52
SabreTools.Metadata.DatFiles/Formats/Sha384File.cs
Normal file
@@ -0,0 +1,52 @@
|
||||
using System.Collections.Generic;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
|
||||
#pragma warning disable IDE0290 // Use primary constructor
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an SHA-384 hashfile
|
||||
/// </summary>
|
||||
public sealed class Sha384File : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public Sha384File(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.SHA384;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpSHA384);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.SHA384Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.SHA384Key);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
}
|
||||
52
SabreTools.Metadata.DatFiles/Formats/Sha512File.cs
Normal file
52
SabreTools.Metadata.DatFiles/Formats/Sha512File.cs
Normal file
@@ -0,0 +1,52 @@
|
||||
using System.Collections.Generic;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
|
||||
#pragma warning disable IDE0290 // Use primary constructor
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an SHA-512 hashfile
|
||||
/// </summary>
|
||||
public sealed class Sha512File : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public Sha512File(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.SHA512;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpSHA512);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.SHA512Key)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.SHA512Key);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
}
|
||||
58
SabreTools.Metadata.DatFiles/Formats/SpamSumFile.cs
Normal file
58
SabreTools.Metadata.DatFiles/Formats/SpamSumFile.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
using System.Collections.Generic;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
|
||||
#pragma warning disable IDE0290 // Use primary constructor
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an SpamSum hashfile
|
||||
/// </summary>
|
||||
public sealed class SpamSumFile : Hashfile
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override ItemType[] SupportedTypes
|
||||
=> [
|
||||
ItemType.Media,
|
||||
ItemType.Rom,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public SpamSumFile(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_hash = HashType.SpamSum;
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.RedumpSpamSum);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected internal override List<string>? GetMissingRequiredFields(DatItem datItem)
|
||||
{
|
||||
List<string> missingFields = [];
|
||||
|
||||
// Check item name
|
||||
if (string.IsNullOrEmpty(datItem.GetName()))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.NameKey);
|
||||
|
||||
#pragma warning disable IDE0010
|
||||
switch (datItem)
|
||||
{
|
||||
case Media medium:
|
||||
if (string.IsNullOrEmpty(medium.GetStringFieldValue(Data.Models.Metadata.Media.SpamSumKey)))
|
||||
missingFields.Add(Data.Models.Metadata.Media.SpamSumKey);
|
||||
break;
|
||||
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.SpamSumKey)))
|
||||
missingFields.Add(Data.Models.Metadata.Rom.SpamSumKey);
|
||||
break;
|
||||
}
|
||||
#pragma warning restore IDE0010
|
||||
|
||||
return missingFields;
|
||||
}
|
||||
}
|
||||
}
|
||||
19
SabreTools.Metadata.DatFiles/Formats/TabSeparatedValue.cs
Normal file
19
SabreTools.Metadata.DatFiles/Formats/TabSeparatedValue.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
#pragma warning disable IDE0290 // Use primary constructor
|
||||
namespace SabreTools.Metadata.DatFiles.Formats
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a tab-separated value file
|
||||
/// </summary>
|
||||
public sealed class TabSeparatedValue : SeparatedValue
|
||||
{
|
||||
/// <summary>
|
||||
/// Constructor designed for casting a base DatFile
|
||||
/// </summary>
|
||||
/// <param name="datFile">Parent DatFile to copy from</param>
|
||||
public TabSeparatedValue(DatFile? datFile) : base(datFile)
|
||||
{
|
||||
_delim = '\t';
|
||||
Header.SetFieldValue(DatHeader.DatFormatKey, DatFormat.TSV);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,12 +8,12 @@ using System.Threading.Tasks;
|
||||
#endif
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Metadata.Tools;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.IO.Logging;
|
||||
using SabreTools.Logging;
|
||||
using SabreTools.Text.Compare;
|
||||
using SabreTools.Text.Extensions;
|
||||
|
||||
namespace SabreTools.Metadata.DatFiles
|
||||
{
|
||||
|
||||
@@ -10,12 +10,12 @@ using System.Threading.Tasks;
|
||||
#endif
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Metadata.Tools;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.IO.Logging;
|
||||
using SabreTools.Logging;
|
||||
using SabreTools.Text.Compare;
|
||||
using SabreTools.Text.Extensions;
|
||||
|
||||
/*
|
||||
* Planning Notes:
|
||||
@@ -685,9 +685,7 @@ namespace SabreTools.Metadata.DatFiles
|
||||
/// </summary>
|
||||
public void Deduplicate()
|
||||
{
|
||||
#if NET452_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER
|
||||
Parallel.ForEach(SortedKeys, Core.Globals.ParallelOptions, key =>
|
||||
#elif NET40_OR_GREATER
|
||||
#if NET40_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER
|
||||
Parallel.ForEach(SortedKeys, key =>
|
||||
#else
|
||||
foreach (var key in SortedKeys)
|
||||
@@ -1067,9 +1065,7 @@ namespace SabreTools.Metadata.DatFiles
|
||||
// Get the current list of item indicies
|
||||
long[] itemIndicies = [.. _items.Keys];
|
||||
|
||||
#if NET452_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER
|
||||
Parallel.For(0, itemIndicies.Length, Core.Globals.ParallelOptions, i =>
|
||||
#elif NET40_OR_GREATER
|
||||
#if NET40_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER
|
||||
Parallel.For(0, itemIndicies.Length, i =>
|
||||
#else
|
||||
for (int i = 0; i < itemIndicies.Length; i++)
|
||||
@@ -1116,9 +1112,7 @@ namespace SabreTools.Metadata.DatFiles
|
||||
// Get the current list of bucket keys
|
||||
string[] bucketKeys = [.. _buckets.Keys];
|
||||
|
||||
#if NET452_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER
|
||||
Parallel.For(0, bucketKeys.Length, Core.Globals.ParallelOptions, i =>
|
||||
#elif NET40_OR_GREATER
|
||||
#if NET40_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER
|
||||
Parallel.For(0, bucketKeys.Length, i =>
|
||||
#else
|
||||
for (int i = 0; i < bucketKeys.Length; i++)
|
||||
|
||||
3
SabreTools.Metadata.DatFiles/README.MD
Normal file
3
SabreTools.Metadata.DatFiles/README.MD
Normal file
@@ -0,0 +1,3 @@
|
||||
# SabreTools.Metadata.DatFiles
|
||||
|
||||
This library contains wrapper classes and functionality for various metadata file formats.
|
||||
@@ -35,19 +35,22 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\SabreTools.Data.Extensions\SabreTools.Data.Extensions.csproj" />
|
||||
<ProjectReference Include="..\SabreTools.Metadata\SabreTools.Metadata.csproj" />
|
||||
<ProjectReference Include="..\SabreTools.Metadata.DatItems\SabreTools.Metadata.DatItems.csproj" />
|
||||
<ProjectReference Include="..\SabreTools.Metadata.Filter\SabreTools.Metadata.Filter.csproj" />
|
||||
<ProjectReference Include="..\SabreTools.Serialization.CrossModel\SabreTools.Serialization.CrossModel.csproj" />
|
||||
<ProjectReference Include="..\SabreTools.Serialization.Readers\SabreTools.Serialization.Readers.csproj" />
|
||||
<ProjectReference Include="..\SabreTools.Serialization.Writers\SabreTools.Serialization.Writers.csproj" />
|
||||
<ProjectReference Include="..\SabreTools.Data.Extensions\SabreTools.Data.Extensions.csproj" />
|
||||
<ProjectReference Include="..\SabreTools.Metadata\SabreTools.Metadata.csproj" />
|
||||
<ProjectReference Include="..\SabreTools.Metadata.DatItems\SabreTools.Metadata.DatItems.csproj" />
|
||||
<ProjectReference Include="..\SabreTools.Metadata.Filter\SabreTools.Metadata.Filter.csproj" />
|
||||
<ProjectReference Include="..\SabreTools.Serialization.CrossModel\SabreTools.Serialization.CrossModel.csproj" />
|
||||
<ProjectReference Include="..\SabreTools.Serialization.Readers\SabreTools.Serialization.Readers.csproj" />
|
||||
<ProjectReference Include="..\SabreTools.Serialization.Writers\SabreTools.Serialization.Writers.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
|
||||
<PackageReference Include="SabreTools.Hashing" Version="[2.0.0]" />
|
||||
<PackageReference Include="SabreTools.IO" Version="[2.0.0]" />
|
||||
<PackageReference Include="MinValueTupleBridge" Version="0.2.1" Condition="$(TargetFramework.StartsWith(`net2`)) OR $(TargetFramework.StartsWith(`net3`))" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
|
||||
<PackageReference Include="SabreTools.Hashing" Version="[2.0.0]" />
|
||||
<PackageReference Include="SabreTools.IO" Version="[2.0.0]" />
|
||||
<PackageReference Include="System.ValueTuple" Version="4.5.0" Condition="$(TargetFramework.StartsWith(`net40`)) OR $(TargetFramework.StartsWith(`net45`))" />
|
||||
<PackageReference Include="System.ValueTuple" Version="4.6.1" Condition="$(TargetFramework.StartsWith(`net46`)) OR $(TargetFramework.StartsWith(`net47`)) OR $(TargetFramework.StartsWith(`net48`))" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -3,7 +3,7 @@ using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Data.Extensions;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.IO.Logging;
|
||||
using SabreTools.Logging;
|
||||
using SabreTools.Metadata.DatItems.Formats;
|
||||
using SabreTools.Metadata.Filter;
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Data.Extensions;
|
||||
using SabreTools.Metadata.Tools;
|
||||
using SabreTools.Text.Extensions;
|
||||
|
||||
namespace SabreTools.Metadata.DatItems.Formats
|
||||
{
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Metadata.Tools;
|
||||
using SabreTools.Text.Extensions;
|
||||
|
||||
namespace SabreTools.Metadata.DatItems.Formats
|
||||
{
|
||||
|
||||
@@ -4,7 +4,7 @@ using Newtonsoft.Json;
|
||||
using SabreTools.Data.Extensions;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Metadata.Tools;
|
||||
using SabreTools.Text.Extensions;
|
||||
|
||||
// TODO: Add item mappings for all fields
|
||||
namespace SabreTools.Metadata.DatItems.Formats
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Data.Extensions;
|
||||
using SabreTools.Metadata.Tools;
|
||||
using SabreTools.Text.Extensions;
|
||||
|
||||
namespace SabreTools.Metadata.DatItems.Formats
|
||||
{
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Data.Extensions;
|
||||
using SabreTools.Metadata.Tools;
|
||||
using SabreTools.Text.Extensions;
|
||||
|
||||
namespace SabreTools.Metadata.DatItems.Formats
|
||||
{
|
||||
|
||||
@@ -4,6 +4,7 @@ using Newtonsoft.Json;
|
||||
using SabreTools.Data.Extensions;
|
||||
using SabreTools.Metadata.Filter;
|
||||
using SabreTools.Metadata.Tools;
|
||||
using SabreTools.Text.Extensions;
|
||||
|
||||
namespace SabreTools.Metadata.DatItems
|
||||
{
|
||||
|
||||
3
SabreTools.Metadata.DatItems/README.MD
Normal file
3
SabreTools.Metadata.DatItems/README.MD
Normal file
@@ -0,0 +1,3 @@
|
||||
# SabreTools.Metadata.DatItems
|
||||
|
||||
This library contains wrapper classes and functionality for various metadata item formats.
|
||||
@@ -1,8 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using SabreTools.IO.Logging;
|
||||
using SabreTools.IO.Readers;
|
||||
using SabreTools.Logging;
|
||||
using SabreTools.Text.INI;
|
||||
|
||||
namespace SabreTools.Metadata.Filter
|
||||
{
|
||||
@@ -63,7 +63,7 @@ namespace SabreTools.Metadata.Filter
|
||||
return false;
|
||||
|
||||
// Prepare all internal variables
|
||||
var ir = new IniReader(iniPath) { ValidateRows = false };
|
||||
var ir = new Reader(iniPath) { ValidateRows = false };
|
||||
bool foundRootFolder = false;
|
||||
|
||||
// If we got a null reader, just return
|
||||
@@ -79,11 +79,11 @@ namespace SabreTools.Metadata.Filter
|
||||
ir.ReadNextLine();
|
||||
|
||||
// We don't care about whitespace or comments
|
||||
if (ir.RowType == IniRowType.None || ir.RowType == IniRowType.Comment)
|
||||
if (ir.RowType == RowType.None || ir.RowType == RowType.Comment)
|
||||
continue;
|
||||
|
||||
// If we have a section, just read it in
|
||||
if (ir.RowType == IniRowType.SectionHeader)
|
||||
if (ir.RowType == RowType.SectionHeader)
|
||||
{
|
||||
// If we've found the start of the extras, set the flag
|
||||
if (string.Equals(ir.Section, "ROOT_FOLDER", StringComparison.OrdinalIgnoreCase))
|
||||
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Text.RegularExpressions;
|
||||
using SabreTools.Data.Models.Metadata;
|
||||
using SabreTools.Metadata.Tools;
|
||||
using SabreTools.Text.Extensions;
|
||||
|
||||
namespace SabreTools.Metadata.Filter
|
||||
{
|
||||
|
||||
3
SabreTools.Metadata.Filter/README.MD
Normal file
3
SabreTools.Metadata.Filter/README.MD
Normal file
@@ -0,0 +1,3 @@
|
||||
# SabreTools.Metadata.Filter
|
||||
|
||||
This library contains filtering functionality used by metadata format processing.
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Metadata.Tools;
|
||||
using SabreTools.Text.Extensions;
|
||||
|
||||
namespace SabreTools.Metadata
|
||||
{
|
||||
|
||||
3
SabreTools.Metadata/README.MD
Normal file
3
SabreTools.Metadata/README.MD
Normal file
@@ -0,0 +1,3 @@
|
||||
# SabreTools.Metadata
|
||||
|
||||
This library contains common code used across multiple metadata file operations.
|
||||
@@ -1,264 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace SabreTools.Metadata.Tools
|
||||
{
|
||||
// TODO: Replace when IO is updated
|
||||
public static class NumberHelper
|
||||
{
|
||||
#region Constants
|
||||
|
||||
#region Byte (1000-based) size comparisons
|
||||
|
||||
private const long KiloByte = 1000;
|
||||
private static readonly long MegaByte = (long)Math.Pow(KiloByte, 2);
|
||||
private static readonly long GigaByte = (long)Math.Pow(KiloByte, 3);
|
||||
private static readonly long TeraByte = (long)Math.Pow(KiloByte, 4);
|
||||
private static readonly long PetaByte = (long)Math.Pow(KiloByte, 5);
|
||||
|
||||
// The following are too big to be represented in Int64
|
||||
// private readonly static long ExaByte = (long)Math.Pow(KiloByte, 6);
|
||||
// private readonly static long ZettaByte = (long)Math.Pow(KiloByte, 7);
|
||||
// private readonly static long YottaByte = (long)Math.Pow(KiloByte, 8);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Byte (1024-based) size comparisons
|
||||
|
||||
private const long KibiByte = 1024;
|
||||
private static readonly long MibiByte = (long)Math.Pow(KibiByte, 2);
|
||||
private static readonly long GibiByte = (long)Math.Pow(KibiByte, 3);
|
||||
private static readonly long TibiByte = (long)Math.Pow(KibiByte, 4);
|
||||
private static readonly long PibiByte = (long)Math.Pow(KibiByte, 5);
|
||||
|
||||
// The following are too big to be represented in Int64
|
||||
// private readonly static long ExiByte = (long)Math.Pow(KibiByte, 6);
|
||||
// private readonly static long ZittiByte = (long)Math.Pow(KibiByte, 7);
|
||||
// private readonly static long YittiByte = (long)Math.Pow(KibiByte, 8);
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Convert a string to a Double
|
||||
/// </summary>
|
||||
public static double? ConvertToDouble(string? numeric)
|
||||
{
|
||||
// If we don't have a valid string, we can't do anything
|
||||
if (string.IsNullOrEmpty(numeric))
|
||||
return null;
|
||||
|
||||
if (!double.TryParse(numeric, out double doubleValue))
|
||||
return null;
|
||||
|
||||
return doubleValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert a string to an Int64
|
||||
/// </summary>
|
||||
public static long? ConvertToInt64(string? numeric)
|
||||
{
|
||||
// If we don't have a valid string, we can't do anything
|
||||
if (string.IsNullOrEmpty(numeric))
|
||||
return null;
|
||||
|
||||
// Normalize the string for easier comparison
|
||||
numeric = numeric!.ToLowerInvariant();
|
||||
|
||||
// Parse the numeric string, if possible
|
||||
if (numeric.StartsWith("0x"))
|
||||
{
|
||||
return Convert.ToInt64(numeric.Substring(2), 16);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Get the multiplication modifier and trim characters
|
||||
long multiplier = DetermineMultiplier(numeric);
|
||||
numeric = numeric.TrimEnd(['k', 'm', 'g', 't', 'p', 'e', 'z', 'y', 'i', 'b', ' ']);
|
||||
|
||||
// Apply the multiplier and return
|
||||
if (!long.TryParse(numeric, out long longValue))
|
||||
return null;
|
||||
|
||||
return longValue * multiplier;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determine the multiplier from a numeric string
|
||||
/// </summary>
|
||||
public static long DetermineMultiplier(string? numeric)
|
||||
{
|
||||
if (string.IsNullOrEmpty(numeric))
|
||||
return 0;
|
||||
|
||||
long multiplier = 1;
|
||||
if (numeric!.EndsWith("k") || numeric.EndsWith("kb"))
|
||||
multiplier = KiloByte;
|
||||
else if (numeric.EndsWith("ki") || numeric.EndsWith("kib"))
|
||||
multiplier = KibiByte;
|
||||
else if (numeric.EndsWith("m") || numeric.EndsWith("mb"))
|
||||
multiplier = MegaByte;
|
||||
else if (numeric.EndsWith("mi") || numeric.EndsWith("mib"))
|
||||
multiplier = MibiByte;
|
||||
else if (numeric.EndsWith("g") || numeric.EndsWith("gb"))
|
||||
multiplier = GigaByte;
|
||||
else if (numeric.EndsWith("gi") || numeric.EndsWith("gib"))
|
||||
multiplier = GibiByte;
|
||||
else if (numeric.EndsWith("t") || numeric.EndsWith("tb"))
|
||||
multiplier = TeraByte;
|
||||
else if (numeric.EndsWith("ti") || numeric.EndsWith("tib"))
|
||||
multiplier = TibiByte;
|
||||
else if (numeric.EndsWith("p") || numeric.EndsWith("pb"))
|
||||
multiplier = PetaByte;
|
||||
else if (numeric.EndsWith("pi") || numeric.EndsWith("pib"))
|
||||
multiplier = PibiByte;
|
||||
|
||||
// The following are too big to be represented in Int64
|
||||
// else if (numeric.EndsWith("e") || numeric.EndsWith("eb"))
|
||||
// multiplier = ExaByte;
|
||||
// else if (numeric.EndsWith("ei") || numeric.EndsWith("eib"))
|
||||
// multiplier = ExiByte;
|
||||
// else if (numeric.EndsWith("z") || numeric.EndsWith("zb"))
|
||||
// multiplier = ZettaByte;
|
||||
// else if (numeric.EndsWith("zi") || numeric.EndsWith("zib"))
|
||||
// multiplier = ZittiByte;
|
||||
// else if (numeric.EndsWith("y") || numeric.EndsWith("yb"))
|
||||
// multiplier = YottaByte;
|
||||
// else if (numeric.EndsWith("yi") || numeric.EndsWith("yib"))
|
||||
// multiplier = YittiByte;
|
||||
|
||||
return multiplier;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determine if a string is fully numeric or not
|
||||
/// </summary>
|
||||
public static bool IsNumeric(string? value)
|
||||
{
|
||||
// If we have no value, it is not numeric
|
||||
if (string.IsNullOrEmpty(value))
|
||||
return false;
|
||||
|
||||
// If we have a hex value
|
||||
value = value!.ToLowerInvariant();
|
||||
if (value.StartsWith("0x"))
|
||||
value = value.Substring(2);
|
||||
|
||||
// If we have a negative value
|
||||
if (value.StartsWith("-"))
|
||||
value = value.Substring(1);
|
||||
|
||||
// If the value has a multiplier
|
||||
if (DetermineMultiplier(value) > 1)
|
||||
value = value.TrimEnd(['k', 'm', 'g', 't', 'p', 'e', 'z', 'y', 'i', 'b', ' ']);
|
||||
|
||||
// If the value is empty after trimming
|
||||
if (value.Length == 0)
|
||||
return false;
|
||||
|
||||
// Otherwise, make sure that every character is a proper match
|
||||
for (int i = 0; i < value.Length; i++)
|
||||
{
|
||||
char c = value[i];
|
||||
#if NET7_0_OR_GREATER
|
||||
if (!char.IsAsciiHexDigit(c) && c != '.' && c != ',')
|
||||
#else
|
||||
if (!c.IsAsciiHexDigit() && c != '.' && c != ',')
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the human-readable file size for an arbitrary, 64-bit file size
|
||||
/// The default format is "0.### XB", e.g. "4.2 KB" or "1.434 GB".
|
||||
/// </summary>
|
||||
/// <link>http://www.somacon.com/p576.php</link>
|
||||
/// <remarks>This uses 1024-byte partitions, not 1000-byte</remarks>
|
||||
public static string GetBytesReadable(long input)
|
||||
{
|
||||
// Get absolute value
|
||||
long absolute_i = input < 0 ? -input : input;
|
||||
|
||||
// Determine the suffix and readable value
|
||||
string suffix;
|
||||
double readable;
|
||||
if (absolute_i >= 0x1000_0000_0000_0000) // Exabyte
|
||||
{
|
||||
suffix = "EB";
|
||||
readable = input >> 50;
|
||||
}
|
||||
else if (absolute_i >= 0x4_0000_0000_0000) // Petabyte
|
||||
{
|
||||
suffix = "PB";
|
||||
readable = input >> 40;
|
||||
}
|
||||
else if (absolute_i >= 0x100_0000_0000) // Terabyte
|
||||
{
|
||||
suffix = "TB";
|
||||
readable = input >> 30;
|
||||
}
|
||||
else if (absolute_i >= 0x4000_0000) // Gigabyte
|
||||
{
|
||||
suffix = "GB";
|
||||
readable = input >> 20;
|
||||
}
|
||||
else if (absolute_i >= 0x10_0000) // Megabyte
|
||||
{
|
||||
suffix = "MB";
|
||||
readable = input >> 10;
|
||||
}
|
||||
else if (absolute_i >= 0x400) // Kilobyte
|
||||
{
|
||||
suffix = "KB";
|
||||
readable = input;
|
||||
}
|
||||
else
|
||||
{
|
||||
return input.ToString("0 B"); // Byte
|
||||
}
|
||||
|
||||
// Divide by 1024 to get fractional value
|
||||
readable /= 1024;
|
||||
|
||||
// Return formatted number with suffix
|
||||
return readable.ToString("0.### ") + suffix;
|
||||
}
|
||||
|
||||
#if NETFRAMEWORK || NETCOREAPP3_1 || NET5_0 || NET6_0 || NETSTANDARD2_0_OR_GREATER
|
||||
/// <summary>
|
||||
/// Indicates whether a character is categorized as an ASCII hexademical digit.
|
||||
/// </summary>
|
||||
/// <param name="c">The character to evaluate.</param>
|
||||
/// <returns>true if c is a hexademical digit; otherwise, false.</returns>
|
||||
/// <remarks>This method determines whether the character is in the range '0' through '9', inclusive, 'A' through 'F', inclusive, or 'a' through 'f', inclusive.</remarks>
|
||||
internal static bool IsAsciiHexDigit(this char c)
|
||||
{
|
||||
return char.ToLowerInvariant(c) switch
|
||||
{
|
||||
'0' => true,
|
||||
'1' => true,
|
||||
'2' => true,
|
||||
'3' => true,
|
||||
'4' => true,
|
||||
'5' => true,
|
||||
'6' => true,
|
||||
'7' => true,
|
||||
'8' => true,
|
||||
'9' => true,
|
||||
'a' => true,
|
||||
'b' => true,
|
||||
'c' => true,
|
||||
'd' => true,
|
||||
'e' => true,
|
||||
'f' => true,
|
||||
_ => false,
|
||||
};
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -1,302 +0,0 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
using SabreTools.Hashing;
|
||||
|
||||
namespace SabreTools.Metadata.Tools
|
||||
{
|
||||
// TODO: Replace when IO is updated
|
||||
public static class TextHelper
|
||||
{
|
||||
#region Normalization
|
||||
|
||||
/// <summary>
|
||||
/// Normalize a string to the WoD standard
|
||||
/// </summary>
|
||||
public static string? NormalizeCharacters(string? input)
|
||||
{
|
||||
if (string.IsNullOrEmpty(input))
|
||||
return input;
|
||||
|
||||
///Run the name through the filters to make sure that it's correct
|
||||
input = NormalizeChars(input!);
|
||||
input = RussianToLatin(input);
|
||||
input = SearchPattern(input);
|
||||
|
||||
input = new Regex(@"(([[(].*[\)\]] )?([^([]+))", RegexOptions.Compiled).Match(input).Groups[1].Value;
|
||||
input = input.TrimStart().TrimEnd();
|
||||
return input;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Normalize a CRC32 string and pad to the correct size
|
||||
/// </summary>
|
||||
public static string? NormalizeCRC32(string? hash)
|
||||
=> NormalizeHashData(hash, Constants.CRCLength);
|
||||
|
||||
/// <summary>
|
||||
/// Normalize a MD2 string and pad to the correct size
|
||||
/// </summary>
|
||||
/// <remarks>MD2 is the same length as MD5</remarks>
|
||||
public static string? NormalizeMD2(string? hash)
|
||||
=> NormalizeHashData(hash, Constants.MD5Length);
|
||||
|
||||
/// <summary>
|
||||
/// Normalize a MD4 string and pad to the correct size
|
||||
/// </summary>
|
||||
/// <remarks>MD4 is the same length as MD5</remarks>
|
||||
public static string? NormalizeMD4(string? hash)
|
||||
=> NormalizeHashData(hash, Constants.MD5Length);
|
||||
|
||||
/// <summary>
|
||||
/// Normalize a MD5 string and pad to the correct size
|
||||
/// </summary>
|
||||
public static string? NormalizeMD5(string? hash)
|
||||
=> NormalizeHashData(hash, Constants.MD5Length);
|
||||
|
||||
/// <summary>
|
||||
/// Normalize a RIPEMD128 string and pad to the correct size
|
||||
/// </summary>
|
||||
public static string? NormalizeRIPEMD128(string? hash)
|
||||
=> NormalizeHashData(hash, Constants.MD5Length);
|
||||
|
||||
/// <summary>
|
||||
/// Normalize a RIPEMD160 string and pad to the correct size
|
||||
/// </summary>
|
||||
public static string? NormalizeRIPEMD160(string? hash)
|
||||
=> NormalizeHashData(hash, Constants.SHA1Length);
|
||||
|
||||
/// <summary>
|
||||
/// Normalize a SHA1 string and pad to the correct size
|
||||
/// </summary>
|
||||
public static string? NormalizeSHA1(string? hash)
|
||||
=> NormalizeHashData(hash, Constants.SHA1Length);
|
||||
|
||||
/// <summary>
|
||||
/// Normalize a SHA256 string and pad to the correct size
|
||||
/// </summary>
|
||||
public static string? NormalizeSHA256(string? hash)
|
||||
=> NormalizeHashData(hash, Constants.SHA256Length);
|
||||
|
||||
/// <summary>
|
||||
/// Normalize a SHA384 string and pad to the correct size
|
||||
/// </summary>
|
||||
public static string? NormalizeSHA384(string? hash)
|
||||
=> NormalizeHashData(hash, Constants.SHA384Length);
|
||||
|
||||
/// <summary>
|
||||
/// Normalize a SHA512 string and pad to the correct size
|
||||
/// </summary>
|
||||
public static string? NormalizeSHA512(string? hash)
|
||||
=> NormalizeHashData(hash, Constants.SHA512Length);
|
||||
|
||||
/// <summary>
|
||||
/// Remove all chars that are considered path unsafe
|
||||
/// </summary>
|
||||
public static string RemovePathUnsafeCharacters(string? input)
|
||||
{
|
||||
if (string.IsNullOrEmpty(input))
|
||||
return string.Empty;
|
||||
|
||||
foreach (char invalid in Path.GetInvalidPathChars())
|
||||
{
|
||||
input = input!.Replace(invalid.ToString(), string.Empty);
|
||||
}
|
||||
|
||||
return input!;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove all Unicode-specific chars from a string
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// "Unicode characters" here means any characters outside of the
|
||||
/// Extended ASCII (0x00 to 0xFF) set. This is just a simple
|
||||
/// way of filtering out characters that won't work on all
|
||||
/// supported platforms.
|
||||
/// </remarks>
|
||||
public static string RemoveUnicodeCharacters(string? input)
|
||||
{
|
||||
if (string.IsNullOrEmpty(input))
|
||||
return string.Empty;
|
||||
|
||||
return new string(Array.FindAll(input!.ToCharArray(), c => c <= 255));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Helpers
|
||||
|
||||
/// <summary>
|
||||
/// Replace accented characters
|
||||
/// </summary>
|
||||
private static string NormalizeChars(string input)
|
||||
{
|
||||
string[,] charmap = {
|
||||
{ "Á", "A" }, { "á", "a" },
|
||||
{ "À", "A" }, { "à", "a" },
|
||||
{ "Â", "A" }, { "â", "a" },
|
||||
{ "Ä", "Ae" }, { "ä", "ae" },
|
||||
{ "Ã", "A" }, { "ã", "a" },
|
||||
{ "Å", "A" }, { "å", "a" },
|
||||
{ "Æ", "Ae" }, { "æ", "ae" },
|
||||
{ "Ç", "C" }, { "ç", "c" },
|
||||
{ "Ð", "D" }, { "ð", "d" },
|
||||
{ "É", "E" }, { "é", "e" },
|
||||
{ "È", "E" }, { "è", "e" },
|
||||
{ "Ê", "E" }, { "ê", "e" },
|
||||
{ "Ë", "E" }, { "ë", "e" },
|
||||
{ "ƒ", "f" },
|
||||
{ "Í", "I" }, { "í", "i" },
|
||||
{ "Ì", "I" }, { "ì", "i" },
|
||||
{ "Î", "I" }, { "î", "i" },
|
||||
{ "Ï", "I" }, { "ï", "i" },
|
||||
{ "Ñ", "N" }, { "ñ", "n" },
|
||||
{ "Ó", "O" }, { "ó", "o" },
|
||||
{ "Ò", "O" }, { "ò", "o" },
|
||||
{ "Ô", "O" }, { "ô", "o" },
|
||||
{ "Ö", "Oe" }, { "ö", "oe" },
|
||||
{ "Õ", "O" }, { "õ", "o" },
|
||||
{ "Ø", "O" }, { "ø", "o" },
|
||||
{ "Š", "S" }, { "š", "s" },
|
||||
{ "ß", "ss" },
|
||||
{ "Þ", "B" }, { "þ", "b" },
|
||||
{ "Ú", "U" }, { "ú", "u" },
|
||||
{ "Ù", "U" }, { "ù", "u" },
|
||||
{ "Û", "U" }, { "û", "u" },
|
||||
{ "Ü", "Ue" }, { "ü", "ue" },
|
||||
{ "ÿ", "y" },
|
||||
{ "Ý", "Y" }, { "ý", "y" },
|
||||
{ "Ž", "Z" }, { "ž", "z" },
|
||||
};
|
||||
|
||||
for (int i = 0; i < charmap.GetLength(0); i++)
|
||||
{
|
||||
input = input.Replace(charmap[i, 0], charmap[i, 1]);
|
||||
}
|
||||
|
||||
return input;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Normalize a hash string and pad to the correct size
|
||||
/// </summary>
|
||||
private static string? NormalizeHashData(string? hash, int expectedLength)
|
||||
{
|
||||
// If we have a known blank hash, return blank
|
||||
if (hash is null)
|
||||
return null;
|
||||
else if (hash == string.Empty || hash == "-" || hash == "_")
|
||||
return string.Empty;
|
||||
|
||||
// Check to see if it's a "hex" hash
|
||||
hash = hash!.Trim().Replace("0x", string.Empty);
|
||||
|
||||
// If we have a blank hash now, return blank
|
||||
if (string.IsNullOrEmpty(hash))
|
||||
return string.Empty;
|
||||
|
||||
// If the hash shorter than the required length, pad it
|
||||
if (hash.Length < expectedLength)
|
||||
hash = hash.PadLeft(expectedLength, '0');
|
||||
|
||||
// If the hash is longer than the required length, it's invalid
|
||||
else if (hash.Length > expectedLength)
|
||||
return string.Empty;
|
||||
|
||||
// Now normalize the hash
|
||||
hash = hash.ToLowerInvariant();
|
||||
|
||||
// Otherwise, make sure that every character is a proper match
|
||||
for (int i = 0; i < hash.Length; i++)
|
||||
{
|
||||
char c = hash[i];
|
||||
#if NET7_0_OR_GREATER
|
||||
if (!char.IsAsciiHexDigit(c))
|
||||
#else
|
||||
if (!c.IsAsciiHexDigit())
|
||||
#endif
|
||||
{
|
||||
hash = string.Empty;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert Cyrillic lettering to Latin lettering
|
||||
/// </summary>
|
||||
private static string RussianToLatin(string input)
|
||||
{
|
||||
string[,] charmap = {
|
||||
{ "А", "A" }, { "Б", "B" }, { "В", "V" }, { "Г", "G" }, { "Д", "D" },
|
||||
{ "Е", "E" }, { "Ё", "Yo" }, { "Ж", "Zh" }, { "З", "Z" }, { "И", "I" },
|
||||
{ "Й", "J" }, { "К", "K" }, { "Л", "L" }, { "М", "M" }, { "Н", "N" },
|
||||
{ "О", "O" }, { "П", "P" }, { "Р", "R" }, { "С", "S" }, { "Т", "T" },
|
||||
{ "У", "U" }, { "Ф", "f" }, { "Х", "Kh" }, { "Ц", "Ts" }, { "Ч", "Ch" },
|
||||
{ "Ш", "Sh" }, { "Щ", "Sch" }, { "Ъ", string.Empty }, { "Ы", "y" }, { "Ь", string.Empty },
|
||||
{ "Э", "e" }, { "Ю", "yu" }, { "Я", "ya" }, { "а", "a" }, { "б", "b" },
|
||||
{ "в", "v" }, { "г", "g" }, { "д", "d" }, { "е", "e" }, { "ё", "yo" },
|
||||
{ "ж", "zh" }, { "з", "z" }, { "и", "i" }, { "й", "j" }, { "к", "k" },
|
||||
{ "л", "l" }, { "м", "m" }, { "н", "n" }, { "о", "o" }, { "п", "p" },
|
||||
{ "р", "r" }, { "с", "s" }, { "т", "t" }, { "у", "u" }, { "ф", "f" },
|
||||
{ "х", "kh" }, { "ц", "ts" }, { "ч", "ch" }, { "ш", "sh" }, { "щ", "sch" },
|
||||
{ "ъ", string.Empty }, { "ы", "y" }, { "ь", string.Empty }, { "э", "e" }, { "ю", "yu" },
|
||||
{ "я", "ya" },
|
||||
};
|
||||
|
||||
for (int i = 0; i < charmap.GetLength(0); i++)
|
||||
{
|
||||
input = input.Replace(charmap[i, 0], charmap[i, 1]);
|
||||
}
|
||||
|
||||
return input;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replace special characters and patterns
|
||||
/// </summary>
|
||||
private static string SearchPattern(string input)
|
||||
{
|
||||
string[,] charmap = {
|
||||
{ @"~", " - " },
|
||||
{ @"_", " " },
|
||||
{ @":", " " },
|
||||
{ @">", ")" },
|
||||
{ @"<", "(" },
|
||||
{ @"\|", "-" },
|
||||
{ "\"", "'" },
|
||||
{ @"\*", "." },
|
||||
{ @"\\", "-" },
|
||||
{ @"/", "-" },
|
||||
{ @"\?", " " },
|
||||
{ @"\(([^)(]*)\(([^)]*)\)([^)(]*)\)", " " },
|
||||
{ @"\(([^)]+)\)", " " },
|
||||
{ @"\[([^]]+)\]", " " },
|
||||
{ @"\{([^}]+)\}", " " },
|
||||
{ @"(ZZZJUNK|ZZZ-UNK-|ZZZ-UNK |zzz unknow |zzz unk |Copy of |[.][a-z]{3}[.][a-z]{3}[.]|[.][a-z]{3}[.])", " " },
|
||||
{ @" (r|rev|v|ver)\s*[\d\.]+[^\s]*", " " },
|
||||
{ @"(( )|(\A))(\d{6}|\d{8})(( )|(\Z))", " " },
|
||||
{ @"(( )|(\A))(\d{1,2})-(\d{1,2})-(\d{4}|\d{2})", " " },
|
||||
{ @"(( )|(\A))(\d{4}|\d{2})-(\d{1,2})-(\d{1,2})", " " },
|
||||
{ @"[-]+", "-" },
|
||||
{ @"\A\s*\)", " " },
|
||||
{ @"\A\s*(,|-)", " " },
|
||||
{ @"\s+", " " },
|
||||
{ @"\s+,", "," },
|
||||
{ @"\s*(,|-)\s*\Z", " " },
|
||||
};
|
||||
|
||||
for (int i = 0; i < charmap.GetLength(0); i++)
|
||||
{
|
||||
input = Regex.Replace(input, charmap[i, 0], charmap[i, 1]);
|
||||
}
|
||||
|
||||
return input;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
using System.IO;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Text.Extensions;
|
||||
|
||||
namespace SabreTools.Metadata.Tools
|
||||
{
|
||||
@@ -34,14 +34,14 @@ namespace SabreTools.Metadata.Tools
|
||||
return null;
|
||||
|
||||
// If the hash isn't the right size, then we return null
|
||||
if (hash!.Length != Constants.SHA1Length)
|
||||
if (hash!.Length != HashType.SHA1.ZeroString.Length)
|
||||
return null;
|
||||
|
||||
// Cap the depth between 0 and 20, for now
|
||||
if (depth < 0)
|
||||
depth = 0;
|
||||
else if (depth > ZeroHash.SHA1Arr.Length)
|
||||
depth = ZeroHash.SHA1Arr.Length;
|
||||
else if (depth > HashType.SHA1.ZeroBytes.Length)
|
||||
depth = HashType.SHA1.ZeroBytes.Length;
|
||||
|
||||
// Loop through and generate the subdirectory
|
||||
string path = string.Empty;
|
||||
|
||||
@@ -218,21 +218,26 @@ namespace SabreTools.Serialization.CrossModel.Test
|
||||
/// </summary>
|
||||
private static Data.Models.Hashfile.Hashfile Build(HashType hashType)
|
||||
{
|
||||
#pragma warning disable IDE0072
|
||||
return hashType switch
|
||||
{
|
||||
HashType.CRC32 => new Data.Models.Hashfile.Hashfile { SFV = [new Data.Models.Hashfile.SFV { File = "XXXXXX", Hash = "XXXXXX" }] },
|
||||
HashType.MD2 => new Data.Models.Hashfile.Hashfile { MD2 = [new Data.Models.Hashfile.MD2 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.MD4 => new Data.Models.Hashfile.Hashfile { MD4 = [new Data.Models.Hashfile.MD4 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.MD5 => new Data.Models.Hashfile.Hashfile { MD5 = [new Data.Models.Hashfile.MD5 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SHA1 => new Data.Models.Hashfile.Hashfile { SHA1 = [new Data.Models.Hashfile.SHA1 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SHA256 => new Data.Models.Hashfile.Hashfile { SHA256 = [new Data.Models.Hashfile.SHA256 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SHA384 => new Data.Models.Hashfile.Hashfile { SHA384 = [new Data.Models.Hashfile.SHA384 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SHA512 => new Data.Models.Hashfile.Hashfile { SHA512 = [new Data.Models.Hashfile.SHA512 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SpamSum => new Data.Models.Hashfile.Hashfile { SpamSum = [new Data.Models.Hashfile.SpamSum { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(hashType)),
|
||||
};
|
||||
#pragma warning restore IDE0072
|
||||
if (hashType == HashType.CRC32)
|
||||
return new Data.Models.Hashfile.Hashfile { SFV = [new Data.Models.Hashfile.SFV { File = "XXXXXX", Hash = "XXXXXX" }] };
|
||||
else if (hashType == HashType.MD2)
|
||||
return new Data.Models.Hashfile.Hashfile { MD2 = [new Data.Models.Hashfile.MD2 { Hash = "XXXXXX", File = "XXXXXX" }] };
|
||||
else if (hashType == HashType.MD4)
|
||||
return new Data.Models.Hashfile.Hashfile { MD4 = [new Data.Models.Hashfile.MD4 { Hash = "XXXXXX", File = "XXXXXX" }] };
|
||||
else if (hashType == HashType.MD5)
|
||||
return new Data.Models.Hashfile.Hashfile { MD5 = [new Data.Models.Hashfile.MD5 { Hash = "XXXXXX", File = "XXXXXX" }] };
|
||||
else if (hashType == HashType.SHA1)
|
||||
return new Data.Models.Hashfile.Hashfile { SHA1 = [new Data.Models.Hashfile.SHA1 { Hash = "XXXXXX", File = "XXXXXX" }] };
|
||||
else if (hashType == HashType.SHA256)
|
||||
return new Data.Models.Hashfile.Hashfile { SHA256 = [new Data.Models.Hashfile.SHA256 { Hash = "XXXXXX", File = "XXXXXX" }] };
|
||||
else if (hashType == HashType.SHA384)
|
||||
return new Data.Models.Hashfile.Hashfile { SHA384 = [new Data.Models.Hashfile.SHA384 { Hash = "XXXXXX", File = "XXXXXX" }] };
|
||||
else if (hashType == HashType.SHA512)
|
||||
return new Data.Models.Hashfile.Hashfile { SHA512 = [new Data.Models.Hashfile.SHA512 { Hash = "XXXXXX", File = "XXXXXX" }] };
|
||||
else if (hashType == HashType.SpamSum)
|
||||
return new Data.Models.Hashfile.Hashfile { SpamSum = [new Data.Models.Hashfile.SpamSum { Hash = "XXXXXX", File = "XXXXXX" }] };
|
||||
else
|
||||
throw new ArgumentOutOfRangeException(nameof(hashType));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\SabreTools.Data.Models\SabreTools.Data.Models.csproj" />
|
||||
<ProjectReference Include="..\SabreTools.Data.Models\SabreTools.Data.Models.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -74,7 +74,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new ArchiveDotOrg();
|
||||
var serializer = new Serialization.Writers.ArchiveDotOrg();
|
||||
var serializer = new Writers.ArchiveDotOrg();
|
||||
|
||||
// Build the data
|
||||
Data.Models.ArchiveDotOrg.Files files = Build();
|
||||
|
||||
@@ -75,7 +75,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new AttractMode();
|
||||
var serializer = new Serialization.Writers.AttractMode();
|
||||
var serializer = new Writers.AttractMode();
|
||||
|
||||
// Build the data
|
||||
Data.Models.AttractMode.MetadataFile mf = Build();
|
||||
@@ -100,7 +100,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new AttractMode();
|
||||
var serializer = new Serialization.Writers.AttractMode();
|
||||
var serializer = new Writers.AttractMode();
|
||||
|
||||
// Build the data
|
||||
Data.Models.AttractMode.MetadataFile mf = Build();
|
||||
@@ -167,9 +167,9 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
Assert.NotNull(header);
|
||||
if (longHeader)
|
||||
Assert.True(Serialization.Writers.AttractMode.HeaderArrayWithRomname.SequenceEqual(header));
|
||||
Assert.True(Writers.AttractMode.HeaderArrayWithRomname.SequenceEqual(header));
|
||||
else
|
||||
Assert.True(Serialization.Writers.AttractMode.HeaderArrayWithoutRomname.SequenceEqual(header));
|
||||
Assert.True(Writers.AttractMode.HeaderArrayWithoutRomname.SequenceEqual(header));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new ClrMamePro();
|
||||
var serializer = new Serialization.Writers.ClrMamePro();
|
||||
var serializer = new Writers.ClrMamePro();
|
||||
|
||||
// Build the data
|
||||
Data.Models.ClrMamePro.MetadataFile mf = Build(game: true);
|
||||
@@ -100,7 +100,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new ClrMamePro();
|
||||
var serializer = new Serialization.Writers.ClrMamePro();
|
||||
var serializer = new Writers.ClrMamePro();
|
||||
|
||||
// Build the data
|
||||
Data.Models.ClrMamePro.MetadataFile mf = Build(game: true);
|
||||
@@ -126,7 +126,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new ClrMamePro();
|
||||
var serializer = new Serialization.Writers.ClrMamePro();
|
||||
var serializer = new Writers.ClrMamePro();
|
||||
|
||||
// Build the data
|
||||
Data.Models.ClrMamePro.MetadataFile mf = Build(game: false);
|
||||
@@ -151,7 +151,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new ClrMamePro();
|
||||
var serializer = new Serialization.Writers.ClrMamePro();
|
||||
var serializer = new Writers.ClrMamePro();
|
||||
|
||||
// Build the data
|
||||
Data.Models.ClrMamePro.MetadataFile mf = Build(game: false);
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new DosCenter();
|
||||
var serializer = new Serialization.Writers.DosCenter();
|
||||
var serializer = new Writers.DosCenter();
|
||||
|
||||
// Build the data
|
||||
Data.Models.DosCenter.MetadataFile mf = Build();
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new EverdriveSMDB();
|
||||
var serializer = new Serialization.Writers.EverdriveSMDB();
|
||||
var serializer = new Writers.EverdriveSMDB();
|
||||
|
||||
// Build the data
|
||||
Data.Models.EverdriveSMDB.MetadataFile mf = Build();
|
||||
|
||||
@@ -76,7 +76,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Hashfile();
|
||||
var serializer = new Serialization.Writers.Hashfile();
|
||||
var serializer = new Writers.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Data.Models.Hashfile.Hashfile hf = Build(HashType.CRC32);
|
||||
@@ -100,7 +100,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Hashfile();
|
||||
var serializer = new Serialization.Writers.Hashfile();
|
||||
var serializer = new Writers.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Data.Models.Hashfile.Hashfile hf = Build(HashType.MD2);
|
||||
@@ -124,7 +124,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Hashfile();
|
||||
var serializer = new Serialization.Writers.Hashfile();
|
||||
var serializer = new Writers.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Data.Models.Hashfile.Hashfile hf = Build(HashType.MD4);
|
||||
@@ -148,7 +148,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Hashfile();
|
||||
var serializer = new Serialization.Writers.Hashfile();
|
||||
var serializer = new Writers.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Data.Models.Hashfile.Hashfile hf = Build(HashType.MD5);
|
||||
@@ -172,7 +172,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Hashfile();
|
||||
var serializer = new Serialization.Writers.Hashfile();
|
||||
var serializer = new Writers.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Data.Models.Hashfile.Hashfile hf = Build(HashType.SHA1);
|
||||
@@ -196,7 +196,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Hashfile();
|
||||
var serializer = new Serialization.Writers.Hashfile();
|
||||
var serializer = new Writers.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Data.Models.Hashfile.Hashfile hf = Build(HashType.SHA256);
|
||||
@@ -220,7 +220,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Hashfile();
|
||||
var serializer = new Serialization.Writers.Hashfile();
|
||||
var serializer = new Writers.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Data.Models.Hashfile.Hashfile hf = Build(HashType.SHA384);
|
||||
@@ -244,7 +244,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Hashfile();
|
||||
var serializer = new Serialization.Writers.Hashfile();
|
||||
var serializer = new Writers.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Data.Models.Hashfile.Hashfile hf = Build(HashType.SHA512);
|
||||
@@ -268,7 +268,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Hashfile();
|
||||
var serializer = new Serialization.Writers.Hashfile();
|
||||
var serializer = new Writers.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Data.Models.Hashfile.Hashfile hf = Build(HashType.SpamSum);
|
||||
@@ -292,21 +292,26 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
/// </summary>
|
||||
private static Data.Models.Hashfile.Hashfile Build(HashType hashType)
|
||||
{
|
||||
#pragma warning disable IDE0072
|
||||
return hashType switch
|
||||
{
|
||||
HashType.CRC32 => new Data.Models.Hashfile.Hashfile { SFV = [new Data.Models.Hashfile.SFV { File = "XXXXXX", Hash = "XXXXXX" }] },
|
||||
HashType.MD2 => new Data.Models.Hashfile.Hashfile { MD2 = [new Data.Models.Hashfile.MD2 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.MD4 => new Data.Models.Hashfile.Hashfile { MD4 = [new Data.Models.Hashfile.MD4 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.MD5 => new Data.Models.Hashfile.Hashfile { MD5 = [new Data.Models.Hashfile.MD5 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SHA1 => new Data.Models.Hashfile.Hashfile { SHA1 = [new Data.Models.Hashfile.SHA1 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SHA256 => new Data.Models.Hashfile.Hashfile { SHA256 = [new Data.Models.Hashfile.SHA256 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SHA384 => new Data.Models.Hashfile.Hashfile { SHA384 = [new Data.Models.Hashfile.SHA384 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SHA512 => new Data.Models.Hashfile.Hashfile { SHA512 = [new Data.Models.Hashfile.SHA512 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SpamSum => new Data.Models.Hashfile.Hashfile { SpamSum = [new Data.Models.Hashfile.SpamSum { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(hashType)),
|
||||
};
|
||||
#pragma warning restore IDE0072
|
||||
if (hashType == HashType.CRC32)
|
||||
return new Data.Models.Hashfile.Hashfile { SFV = [new Data.Models.Hashfile.SFV { File = "XXXXXX", Hash = "XXXXXX" }] };
|
||||
else if (hashType == HashType.MD2)
|
||||
return new Data.Models.Hashfile.Hashfile { MD2 = [new Data.Models.Hashfile.MD2 { Hash = "XXXXXX", File = "XXXXXX" }] };
|
||||
else if (hashType == HashType.MD4)
|
||||
return new Data.Models.Hashfile.Hashfile { MD4 = [new Data.Models.Hashfile.MD4 { Hash = "XXXXXX", File = "XXXXXX" }] };
|
||||
else if (hashType == HashType.MD5)
|
||||
return new Data.Models.Hashfile.Hashfile { MD5 = [new Data.Models.Hashfile.MD5 { Hash = "XXXXXX", File = "XXXXXX" }] };
|
||||
else if (hashType == HashType.SHA1)
|
||||
return new Data.Models.Hashfile.Hashfile { SHA1 = [new Data.Models.Hashfile.SHA1 { Hash = "XXXXXX", File = "XXXXXX" }] };
|
||||
else if (hashType == HashType.SHA256)
|
||||
return new Data.Models.Hashfile.Hashfile { SHA256 = [new Data.Models.Hashfile.SHA256 { Hash = "XXXXXX", File = "XXXXXX" }] };
|
||||
else if (hashType == HashType.SHA384)
|
||||
return new Data.Models.Hashfile.Hashfile { SHA384 = [new Data.Models.Hashfile.SHA384 { Hash = "XXXXXX", File = "XXXXXX" }] };
|
||||
else if (hashType == HashType.SHA512)
|
||||
return new Data.Models.Hashfile.Hashfile { SHA512 = [new Data.Models.Hashfile.SHA512 { Hash = "XXXXXX", File = "XXXXXX" }] };
|
||||
else if (hashType == HashType.SpamSum)
|
||||
return new Data.Models.Hashfile.Hashfile { SpamSum = [new Data.Models.Hashfile.SpamSum { Hash = "XXXXXX", File = "XXXXXX" }] };
|
||||
else
|
||||
throw new ArgumentOutOfRangeException(nameof(hashType));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Listrom();
|
||||
var serializer = new Serialization.Writers.Listrom();
|
||||
var serializer = new Writers.Listrom();
|
||||
|
||||
// Build the data
|
||||
Data.Models.Listrom.MetadataFile mf = Build();
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Listxml();
|
||||
var serializer = new Serialization.Writers.Listxml();
|
||||
var serializer = new Writers.Listxml();
|
||||
|
||||
// Build the data
|
||||
Data.Models.Listxml.Mame mame = Build(game: true);
|
||||
@@ -102,7 +102,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Listxml();
|
||||
var serializer = new Serialization.Writers.Listxml();
|
||||
var serializer = new Writers.Listxml();
|
||||
|
||||
// Build the data
|
||||
Data.Models.Listxml.Mame mame = Build(game: false);
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Logiqx();
|
||||
var serializer = new Serialization.Writers.Logiqx();
|
||||
var serializer = new Writers.Logiqx();
|
||||
|
||||
// Build the data
|
||||
Data.Models.Logiqx.Datafile df = Build(game: true);
|
||||
@@ -106,7 +106,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Logiqx();
|
||||
var serializer = new Serialization.Writers.Logiqx();
|
||||
var serializer = new Writers.Logiqx();
|
||||
|
||||
// Build the data
|
||||
Data.Models.Logiqx.Datafile df = Build(game: false);
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new M1();
|
||||
var serializer = new Serialization.Writers.M1();
|
||||
var serializer = new Writers.M1();
|
||||
|
||||
// Build the data
|
||||
Data.Models.Listxml.M1 m1 = Build(game: true);
|
||||
@@ -100,7 +100,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new M1();
|
||||
var serializer = new Serialization.Writers.M1();
|
||||
var serializer = new Writers.M1();
|
||||
|
||||
// Build the data
|
||||
Data.Models.Listxml.M1 m1 = Build(game: false);
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Mess();
|
||||
var serializer = new Serialization.Writers.Mess();
|
||||
var serializer = new Writers.Mess();
|
||||
|
||||
// Build the data
|
||||
Data.Models.Listxml.Mess m1 = Build(game: true);
|
||||
@@ -100,7 +100,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Mess();
|
||||
var serializer = new Serialization.Writers.Mess();
|
||||
var serializer = new Writers.Mess();
|
||||
|
||||
// Build the data
|
||||
Data.Models.Listxml.Mess m1 = Build(game: false);
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new OfflineList();
|
||||
var serializer = new Serialization.Writers.OfflineList();
|
||||
var serializer = new Writers.OfflineList();
|
||||
|
||||
// Build the data
|
||||
Data.Models.OfflineList.Dat dat = Build();
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new OpenMSX();
|
||||
var serializer = new Serialization.Writers.OpenMSX();
|
||||
var serializer = new Writers.OpenMSX();
|
||||
|
||||
// Build the data
|
||||
Data.Models.OpenMSX.SoftwareDb sdb = Build();
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new RomCenter();
|
||||
var serializer = new Serialization.Writers.RomCenter();
|
||||
var serializer = new Writers.RomCenter();
|
||||
|
||||
// Build the data
|
||||
Data.Models.RomCenter.MetadataFile mf = Build();
|
||||
|
||||
@@ -75,7 +75,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new SeparatedValue();
|
||||
var serializer = new Serialization.Writers.SeparatedValue();
|
||||
var serializer = new Writers.SeparatedValue();
|
||||
|
||||
// Build the data
|
||||
Data.Models.SeparatedValue.MetadataFile mf = Build();
|
||||
@@ -103,7 +103,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new SeparatedValue();
|
||||
var serializer = new Serialization.Writers.SeparatedValue();
|
||||
var serializer = new Writers.SeparatedValue();
|
||||
|
||||
// Build the data
|
||||
Data.Models.SeparatedValue.MetadataFile mf = Build();
|
||||
@@ -196,9 +196,9 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
Assert.NotNull(header);
|
||||
if (longHeader)
|
||||
Assert.True(Serialization.Writers.SeparatedValue.HeaderArrayExtended.SequenceEqual(header));
|
||||
Assert.True(Writers.SeparatedValue.HeaderArrayExtended.SequenceEqual(header));
|
||||
else
|
||||
Assert.True(Serialization.Writers.SeparatedValue.HeaderArrayStandard.SequenceEqual(header));
|
||||
Assert.True(Writers.SeparatedValue.HeaderArrayStandard.SequenceEqual(header));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Data.Models.AACS;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
namespace SabreTools.Serialization.Readers
|
||||
@@ -106,9 +107,9 @@ namespace SabreTools.Serialization.Readers
|
||||
|
||||
obj.RecordType = (RecordType)data.ReadByteValue();
|
||||
obj.RecordLength = data.ReadUInt24LittleEndian();
|
||||
if (obj.RecordLength > 4)
|
||||
if ((uint)obj.RecordLength > 4)
|
||||
{
|
||||
byte[] copyright = data.ReadBytes((int)(obj.RecordLength - 4));
|
||||
byte[] copyright = data.ReadBytes((int)((uint)obj.RecordLength - 4));
|
||||
obj.Copyright = Encoding.ASCII.GetString(copyright).TrimEnd('\0');
|
||||
}
|
||||
|
||||
@@ -149,7 +150,7 @@ namespace SabreTools.Serialization.Readers
|
||||
// Try to parse the signature blocks
|
||||
var blocks = new List<DriveRevocationSignatureBlock>();
|
||||
uint entryCount = 0;
|
||||
while (entryCount < obj.TotalNumberOfEntries && data.Position < initialOffset + obj.RecordLength)
|
||||
while (entryCount < obj.TotalNumberOfEntries && data.Position < initialOffset + (uint)obj.RecordLength)
|
||||
{
|
||||
var block = ParseDriveRevocationSignatureBlock(data);
|
||||
entryCount += block.NumberOfEntries;
|
||||
@@ -164,8 +165,8 @@ namespace SabreTools.Serialization.Readers
|
||||
obj.SignatureBlocks = [.. blocks];
|
||||
|
||||
// If there's any data left, discard it
|
||||
if (data.Position < initialOffset + obj.RecordLength)
|
||||
_ = data.ReadBytes((int)(initialOffset + obj.RecordLength - data.Position));
|
||||
if (data.Position < initialOffset + (uint)obj.RecordLength)
|
||||
_ = data.ReadBytes((int)(initialOffset + (uint)obj.RecordLength - data.Position));
|
||||
|
||||
return obj;
|
||||
}
|
||||
@@ -200,8 +201,8 @@ namespace SabreTools.Serialization.Readers
|
||||
|
||||
obj.RecordType = (RecordType)data.ReadByteValue();
|
||||
obj.RecordLength = data.ReadUInt24LittleEndian();
|
||||
if (obj.RecordLength > 4)
|
||||
obj.SignatureData = data.ReadBytes((int)(obj.RecordLength - 4));
|
||||
if ((uint)obj.RecordLength > 4)
|
||||
obj.SignatureData = data.ReadBytes((int)((uint)obj.RecordLength - 4));
|
||||
|
||||
return obj;
|
||||
}
|
||||
@@ -223,7 +224,7 @@ namespace SabreTools.Serialization.Readers
|
||||
|
||||
// Try to parse the subset differences
|
||||
var subsetDifferences = new List<SubsetDifference>();
|
||||
while (data.Position < initialOffset + obj.RecordLength - 5)
|
||||
while (data.Position < initialOffset + (uint)obj.RecordLength - 5)
|
||||
{
|
||||
var subsetDifference = ParseSubsetDifference(data);
|
||||
subsetDifferences.Add(subsetDifference);
|
||||
@@ -233,8 +234,8 @@ namespace SabreTools.Serialization.Readers
|
||||
obj.SubsetDifferences = [.. subsetDifferences];
|
||||
|
||||
// If there's any data left, discard it
|
||||
if (data.Position < initialOffset + obj.RecordLength)
|
||||
_ = data.ReadBytes((int)(initialOffset + obj.RecordLength - data.Position));
|
||||
if (data.Position < initialOffset + (uint)obj.RecordLength)
|
||||
_ = data.ReadBytes((int)(initialOffset + (uint)obj.RecordLength - data.Position));
|
||||
|
||||
return obj;
|
||||
}
|
||||
@@ -288,7 +289,7 @@ namespace SabreTools.Serialization.Readers
|
||||
|
||||
// Try to parse the signature blocks
|
||||
var blocks = new List<HostRevocationSignatureBlock>();
|
||||
for (uint entryCount = 0; entryCount < obj.TotalNumberOfEntries && data.Position < initialOffset + obj.RecordLength;)
|
||||
for (uint entryCount = 0; entryCount < obj.TotalNumberOfEntries && data.Position < initialOffset + (uint)obj.RecordLength;)
|
||||
{
|
||||
var block = ParseHostRevocationSignatureBlock(data);
|
||||
entryCount += block.NumberOfEntries;
|
||||
@@ -303,8 +304,8 @@ namespace SabreTools.Serialization.Readers
|
||||
obj.SignatureBlocks = [.. blocks];
|
||||
|
||||
// If there's any data left, discard it
|
||||
if (data.Position < initialOffset + obj.RecordLength)
|
||||
_ = data.ReadBytes((int)(initialOffset + obj.RecordLength - data.Position));
|
||||
if (data.Position < initialOffset + (uint)obj.RecordLength)
|
||||
_ = data.ReadBytes((int)(initialOffset + (uint)obj.RecordLength - data.Position));
|
||||
|
||||
return obj;
|
||||
}
|
||||
@@ -345,7 +346,7 @@ namespace SabreTools.Serialization.Readers
|
||||
|
||||
// Try to parse the media keys
|
||||
var mediaKeys = new List<byte[]>();
|
||||
while (data.Position < initialOffset + obj.RecordLength)
|
||||
while (data.Position < initialOffset + (uint)obj.RecordLength)
|
||||
{
|
||||
byte[] mediaKey = data.ReadBytes(0x10);
|
||||
mediaKeys.Add(mediaKey);
|
||||
@@ -390,7 +391,7 @@ namespace SabreTools.Serialization.Readers
|
||||
|
||||
// Try to parse the offsets
|
||||
var offsets = new List<uint>();
|
||||
while (data.Position < initialOffset + obj.RecordLength)
|
||||
while (data.Position < initialOffset + (uint)obj.RecordLength)
|
||||
{
|
||||
uint offset = data.ReadUInt32BigEndian();
|
||||
offsets.Add(offset);
|
||||
|
||||
@@ -2,6 +2,7 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using SabreTools.Data.Models.ASN1;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
|
||||
#pragma warning disable CA1822 // Mark members as static
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
|
||||
@@ -2,6 +2,7 @@ using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Data.Models.AdvancedInstaller;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
using static SabreTools.Data.Models.AdvancedInstaller.Constants;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
using static SabreTools.Data.Models.PlayStation4.Constants;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using System.IO;
|
||||
using SabreTools.Data.Models.Atari7800;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Matching;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
using static SabreTools.Data.Models.Atari7800.Constants;
|
||||
|
||||
namespace SabreTools.Serialization.Readers
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using System.IO;
|
||||
using SabreTools.Data.Models.AtariLynx;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Matching;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
using static SabreTools.Data.Models.AtariLynx.Constants;
|
||||
|
||||
namespace SabreTools.Serialization.Readers
|
||||
|
||||
@@ -2,7 +2,7 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Data.Models.AttractMode;
|
||||
using SabreTools.IO.Readers;
|
||||
using SabreTools.Text.SeparatedValue;
|
||||
|
||||
namespace SabreTools.Serialization.Readers
|
||||
{
|
||||
@@ -28,7 +28,7 @@ namespace SabreTools.Serialization.Readers
|
||||
try
|
||||
{
|
||||
// Setup the reader and output
|
||||
var reader = new SeparatedValueReader(data, Encoding.UTF8)
|
||||
var reader = new Reader(data, Encoding.UTF8)
|
||||
{
|
||||
Separator = ';',
|
||||
VerifyFieldCount = false,
|
||||
|
||||
@@ -2,6 +2,7 @@ using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Data.Models.BDPlus;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
using static SabreTools.Data.Models.BDPlus.Constants;
|
||||
|
||||
namespace SabreTools.Serialization.Readers
|
||||
|
||||
@@ -2,6 +2,7 @@ using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Data.Models.BFPK;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
using static SabreTools.Data.Models.BFPK.Constants;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Data.Models.BSP;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
using static SabreTools.Data.Models.BSP.Constants;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
|
||||
@@ -2,6 +2,7 @@ using System.IO;
|
||||
using SabreTools.Data.Extensions;
|
||||
using SabreTools.Data.Models.CDROM;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
namespace SabreTools.Serialization.Readers
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.Text;
|
||||
using SabreTools.Data.Extensions;
|
||||
using SabreTools.Data.Models.CFB;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
using static SabreTools.Data.Models.CFB.Constants;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Data.Models.CHD;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
|
||||
namespace SabreTools.Serialization.Readers
|
||||
{
|
||||
|
||||
@@ -2,6 +2,7 @@ using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Data.Models.N3DS;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
namespace SabreTools.Serialization.Readers
|
||||
|
||||
@@ -3,7 +3,7 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Data.Models.ClrMamePro;
|
||||
using SabreTools.IO.Readers;
|
||||
using SabreTools.Text.ClrMamePro;
|
||||
|
||||
#pragma warning disable CA1822 // Mark members as static
|
||||
namespace SabreTools.Serialization.Readers
|
||||
@@ -78,7 +78,7 @@ namespace SabreTools.Serialization.Readers
|
||||
try
|
||||
{
|
||||
// Setup the reader and output
|
||||
var reader = new ClrMameProReader(data, Encoding.UTF8) { Quotes = quotes };
|
||||
var reader = new Reader(data, Encoding.UTF8) { Quotes = quotes };
|
||||
var dat = new MetadataFile();
|
||||
|
||||
// Loop through and parse out the values
|
||||
@@ -437,9 +437,9 @@ namespace SabreTools.Serialization.Readers
|
||||
/// <summary>
|
||||
/// Create a Release object from the current reader context
|
||||
/// </summary>
|
||||
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||
/// <param name="reader">Reader representing the metadata file</param>
|
||||
/// <returns>Release object created from the reader context</returns>
|
||||
private static Release? CreateRelease(ClrMameProReader reader)
|
||||
private static Release? CreateRelease(Reader reader)
|
||||
{
|
||||
if (reader.Internal is null)
|
||||
return null;
|
||||
@@ -477,9 +477,9 @@ namespace SabreTools.Serialization.Readers
|
||||
/// <summary>
|
||||
/// Create a BiosSet object from the current reader context
|
||||
/// </summary>
|
||||
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||
/// <param name="reader">Reader representing the metadata file</param>
|
||||
/// <returns>BiosSet object created from the reader context</returns>
|
||||
private static BiosSet? CreateBiosSet(ClrMameProReader reader)
|
||||
private static BiosSet? CreateBiosSet(Reader reader)
|
||||
{
|
||||
if (reader.Internal is null)
|
||||
return null;
|
||||
@@ -510,9 +510,9 @@ namespace SabreTools.Serialization.Readers
|
||||
/// <summary>
|
||||
/// Create a Rom object from the current reader context
|
||||
/// </summary>
|
||||
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||
/// <param name="reader">Reader representing the metadata file</param>
|
||||
/// <returns>Rom object created from the reader context</returns>
|
||||
private static Rom? CreateRom(ClrMameProReader reader)
|
||||
private static Rom? CreateRom(Reader reader)
|
||||
{
|
||||
if (reader.Internal is null)
|
||||
return null;
|
||||
@@ -615,9 +615,9 @@ namespace SabreTools.Serialization.Readers
|
||||
/// <summary>
|
||||
/// Create a Disk object from the current reader context
|
||||
/// </summary>
|
||||
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||
/// <param name="reader">Reader representing the metadata file</param>
|
||||
/// <returns>Disk object created from the reader context</returns>
|
||||
private static Disk? CreateDisk(ClrMameProReader reader)
|
||||
private static Disk? CreateDisk(Reader reader)
|
||||
{
|
||||
if (reader.Internal is null)
|
||||
return null;
|
||||
@@ -657,9 +657,9 @@ namespace SabreTools.Serialization.Readers
|
||||
/// <summary>
|
||||
/// Create a Media object from the current reader context
|
||||
/// </summary>
|
||||
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||
/// <param name="reader">Reader representing the metadata file</param>
|
||||
/// <returns>Media object created from the reader context</returns>
|
||||
private static Media? CreateMedia(ClrMameProReader reader)
|
||||
private static Media? CreateMedia(Reader reader)
|
||||
{
|
||||
if (reader.Internal is null)
|
||||
return null;
|
||||
@@ -696,9 +696,9 @@ namespace SabreTools.Serialization.Readers
|
||||
/// <summary>
|
||||
/// Create a Sample object from the current reader context
|
||||
/// </summary>
|
||||
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||
/// <param name="reader">Reader representing the metadata file</param>
|
||||
/// <returns>Sample object created from the reader context</returns>
|
||||
private static Sample? CreateSample(ClrMameProReader reader)
|
||||
private static Sample? CreateSample(Reader reader)
|
||||
{
|
||||
if (reader.Internal is null)
|
||||
return null;
|
||||
@@ -723,9 +723,9 @@ namespace SabreTools.Serialization.Readers
|
||||
/// <summary>
|
||||
/// Create a Archive object from the current reader context
|
||||
/// </summary>
|
||||
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||
/// <param name="reader">Reader representing the metadata file</param>
|
||||
/// <returns>Archive object created from the reader context</returns>
|
||||
private static Archive? CreateArchive(ClrMameProReader reader)
|
||||
private static Archive? CreateArchive(Reader reader)
|
||||
{
|
||||
if (reader.Internal is null)
|
||||
return null;
|
||||
@@ -750,9 +750,9 @@ namespace SabreTools.Serialization.Readers
|
||||
/// <summary>
|
||||
/// Create a Chip object from the current reader context
|
||||
/// </summary>
|
||||
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||
/// <param name="reader">Reader representing the metadata file</param>
|
||||
/// <returns>Chip object created from the reader context</returns>
|
||||
private static Chip? CreateChip(ClrMameProReader reader)
|
||||
private static Chip? CreateChip(Reader reader)
|
||||
{
|
||||
if (reader.Internal is null)
|
||||
return null;
|
||||
@@ -786,9 +786,9 @@ namespace SabreTools.Serialization.Readers
|
||||
/// <summary>
|
||||
/// Create a Video object from the current reader context
|
||||
/// </summary>
|
||||
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||
/// <param name="reader">Reader representing the metadata file</param>
|
||||
/// <returns>Video object created from the reader context</returns>
|
||||
private static Video? CreateVideo(ClrMameProReader reader)
|
||||
private static Video? CreateVideo(Reader reader)
|
||||
{
|
||||
if (reader.Internal is null)
|
||||
return null;
|
||||
@@ -831,9 +831,9 @@ namespace SabreTools.Serialization.Readers
|
||||
/// <summary>
|
||||
/// Create a Sound object from the current reader context
|
||||
/// </summary>
|
||||
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||
/// <param name="reader">Reader representing the metadata file</param>
|
||||
/// <returns>Sound object created from the reader context</returns>
|
||||
private static Sound? CreateSound(ClrMameProReader reader)
|
||||
private static Sound? CreateSound(Reader reader)
|
||||
{
|
||||
if (reader.Internal is null)
|
||||
return null;
|
||||
@@ -858,9 +858,9 @@ namespace SabreTools.Serialization.Readers
|
||||
/// <summary>
|
||||
/// Create a Input object from the current reader context
|
||||
/// </summary>
|
||||
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||
/// <param name="reader">Reader representing the metadata file</param>
|
||||
/// <returns>Input object created from the reader context</returns>
|
||||
private static Input? CreateInput(ClrMameProReader reader)
|
||||
private static Input? CreateInput(Reader reader)
|
||||
{
|
||||
if (reader.Internal is null)
|
||||
return null;
|
||||
@@ -900,9 +900,9 @@ namespace SabreTools.Serialization.Readers
|
||||
/// <summary>
|
||||
/// Create a DipSwitch object from the current reader context
|
||||
/// </summary>
|
||||
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||
/// <param name="reader">Reader representing the metadata file</param>
|
||||
/// <returns>DipSwitch object created from the reader context</returns>
|
||||
private static DipSwitch? CreateDipSwitch(ClrMameProReader reader)
|
||||
private static DipSwitch? CreateDipSwitch(Reader reader)
|
||||
{
|
||||
if (reader.Internal is null)
|
||||
return null;
|
||||
@@ -935,9 +935,9 @@ namespace SabreTools.Serialization.Readers
|
||||
/// <summary>
|
||||
/// Create a Driver object from the current reader context
|
||||
/// </summary>
|
||||
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||
/// <param name="reader">Reader representing the metadata file</param>
|
||||
/// <returns>Driver object created from the reader context</returns>
|
||||
private static Driver? CreateDriver(ClrMameProReader reader)
|
||||
private static Driver? CreateDriver(Reader reader)
|
||||
{
|
||||
if (reader.Internal is null)
|
||||
return null;
|
||||
|
||||
@@ -2,7 +2,7 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Data.Models.DosCenter;
|
||||
using SabreTools.IO.Readers;
|
||||
using SabreTools.Text.ClrMamePro;
|
||||
|
||||
namespace SabreTools.Serialization.Readers
|
||||
{
|
||||
@@ -18,7 +18,7 @@ namespace SabreTools.Serialization.Readers
|
||||
try
|
||||
{
|
||||
// Setup the reader and output
|
||||
var reader = new ClrMameProReader(data, Encoding.UTF8) { DosCenter = true };
|
||||
var reader = new Reader(data, Encoding.UTF8) { DosCenter = true };
|
||||
var dat = new MetadataFile();
|
||||
|
||||
// Loop through and parse out the values
|
||||
@@ -176,7 +176,7 @@ namespace SabreTools.Serialization.Readers
|
||||
/// </summary>
|
||||
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||
/// <returns>File object created from the reader context</returns>
|
||||
private static Data.Models.DosCenter.File? CreateFile(ClrMameProReader reader)
|
||||
private static Data.Models.DosCenter.File? CreateFile(Reader reader)
|
||||
{
|
||||
if (reader.Internal is null)
|
||||
return null;
|
||||
|
||||
@@ -2,7 +2,7 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Data.Models.EverdriveSMDB;
|
||||
using SabreTools.IO.Readers;
|
||||
using SabreTools.Text.SeparatedValue;
|
||||
|
||||
namespace SabreTools.Serialization.Readers
|
||||
{
|
||||
@@ -18,7 +18,7 @@ namespace SabreTools.Serialization.Readers
|
||||
try
|
||||
{
|
||||
// Setup the reader and output
|
||||
var reader = new SeparatedValueReader(data, Encoding.UTF8)
|
||||
var reader = new Reader(data, Encoding.UTF8)
|
||||
{
|
||||
Header = false,
|
||||
Separator = '\t',
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using System.IO;
|
||||
using SabreTools.Data.Models.NES;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Matching;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
using static SabreTools.Data.Models.NES.Constants;
|
||||
|
||||
namespace SabreTools.Serialization.Readers
|
||||
|
||||
@@ -2,6 +2,8 @@ using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Data.Models.GCF;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
using SabreTools.Text.Extensions;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
namespace SabreTools.Serialization.Readers
|
||||
|
||||
@@ -2,6 +2,8 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using SabreTools.Data.Models.GZIP;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
using SabreTools.Text.Extensions;
|
||||
using static SabreTools.Data.Models.GZIP.Constants;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
|
||||
@@ -69,24 +69,30 @@ namespace SabreTools.Serialization.Readers
|
||||
/// <inheritdoc cref="Deserialize(Stream)"/>
|
||||
public Data.Models.Hashfile.Hashfile? Deserialize(Stream? data, HashType hash)
|
||||
{
|
||||
#pragma warning disable IDE0072
|
||||
return hash switch
|
||||
{
|
||||
HashType.CRC32 => DeserializeSFV(data),
|
||||
HashType.MD2 => DeserializeMD2(data),
|
||||
HashType.MD4 => DeserializeMD4(data),
|
||||
HashType.MD5 => DeserializeMD5(data),
|
||||
HashType.RIPEMD128 => DeserializeRIPEMD128(data),
|
||||
HashType.RIPEMD160 => DeserializeRIPEMD160(data),
|
||||
HashType.SHA1 => DeserializeSHA1(data),
|
||||
HashType.SHA256 => DeserializeSHA256(data),
|
||||
HashType.SHA384 => DeserializeSHA384(data),
|
||||
HashType.SHA512 => DeserializeSHA512(data),
|
||||
HashType.SpamSum => DeserializeSpamSum(data),
|
||||
|
||||
_ => null,
|
||||
};
|
||||
#pragma warning restore IDE0072
|
||||
if (hash == HashType.CRC32)
|
||||
return DeserializeSFV(data);
|
||||
else if (hash == HashType.MD2)
|
||||
return DeserializeMD2(data);
|
||||
else if (hash == HashType.MD4)
|
||||
return DeserializeMD4(data);
|
||||
else if (hash == HashType.MD5)
|
||||
return DeserializeMD5(data);
|
||||
else if (hash == HashType.RIPEMD128)
|
||||
return DeserializeRIPEMD128(data);
|
||||
else if (hash == HashType.RIPEMD160)
|
||||
return DeserializeRIPEMD160(data);
|
||||
else if (hash == HashType.SHA1)
|
||||
return DeserializeSHA1(data);
|
||||
else if (hash == HashType.SHA256)
|
||||
return DeserializeSHA256(data);
|
||||
else if (hash == HashType.SHA384)
|
||||
return DeserializeSHA384(data);
|
||||
else if (hash == HashType.SHA512)
|
||||
return DeserializeSHA512(data);
|
||||
else if (hash == HashType.SpamSum)
|
||||
return DeserializeSpamSum(data);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="Deserialize(Stream)"/>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
namespace SabreTools.Serialization.Readers
|
||||
|
||||
@@ -3,6 +3,8 @@ using System.IO;
|
||||
using SabreTools.Data.Extensions;
|
||||
using SabreTools.Data.Models.ISO9660;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Matching;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
|
||||
#pragma warning disable CA1822 // Mark members as static
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
|
||||
@@ -3,6 +3,8 @@ using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Data.Models.InstallShieldArchiveV3;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
using SabreTools.Text.Extensions;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
namespace SabreTools.Serialization.Readers
|
||||
|
||||
@@ -5,6 +5,8 @@ using System.Text;
|
||||
using SabreTools.Data.Extensions;
|
||||
using SabreTools.Data.Models.InstallShieldCabinet;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
using SabreTools.Text.Extensions;
|
||||
using static SabreTools.Data.Models.InstallShieldCabinet.Constants;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
|
||||
@@ -2,6 +2,7 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using SabreTools.Data.Models.InstallShieldExecutable;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Text.Extensions;
|
||||
using static SabreTools.Data.Models.InstallShieldExecutable.Constants;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
|
||||
@@ -2,6 +2,8 @@ using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Data.Models.LZ;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
using SabreTools.Text.Extensions;
|
||||
using static SabreTools.Data.Models.LZ.Constants;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
|
||||
@@ -2,6 +2,7 @@ using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Data.Models.LZ;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
using static SabreTools.Data.Models.LZ.Constants;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
|
||||
@@ -2,6 +2,7 @@ using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Data.Models.LZ;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
using static SabreTools.Data.Models.LZ.Constants;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.Data.Models.LinearExecutable;
|
||||
using SabreTools.IO.Extensions;
|
||||
using SabreTools.Numerics.Extensions;
|
||||
using static SabreTools.Data.Models.LinearExecutable.Constants;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user