Update SabreTools.

This commit is contained in:
2024-11-10 06:42:15 +00:00
parent 54633ab5eb
commit d870addb63
5 changed files with 209 additions and 138 deletions

View File

@@ -10,6 +10,7 @@
<PackageReference Include="DotNetZip" Version="1.16.0" /> <PackageReference Include="DotNetZip" Version="1.16.0" />
<PackageReference Include="EFCore.BulkExtensions" Version="8.1.1" /> <PackageReference Include="EFCore.BulkExtensions" Version="8.1.1" />
<PackageReference Include="Mono.Fuse.NETStandard" Version="1.1.0"/> <PackageReference Include="Mono.Fuse.NETStandard" Version="1.1.0"/>
<PackageReference Include="SabreTools.Models" Version="1.4.10" />
<PackageReference Include="SharpCompress" Version="0.38.0" /> <PackageReference Include="SharpCompress" Version="0.38.0" />
<PackageReference Include="System.Security.Principal.Windows" Version="5.0.0"/> <PackageReference Include="System.Security.Principal.Windows" Version="5.0.0"/>
<PackageReference Include="winfsp.net" Version="2.1.24255" /> <PackageReference Include="winfsp.net" Version="2.1.24255" />
@@ -55,7 +56,9 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\RomRepoMgr.Database\RomRepoMgr.Database.csproj"/> <ProjectReference Include="..\RomRepoMgr.Database\RomRepoMgr.Database.csproj"/>
<ProjectReference Include="..\RomRepoMgr.Settings\RomRepoMgr.Settings.csproj"/> <ProjectReference Include="..\RomRepoMgr.Settings\RomRepoMgr.Settings.csproj"/>
<ProjectReference Include="..\SabreTools\SabreTools.DatFiles\SabreTools.DatFiles.csproj"/> <ProjectReference Include="D:\repos\RomRepoMgr\SabreTools\SabreTools.DatFiles\SabreTools.DatFiles.csproj" />
<ProjectReference Include="D:\repos\RomRepoMgr\SabreTools\SabreTools.DatItems\SabreTools.DatItems.csproj" />
<ProjectReference Include="D:\repos\RomRepoMgr\SabreTools\SabreTools.FileTypes\SabreTools.FileTypes.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -39,9 +39,14 @@ using RomRepoMgr.Core.Resources;
using RomRepoMgr.Database; using RomRepoMgr.Database;
using RomRepoMgr.Database.Models; using RomRepoMgr.Database.Models;
using SabreTools.DatFiles; using SabreTools.DatFiles;
using SabreTools.DatItems; using SabreTools.Models.Metadata;
using DatItem = SabreTools.DatItems.DatItem;
using Disk = SabreTools.DatItems.Formats.Disk;
using ErrorEventArgs = RomRepoMgr.Core.EventArgs.ErrorEventArgs; using ErrorEventArgs = RomRepoMgr.Core.EventArgs.ErrorEventArgs;
using File = System.IO.File;
using Machine = RomRepoMgr.Database.Models.Machine; using Machine = RomRepoMgr.Database.Models.Machine;
using Media = SabreTools.DatItems.Formats.Media;
using Rom = SabreTools.DatItems.Formats.Rom;
namespace RomRepoMgr.Core.Workers; namespace RomRepoMgr.Core.Workers;
@@ -112,15 +117,15 @@ public sealed class DatImporter
var romSet = new RomSet var romSet = new RomSet
{ {
Author = datFile.Header.Author, Author = datFile.Header.GetStringFieldValue(Header.AuthorKey),
Comment = datFile.Header.Comment, Comment = datFile.Header.GetStringFieldValue(Header.CommentKey),
Date = datFile.Header.Date, Date = datFile.Header.GetStringFieldValue(Header.DateKey),
Description = datFile.Header.Description, Description = datFile.Header.GetStringFieldValue(Header.DescriptionKey),
Filename = Path.GetFileName(_datPath), Filename = Path.GetFileName(_datPath),
Homepage = datFile.Header.Homepage, Homepage = datFile.Header.GetStringFieldValue(Header.HomepageKey),
Name = datFile.Header.Name, Name = datFile.Header.GetStringFieldValue(Header.NameKey),
Sha384 = datHash, Sha384 = datHash,
Version = datFile.Header.Version, Version = datFile.Header.GetStringFieldValue(Header.VersionKey),
CreatedOn = DateTime.UtcNow, CreatedOn = DateTime.UtcNow,
UpdatedOn = DateTime.UtcNow, UpdatedOn = DateTime.UtcNow,
Category = _category Category = _category
@@ -146,8 +151,13 @@ public sealed class DatImporter
Message = Localization.GettingMachineNames Message = Localization.GettingMachineNames
}); });
var machineNames = (from value in datFile.Items.Values from item in value select item.Machine.Name) var machineNames = (from value in datFile.Items.Values
.Distinct() from item in value
select item.GetFieldValue<SabreTools.DatItems.Machine>(DatItem.MachineKey)
?.GetStringFieldValue(SabreTools.Models.Metadata.Machine.NameKey)
into m
where m is not null
select m).Distinct()
.ToList(); .ToList();
SetMessage?.Invoke(this, SetMessage?.Invoke(this,
@@ -311,72 +321,72 @@ public sealed class DatImporter
switch(item) switch(item)
{ {
case Rom rom: case Rom rom:
if(rom.CRC != null) if(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey) != null)
{ {
dbcc = dbConnection.CreateCommand(); dbcc = dbConnection.CreateCommand();
dbcc.CommandText = dbcc.CommandText =
$"INSERT INTO \"{tmpRomCrc32Table}\" (\"Size\", \"Crc32\") VALUES (\"{(ulong)rom.Size}\", \"{rom.CRC}\");"; $"INSERT INTO \"{tmpRomCrc32Table}\" (\"Size\", \"Crc32\") VALUES (\"{(ulong)rom.GetInt64FieldValue(SabreTools.Models.Metadata.Rom.SizeKey)}\", \"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\");";
dbcc.ExecuteNonQuery(); dbcc.ExecuteNonQuery();
romsHaveCrc = true; romsHaveCrc = true;
} }
if(rom.MD5 != null) if(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key) != null)
{ {
dbcc = dbConnection.CreateCommand(); dbcc = dbConnection.CreateCommand();
dbcc.CommandText = dbcc.CommandText =
$"INSERT INTO \"{tmpRomMd5Table}\" (\"Size\", \"Md5\") VALUES (\"{(ulong)rom.Size}\", \"{rom.MD5}\");"; $"INSERT INTO \"{tmpRomMd5Table}\" (\"Size\", \"Md5\") VALUES (\"{(ulong)rom.GetInt64FieldValue(SabreTools.Models.Metadata.Rom.SizeKey)}\", \"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\");";
dbcc.ExecuteNonQuery(); dbcc.ExecuteNonQuery();
romsHaveMd5 = true; romsHaveMd5 = true;
} }
if(rom.SHA1 != null) if(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key) != null)
{ {
dbcc = dbConnection.CreateCommand(); dbcc = dbConnection.CreateCommand();
dbcc.CommandText = dbcc.CommandText =
$"INSERT INTO \"{tmpRomSha1Table}\" (\"Size\", \"Sha1\") VALUES (\"{(ulong)rom.Size}\", \"{rom.SHA1}\");"; $"INSERT INTO \"{tmpRomSha1Table}\" (\"Size\", \"Sha1\") VALUES (\"{(ulong)rom.GetInt64FieldValue(SabreTools.Models.Metadata.Rom.SizeKey)}\", \"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\");";
dbcc.ExecuteNonQuery(); dbcc.ExecuteNonQuery();
romsHaveSha1 = true; romsHaveSha1 = true;
} }
if(rom.SHA256 != null) if(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA256Key) != null)
{ {
dbcc = dbConnection.CreateCommand(); dbcc = dbConnection.CreateCommand();
dbcc.CommandText = dbcc.CommandText =
$"INSERT INTO \"{tmpRomSha256Table}\" (\"Size\", \"Sha256\") VALUES (\"{(ulong)rom.Size}\", \"{rom.SHA256}\");"; $"INSERT INTO \"{tmpRomSha256Table}\" (\"Size\", \"Sha256\") VALUES (\"{(ulong)rom.GetInt64FieldValue(SabreTools.Models.Metadata.Rom.SizeKey)}\", \"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA256Key)}\");";
dbcc.ExecuteNonQuery(); dbcc.ExecuteNonQuery();
romsHaveSha256 = true; romsHaveSha256 = true;
} }
if(rom.SHA384 != null) if(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA384Key) != null)
{ {
dbcc = dbConnection.CreateCommand(); dbcc = dbConnection.CreateCommand();
dbcc.CommandText = dbcc.CommandText =
$"INSERT INTO \"{tmpRomSha384Table}\" (\"Size\", \"Sha384\") VALUES (\"{(ulong)rom.Size}\", \"{rom.SHA384}\");"; $"INSERT INTO \"{tmpRomSha384Table}\" (\"Size\", \"Sha384\") VALUES (\"{(ulong)rom.GetInt64FieldValue(SabreTools.Models.Metadata.Rom.SizeKey)}\", \"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA384Key)}\");";
dbcc.ExecuteNonQuery(); dbcc.ExecuteNonQuery();
romsHaveSha384 = true; romsHaveSha384 = true;
} }
if(rom.SHA512 != null) if(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA512Key) != null)
{ {
dbcc = dbConnection.CreateCommand(); dbcc = dbConnection.CreateCommand();
dbcc.CommandText = dbcc.CommandText =
$"INSERT INTO \"{tmpRomSha512Table}\" (\"Size\", \"Sha512\") VALUES (\"{(ulong)rom.Size}\", \"{rom.SHA512}\");"; $"INSERT INTO \"{tmpRomSha512Table}\" (\"Size\", \"Sha512\") VALUES (\"{(ulong)rom.GetInt64FieldValue(SabreTools.Models.Metadata.Rom.SizeKey)}\", \"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA512Key)}\");";
dbcc.ExecuteNonQuery(); dbcc.ExecuteNonQuery();
@@ -387,24 +397,24 @@ public sealed class DatImporter
continue; continue;
case Disk disk: case Disk disk:
if(disk.MD5 != null) if(disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.MD5Key) != null)
{ {
dbcc = dbConnection.CreateCommand(); dbcc = dbConnection.CreateCommand();
dbcc.CommandText = dbcc.CommandText =
$"INSERT INTO \"{tmpDiskMd5Table}\" (\"Md5\") VALUES (\"{disk.MD5}\");"; $"INSERT INTO \"{tmpDiskMd5Table}\" (\"Md5\") VALUES (\"{disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.MD5Key)}\");";
dbcc.ExecuteNonQuery(); dbcc.ExecuteNonQuery();
disksHaveMd5 = true; disksHaveMd5 = true;
} }
if(disk.SHA1 != null) if(disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.SHA1Key) != null)
{ {
dbcc = dbConnection.CreateCommand(); dbcc = dbConnection.CreateCommand();
dbcc.CommandText = dbcc.CommandText =
$"INSERT INTO \"{tmpDiskSha1Table}\" (\"Sha1\") VALUES (\"{disk.SHA1}\");"; $"INSERT INTO \"{tmpDiskSha1Table}\" (\"Sha1\") VALUES (\"{disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.SHA1Key)}\");";
dbcc.ExecuteNonQuery(); dbcc.ExecuteNonQuery();
@@ -415,36 +425,36 @@ public sealed class DatImporter
continue; continue;
case Media media: case Media media:
if(media.MD5 != null) if(media.GetStringFieldValue(SabreTools.Models.Metadata.Media.MD5Key) != null)
{ {
dbcc = dbConnection.CreateCommand(); dbcc = dbConnection.CreateCommand();
dbcc.CommandText = dbcc.CommandText =
$"INSERT INTO \"{tmpMediaMd5Table}\" (\"Md5\") VALUES (\"{media.MD5}\");"; $"INSERT INTO \"{tmpMediaMd5Table}\" (\"Md5\") VALUES (\"{media.GetStringFieldValue(SabreTools.Models.Metadata.Media.MD5Key)}\");";
dbcc.ExecuteNonQuery(); dbcc.ExecuteNonQuery();
mediasHaveMd5 = true; mediasHaveMd5 = true;
} }
if(media.SHA1 != null) if(media.GetStringFieldValue(SabreTools.Models.Metadata.Media.SHA1Key) != null)
{ {
dbcc = dbConnection.CreateCommand(); dbcc = dbConnection.CreateCommand();
dbcc.CommandText = dbcc.CommandText =
$"INSERT INTO \"{tmpMediaSha1Table}\" (\"Sha1\") VALUES (\"{media.SHA1}\");"; $"INSERT INTO \"{tmpMediaSha1Table}\" (\"Sha1\") VALUES (\"{media.GetStringFieldValue(SabreTools.Models.Metadata.Media.SHA1Key)}\");";
dbcc.ExecuteNonQuery(); dbcc.ExecuteNonQuery();
mediasHaveSha1 = true; mediasHaveSha1 = true;
} }
if(media.SHA256 != null) if(media.GetStringFieldValue(SabreTools.Models.Metadata.Media.SHA256Key) != null)
{ {
dbcc = dbConnection.CreateCommand(); dbcc = dbConnection.CreateCommand();
dbcc.CommandText = dbcc.CommandText =
$"INSERT INTO \"{tmpMediaSha256Table}\" (\"Sha256\") VALUES (\"{media.SHA256}\");"; $"INSERT INTO \"{tmpMediaSha256Table}\" (\"Sha256\") VALUES (\"{media.GetStringFieldValue(SabreTools.Models.Metadata.Media.SHA256Key)}\");";
dbcc.ExecuteNonQuery(); dbcc.ExecuteNonQuery();
@@ -645,7 +655,9 @@ public sealed class DatImporter
Value = position Value = position
}); });
if(!machines.TryGetValue(rom.Machine.Name, out Machine machine)) if(!machines.TryGetValue(rom.GetFieldValue<SabreTools.DatItems.Machine>(DatItem.MachineKey)
?.GetStringFieldValue(SabreTools.Models.Metadata.Machine.NameKey),
out Machine machine))
{ {
ErrorOccurred?.Invoke(this, ErrorOccurred?.Invoke(this,
new ErrorEventArgs new ErrorEventArgs
@@ -656,13 +668,15 @@ public sealed class DatImporter
return; return;
} }
var uSize = (ulong)rom.Size; var uSize = (ulong)rom.GetInt64FieldValue(SabreTools.Models.Metadata.Rom.SizeKey);
DbFile file = null; DbFile file = null;
if(rom.SHA512 != null) if(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA512Key) != null)
{ {
if(pendingFilesBySha512.TryGetValue(rom.SHA512, out file)) if(pendingFilesBySha512.TryGetValue(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom
.SHA512Key),
out file))
{ {
if(file.Size != uSize) if(file.Size != uSize)
{ {
@@ -672,9 +686,11 @@ public sealed class DatImporter
} }
} }
if(rom.SHA384 != null && file == null) if(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA384Key) != null && file == null)
{ {
if(pendingFilesBySha384.TryGetValue(rom.SHA384, out file)) if(pendingFilesBySha384.TryGetValue(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom
.SHA384Key),
out file))
{ {
if(file.Size != uSize) if(file.Size != uSize)
{ {
@@ -684,9 +700,11 @@ public sealed class DatImporter
} }
} }
if(rom.SHA256 != null && file == null) if(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA256Key) != null && file == null)
{ {
if(pendingFilesBySha256.TryGetValue(rom.SHA256, out file)) if(pendingFilesBySha256.TryGetValue(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom
.SHA256Key),
out file))
{ {
if(file.Size != uSize) if(file.Size != uSize)
{ {
@@ -696,9 +714,10 @@ public sealed class DatImporter
} }
} }
if(rom.SHA1 != null && file == null) if(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key) != null && file == null)
{ {
if(pendingFilesBySha1.TryGetValue(rom.SHA1, out file)) if(pendingFilesBySha1.TryGetValue(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key),
out file))
{ {
if(file.Size != uSize) if(file.Size != uSize)
{ {
@@ -708,9 +727,10 @@ public sealed class DatImporter
} }
} }
if(rom.MD5 != null && file == null) if(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key) != null && file == null)
{ {
if(pendingFilesByMd5.TryGetValue(rom.MD5, out file)) if(pendingFilesByMd5.TryGetValue(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key),
out file))
{ {
if(file.Size != uSize) if(file.Size != uSize)
{ {
@@ -720,9 +740,10 @@ public sealed class DatImporter
} }
} }
if(rom.CRC != null && file == null) if(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey) != null && file == null)
{ {
if(pendingFilesByCrc.TryGetValue(rom.CRC, out file)) if(pendingFilesByCrc.TryGetValue(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey),
out file))
{ {
if(file.Size != uSize) if(file.Size != uSize)
{ {
@@ -734,36 +755,54 @@ public sealed class DatImporter
if(file == null && hashCollision) if(file == null && hashCollision)
{ {
if(rom.SHA512 != null) if(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA512Key) != null)
file = pendingFiles.FirstOrDefault(f => f.Sha512 == rom.SHA512 && f.Size == uSize); file = pendingFiles.FirstOrDefault(f => f.Sha512 ==
rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom
.SHA512Key) &&
f.Size == uSize);
if(file == null && rom.SHA384 != null) if(file == null && rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA384Key) != null)
file = pendingFiles.FirstOrDefault(f => f.Sha384 == rom.SHA384 && f.Size == uSize); file = pendingFiles.FirstOrDefault(f => f.Sha384 ==
rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom
.SHA384Key) &&
f.Size == uSize);
if(file == null && rom.SHA256 != null) if(file == null && rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA256Key) != null)
file = pendingFiles.FirstOrDefault(f => f.Sha256 == rom.SHA256 && f.Size == uSize); file = pendingFiles.FirstOrDefault(f => f.Sha256 ==
rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom
.SHA256Key) &&
f.Size == uSize);
if(file == null && rom.SHA1 != null) if(file == null && rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key) != null)
file = pendingFiles.FirstOrDefault(f => f.Sha1 == rom.SHA1 && f.Size == uSize); file = pendingFiles.FirstOrDefault(f => f.Sha1 ==
rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom
.SHA1Key) &&
f.Size == uSize);
if(file == null && rom.MD5 != null) if(file == null && rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key) != null)
file = pendingFiles.FirstOrDefault(f => f.Md5 == rom.MD5 && f.Size == uSize); file = pendingFiles.FirstOrDefault(f => f.Md5 ==
rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom
.MD5Key) &&
f.Size == uSize);
if(file == null && rom.CRC != null) if(file == null && rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey) != null)
file = pendingFiles.FirstOrDefault(f => f.Crc32 == rom.CRC && f.Size == uSize); file = pendingFiles.FirstOrDefault(f => f.Crc32 ==
rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom
.CRCKey) &&
f.Size == uSize);
} }
if(file == null) if(file == null)
{ {
file = new DbFile file = new DbFile
{ {
Crc32 = rom.CRC, Crc32 = rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey),
CreatedOn = DateTime.UtcNow, CreatedOn = DateTime.UtcNow,
Md5 = rom.MD5, Md5 = rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key),
Sha1 = rom.SHA1, Sha1 = rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key),
Sha256 = rom.SHA256, Sha256 = rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA256Key),
Sha384 = rom.SHA384, Sha384 = rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA384Key),
Sha512 = rom.SHA512, Sha512 = rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA512Key),
Size = uSize, Size = uSize,
UpdatedOn = DateTime.UtcNow UpdatedOn = DateTime.UtcNow
}; };
@@ -771,49 +810,55 @@ public sealed class DatImporter
newFiles.Add(file); newFiles.Add(file);
} }
if(string.IsNullOrEmpty(file.Crc32) && !string.IsNullOrEmpty(rom.CRC)) if(string.IsNullOrEmpty(file.Crc32) &&
!string.IsNullOrEmpty(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)))
{ {
file.Crc32 = rom.CRC; file.Crc32 = rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey);
file.UpdatedOn = DateTime.UtcNow; file.UpdatedOn = DateTime.UtcNow;
} }
if(string.IsNullOrEmpty(file.Md5) && !string.IsNullOrEmpty(rom.MD5)) if(string.IsNullOrEmpty(file.Md5) &&
!string.IsNullOrEmpty(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)))
{ {
file.Md5 = rom.MD5; file.Md5 = rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key);
file.UpdatedOn = DateTime.UtcNow; file.UpdatedOn = DateTime.UtcNow;
} }
if(string.IsNullOrEmpty(file.Sha1) && !string.IsNullOrEmpty(rom.SHA1)) if(string.IsNullOrEmpty(file.Sha1) &&
!string.IsNullOrEmpty(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)))
{ {
file.Sha1 = rom.SHA1; file.Sha1 = rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key);
file.UpdatedOn = DateTime.UtcNow; file.UpdatedOn = DateTime.UtcNow;
} }
if(string.IsNullOrEmpty(file.Sha256) && !string.IsNullOrEmpty(rom.SHA256)) if(string.IsNullOrEmpty(file.Sha256) &&
!string.IsNullOrEmpty(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA256Key)))
{ {
file.Sha256 = rom.SHA256; file.Sha256 = rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA256Key);
file.UpdatedOn = DateTime.UtcNow; file.UpdatedOn = DateTime.UtcNow;
} }
if(string.IsNullOrEmpty(file.Sha384) && !string.IsNullOrEmpty(rom.SHA384)) if(string.IsNullOrEmpty(file.Sha384) &&
!string.IsNullOrEmpty(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA384Key)))
{ {
file.Sha384 = rom.SHA384; file.Sha384 = rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA384Key);
file.UpdatedOn = DateTime.UtcNow; file.UpdatedOn = DateTime.UtcNow;
} }
if(string.IsNullOrEmpty(file.Sha512) && !string.IsNullOrEmpty(rom.SHA512)) if(string.IsNullOrEmpty(file.Sha512) &&
!string.IsNullOrEmpty(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA512Key)))
{ {
file.Sha512 = rom.SHA512; file.Sha512 = rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA512Key);
file.UpdatedOn = DateTime.UtcNow; file.UpdatedOn = DateTime.UtcNow;
} }
DateTime? fileModificationDate = null; DateTime? fileModificationDate = null;
if(!string.IsNullOrEmpty(rom.Date)) if(!string.IsNullOrEmpty(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.DateKey)))
{ {
rom.Date = rom.Date.Replace("/", "\\"); string romDate = rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.DateKey).Replace("/", "\\");
if(DateTime.TryParseExact(rom.Date, if(DateTime.TryParseExact(romDate,
@"yyyy\\M\\d H:mm", @"yyyy\\M\\d H:mm",
CultureInfo.InvariantCulture, CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal, DateTimeStyles.AssumeUniversal,
@@ -824,18 +869,21 @@ public sealed class DatImporter
string filename; string filename;
string path = null; string path = null;
if(rom.Name.Contains('\\')) if(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.NameKey).Contains('\\'))
{ {
filename = Path.GetFileName(rom.Name.Replace('\\', '/')); filename = Path.GetFileName(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.NameKey)
path = Path.GetDirectoryName(rom.Name.Replace('\\', '/')); .Replace('\\', '/'));
path = Path.GetDirectoryName(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.NameKey)
.Replace('\\', '/'));
} }
else if(rom.Name.Contains('/')) else if(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.NameKey).Contains('/'))
{ {
filename = Path.GetFileName(rom.Name); filename = Path.GetFileName(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.NameKey));
path = Path.GetDirectoryName(rom.Name); path = Path.GetDirectoryName(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.NameKey));
} }
else else
filename = rom.Name; filename = rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.NameKey);
newFilesByMachine.Add(new FileByMachine newFilesByMachine.Add(new FileByMachine
{ {
@@ -919,7 +967,9 @@ public sealed class DatImporter
Value = position Value = position
}); });
if(!machines.TryGetValue(disk.Machine.Name, out Machine machine)) if(!machines.TryGetValue(disk.GetFieldValue<SabreTools.DatItems.Machine>(DatItem.MachineKey)
?.GetStringFieldValue(SabreTools.Models.Metadata.Machine.NameKey),
out Machine machine))
{ {
ErrorOccurred?.Invoke(this, ErrorOccurred?.Invoke(this,
new ErrorEventArgs new ErrorEventArgs
@@ -930,7 +980,8 @@ public sealed class DatImporter
return; return;
} }
if(disk.MD5 == null && disk.SHA1 == null) if(disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.MD5Key) == null &&
disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.SHA1Key) == null)
{ {
position++; position++;
@@ -939,32 +990,38 @@ public sealed class DatImporter
DbDisk dbDisk = null; DbDisk dbDisk = null;
if(disk.SHA1 != null && dbDisk == null) pendingDisksBySha1.TryGetValue(disk.SHA1, out dbDisk); if(disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.SHA1Key) != null && dbDisk == null)
pendingDisksBySha1.TryGetValue(disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.SHA1Key),
out dbDisk);
if(disk.MD5 != null && dbDisk == null) pendingDisksByMd5.TryGetValue(disk.MD5, out dbDisk); if(disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.MD5Key) != null && dbDisk == null)
pendingDisksByMd5.TryGetValue(disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.MD5Key),
out dbDisk);
if(dbDisk == null) if(dbDisk == null)
{ {
dbDisk = new DbDisk dbDisk = new DbDisk
{ {
CreatedOn = DateTime.UtcNow, CreatedOn = DateTime.UtcNow,
Md5 = disk.MD5, Md5 = disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.MD5Key),
Sha1 = disk.SHA1, Sha1 = disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.SHA1Key),
UpdatedOn = DateTime.UtcNow UpdatedOn = DateTime.UtcNow
}; };
newDisks.Add(dbDisk); newDisks.Add(dbDisk);
} }
if(string.IsNullOrEmpty(dbDisk.Md5) && !string.IsNullOrEmpty(disk.MD5)) if(string.IsNullOrEmpty(dbDisk.Md5) &&
!string.IsNullOrEmpty(disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.MD5Key)))
{ {
dbDisk.Md5 = disk.MD5; dbDisk.Md5 = disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.MD5Key);
dbDisk.UpdatedOn = DateTime.UtcNow; dbDisk.UpdatedOn = DateTime.UtcNow;
} }
if(string.IsNullOrEmpty(dbDisk.Sha1) && !string.IsNullOrEmpty(disk.SHA1)) if(string.IsNullOrEmpty(dbDisk.Sha1) &&
!string.IsNullOrEmpty(disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.SHA1Key)))
{ {
dbDisk.Sha1 = disk.SHA1; dbDisk.Sha1 = disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.SHA1Key);
dbDisk.UpdatedOn = DateTime.UtcNow; dbDisk.UpdatedOn = DateTime.UtcNow;
} }
@@ -972,7 +1029,7 @@ public sealed class DatImporter
{ {
Disk = dbDisk, Disk = dbDisk,
Machine = machine, Machine = machine,
Name = disk.Name Name = disk.GetStringFieldValue(SabreTools.Models.Metadata.Media.NameKey)
}); });
if(dbDisk.Sha1 != null) pendingDisksBySha1[dbDisk.Sha1] = dbDisk; if(dbDisk.Sha1 != null) pendingDisksBySha1[dbDisk.Sha1] = dbDisk;
@@ -1033,7 +1090,9 @@ public sealed class DatImporter
Value = position Value = position
}); });
if(!machines.TryGetValue(media.Machine.Name, out Machine machine)) if(!machines.TryGetValue(media.GetFieldValue<SabreTools.DatItems.Machine>(DatItem.MachineKey)
?.GetStringFieldValue(SabreTools.Models.Metadata.Machine.NameKey),
out Machine machine))
{ {
ErrorOccurred?.Invoke(this, ErrorOccurred?.Invoke(this,
new ErrorEventArgs new ErrorEventArgs
@@ -1044,7 +1103,9 @@ public sealed class DatImporter
return; return;
} }
if(media.MD5 == null && media.SHA1 == null && media.SHA256 == null) if(media.GetStringFieldValue(SabreTools.Models.Metadata.Media.MD5Key) == null &&
media.GetStringFieldValue(SabreTools.Models.Metadata.Media.SHA1Key) == null &&
media.GetStringFieldValue(SabreTools.Models.Metadata.Media.SHA256Key) == null)
{ {
position++; position++;
@@ -1053,12 +1114,18 @@ public sealed class DatImporter
DbMedia dbMedia = null; DbMedia dbMedia = null;
if(media.SHA256 != null && dbMedia == null) if(media.GetStringFieldValue(SabreTools.Models.Metadata.Media.SHA256Key) != null && dbMedia == null)
pendingMediasBySha256.TryGetValue(media.SHA256, out dbMedia); pendingMediasBySha256.TryGetValue(media.GetStringFieldValue(SabreTools.Models.Metadata.Media
.SHA256Key),
out dbMedia);
if(media.SHA1 != null && dbMedia == null) pendingMediasBySha1.TryGetValue(media.SHA1, out dbMedia); if(media.GetStringFieldValue(SabreTools.Models.Metadata.Media.SHA1Key) != null && dbMedia == null)
pendingMediasBySha1.TryGetValue(media.GetStringFieldValue(SabreTools.Models.Metadata.Media.SHA1Key),
out dbMedia);
if(media.MD5 != null && dbMedia == null) pendingMediasByMd5.TryGetValue(media.MD5, out dbMedia); if(media.GetStringFieldValue(SabreTools.Models.Metadata.Media.MD5Key) != null && dbMedia == null)
pendingMediasByMd5.TryGetValue(media.GetStringFieldValue(SabreTools.Models.Metadata.Media.MD5Key),
out dbMedia);
// TODO: SpamSum // TODO: SpamSum
if(dbMedia == null) if(dbMedia == null)
@@ -1066,30 +1133,33 @@ public sealed class DatImporter
dbMedia = new DbMedia dbMedia = new DbMedia
{ {
CreatedOn = DateTime.UtcNow, CreatedOn = DateTime.UtcNow,
Md5 = media.MD5, Md5 = media.GetStringFieldValue(SabreTools.Models.Metadata.Media.MD5Key),
Sha1 = media.SHA1, Sha1 = media.GetStringFieldValue(SabreTools.Models.Metadata.Media.SHA1Key),
Sha256 = media.SHA256, Sha256 = media.GetStringFieldValue(SabreTools.Models.Metadata.Media.SHA256Key),
UpdatedOn = DateTime.UtcNow UpdatedOn = DateTime.UtcNow
}; };
newMedias.Add(dbMedia); newMedias.Add(dbMedia);
} }
if(string.IsNullOrEmpty(dbMedia.Md5) && !string.IsNullOrEmpty(media.MD5)) if(string.IsNullOrEmpty(dbMedia.Md5) &&
!string.IsNullOrEmpty(media.GetStringFieldValue(SabreTools.Models.Metadata.Media.MD5Key)))
{ {
dbMedia.Md5 = media.MD5; dbMedia.Md5 = media.GetStringFieldValue(SabreTools.Models.Metadata.Media.MD5Key);
dbMedia.UpdatedOn = DateTime.UtcNow; dbMedia.UpdatedOn = DateTime.UtcNow;
} }
if(string.IsNullOrEmpty(dbMedia.Sha1) && !string.IsNullOrEmpty(media.SHA1)) if(string.IsNullOrEmpty(dbMedia.Sha1) &&
!string.IsNullOrEmpty(media.GetStringFieldValue(SabreTools.Models.Metadata.Media.SHA1Key)))
{ {
dbMedia.Sha1 = media.SHA1; dbMedia.Sha1 = media.GetStringFieldValue(SabreTools.Models.Metadata.Media.SHA1Key);
dbMedia.UpdatedOn = DateTime.UtcNow; dbMedia.UpdatedOn = DateTime.UtcNow;
} }
if(string.IsNullOrEmpty(dbMedia.Sha256) && !string.IsNullOrEmpty(media.SHA256)) if(string.IsNullOrEmpty(dbMedia.Sha256) &&
!string.IsNullOrEmpty(media.GetStringFieldValue(SabreTools.Models.Metadata.Media.SHA256Key)))
{ {
dbMedia.Sha256 = media.SHA256; dbMedia.Sha256 = media.GetStringFieldValue(SabreTools.Models.Metadata.Media.SHA256Key);
dbMedia.UpdatedOn = DateTime.UtcNow; dbMedia.UpdatedOn = DateTime.UtcNow;
} }
@@ -1097,7 +1167,7 @@ public sealed class DatImporter
{ {
Media = dbMedia, Media = dbMedia,
Machine = machine, Machine = machine,
Name = media.Name Name = media.GetStringFieldValue(SabreTools.Models.Metadata.Media.NameKey)
}); });
if(dbMedia.Sha256 != null) pendingMediasBySha256[dbMedia.Sha256] = dbMedia; if(dbMedia.Sha256 != null) pendingMediasBySha256[dbMedia.Sha256] = dbMedia;

View File

@@ -8,13 +8,13 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RomRepoMgr.Settings", "RomR
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RomRepoMgr.Core", "RomRepoMgr.Core\RomRepoMgr.Core.csproj", "{1C7E7286-1BA6-43B0-A042-4A3C378BDDC1}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RomRepoMgr.Core", "RomRepoMgr.Core\RomRepoMgr.Core.csproj", "{1C7E7286-1BA6-43B0-A042-4A3C378BDDC1}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.DatFiles", "SabreTools\SabreTools.DatFiles\SabreTools.DatFiles.csproj", "{2B9EDA01-5DE1-46A7-B5EA-1994D017D7D4}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Core", "D:\repos\RomRepoMgr\SabreTools\SabreTools.Core\SabreTools.Core.csproj", "{F9FAE131-A9A0-4FC4-B3D5-19BA98CA14C1}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Core", "SabreTools\SabreTools.Core\SabreTools.Core.csproj", "{77E643AF-F6A9-45CE-B76D-0C1A4533A13E}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.DatFiles", "D:\repos\RomRepoMgr\SabreTools\SabreTools.DatFiles\SabreTools.DatFiles.csproj", "{D22CC917-BF9D-423D-8E57-0984170A8731}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.DatItems", "SabreTools\SabreTools.DatItems\SabreTools.DatItems.csproj", "{459BDA50-3AF3-4E8F-92F3-CA5A9D02A3B8}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.DatItems", "D:\repos\RomRepoMgr\SabreTools\SabreTools.DatItems\SabreTools.DatItems.csproj", "{F468E658-6CA2-4654-9354-F20AB931E441}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.FileTypes", "SabreTools\SabreTools.FileTypes\SabreTools.FileTypes.csproj", "{5FA7C8BF-BCB4-439C-B326-90DDD43B53A5}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.FileTypes", "D:\repos\RomRepoMgr\SabreTools\SabreTools.FileTypes\SabreTools.FileTypes.csproj", "{F963F3F3-A8C3-4098-9050-D4426744D900}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -38,21 +38,21 @@ Global
{1C7E7286-1BA6-43B0-A042-4A3C378BDDC1}.Debug|Any CPU.Build.0 = Debug|Any CPU {1C7E7286-1BA6-43B0-A042-4A3C378BDDC1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1C7E7286-1BA6-43B0-A042-4A3C378BDDC1}.Release|Any CPU.ActiveCfg = Release|Any CPU {1C7E7286-1BA6-43B0-A042-4A3C378BDDC1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1C7E7286-1BA6-43B0-A042-4A3C378BDDC1}.Release|Any CPU.Build.0 = Release|Any CPU {1C7E7286-1BA6-43B0-A042-4A3C378BDDC1}.Release|Any CPU.Build.0 = Release|Any CPU
{2B9EDA01-5DE1-46A7-B5EA-1994D017D7D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F9FAE131-A9A0-4FC4-B3D5-19BA98CA14C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2B9EDA01-5DE1-46A7-B5EA-1994D017D7D4}.Debug|Any CPU.Build.0 = Debug|Any CPU {F9FAE131-A9A0-4FC4-B3D5-19BA98CA14C1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2B9EDA01-5DE1-46A7-B5EA-1994D017D7D4}.Release|Any CPU.ActiveCfg = Release|Any CPU {F9FAE131-A9A0-4FC4-B3D5-19BA98CA14C1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2B9EDA01-5DE1-46A7-B5EA-1994D017D7D4}.Release|Any CPU.Build.0 = Release|Any CPU {F9FAE131-A9A0-4FC4-B3D5-19BA98CA14C1}.Release|Any CPU.Build.0 = Release|Any CPU
{77E643AF-F6A9-45CE-B76D-0C1A4533A13E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D22CC917-BF9D-423D-8E57-0984170A8731}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{77E643AF-F6A9-45CE-B76D-0C1A4533A13E}.Debug|Any CPU.Build.0 = Debug|Any CPU {D22CC917-BF9D-423D-8E57-0984170A8731}.Debug|Any CPU.Build.0 = Debug|Any CPU
{77E643AF-F6A9-45CE-B76D-0C1A4533A13E}.Release|Any CPU.ActiveCfg = Release|Any CPU {D22CC917-BF9D-423D-8E57-0984170A8731}.Release|Any CPU.ActiveCfg = Release|Any CPU
{77E643AF-F6A9-45CE-B76D-0C1A4533A13E}.Release|Any CPU.Build.0 = Release|Any CPU {D22CC917-BF9D-423D-8E57-0984170A8731}.Release|Any CPU.Build.0 = Release|Any CPU
{459BDA50-3AF3-4E8F-92F3-CA5A9D02A3B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F468E658-6CA2-4654-9354-F20AB931E441}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{459BDA50-3AF3-4E8F-92F3-CA5A9D02A3B8}.Debug|Any CPU.Build.0 = Debug|Any CPU {F468E658-6CA2-4654-9354-F20AB931E441}.Debug|Any CPU.Build.0 = Debug|Any CPU
{459BDA50-3AF3-4E8F-92F3-CA5A9D02A3B8}.Release|Any CPU.ActiveCfg = Release|Any CPU {F468E658-6CA2-4654-9354-F20AB931E441}.Release|Any CPU.ActiveCfg = Release|Any CPU
{459BDA50-3AF3-4E8F-92F3-CA5A9D02A3B8}.Release|Any CPU.Build.0 = Release|Any CPU {F468E658-6CA2-4654-9354-F20AB931E441}.Release|Any CPU.Build.0 = Release|Any CPU
{5FA7C8BF-BCB4-439C-B326-90DDD43B53A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F963F3F3-A8C3-4098-9050-D4426744D900}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5FA7C8BF-BCB4-439C-B326-90DDD43B53A5}.Debug|Any CPU.Build.0 = Debug|Any CPU {F963F3F3-A8C3-4098-9050-D4426744D900}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5FA7C8BF-BCB4-439C-B326-90DDD43B53A5}.Release|Any CPU.ActiveCfg = Release|Any CPU {F963F3F3-A8C3-4098-9050-D4426744D900}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5FA7C8BF-BCB4-439C-B326-90DDD43B53A5}.Release|Any CPU.Build.0 = Release|Any CPU {F963F3F3-A8C3-4098-9050-D4426744D900}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

View File

@@ -69,8 +69,6 @@
<ProjectReference Include="..\RomRepoMgr.Database\RomRepoMgr.Database.csproj"/> <ProjectReference Include="..\RomRepoMgr.Database\RomRepoMgr.Database.csproj"/>
<ProjectReference Include="..\RomRepoMgr.Settings\RomRepoMgr.Settings.csproj"/> <ProjectReference Include="..\RomRepoMgr.Settings\RomRepoMgr.Settings.csproj"/>
<ProjectReference Include="..\RomRepoMgr.Core\RomRepoMgr.Core.csproj"/> <ProjectReference Include="..\RomRepoMgr.Core\RomRepoMgr.Core.csproj"/>
<ProjectReference Include="..\SabreTools\SabreTools.DatFiles\SabreTools.DatFiles.csproj"/>
<ProjectReference Include="..\SabreTools\SabreTools.DatItems\SabreTools.DatItems.csproj"/>
<ProjectReference Include="..\SabreTools\SabreTools.IO\SabreTools.IO.csproj"/> <ProjectReference Include="..\SabreTools\SabreTools.IO\SabreTools.IO.csproj"/>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>