10 Commits

8 changed files with 45 additions and 30 deletions

View File

@@ -1464,6 +1464,7 @@ dotnet_diagnostic.ph2045.severity = none
dotnet_diagnostic.ph2067.severity = none
dotnet_diagnostic.ph2068.severity = none
dotnet_diagnostic.ph2069.severity = warning
dotnet_diagnostic.ph2070.severity = warning
dotnet_diagnostic.ph2075.severity = none
dotnet_diagnostic.ph2079.severity = none
dotnet_diagnostic.ph2081.severity = none
@@ -1477,6 +1478,7 @@ dotnet_diagnostic.ph2098.severity = warning
dotnet_diagnostic.ph2101.severity = warning
dotnet_diagnostic.ph2102.severity = none
dotnet_diagnostic.mt1001.severity = warning
dotnet_diagnostic.mt1002.severity = warning
[*.{razor}]
resharper_normalize_tag_names = false

View File

@@ -19,10 +19,10 @@
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite.Design" Version="2.0.0-preview1-final"/>
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.6"/>
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="9.0.6"/>
<PackageVersion Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.10.48"/>
<PackageVersion Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.14.15"/>
<PackageVersion Include="Microsoft.Win32.Registry" Version="5.0.0"/>
<PackageVersion Include="Mono.Fuse.NETStandard" Version="1.1.0"/>
<PackageVersion Include="Philips.CodeAnalysis.MaintainabilityAnalyzers" Version="1.5.0"/>
<PackageVersion Include="Philips.CodeAnalysis.MaintainabilityAnalyzers" Version="1.6.3"/>
<PackageVersion Include="plist-cil" Version="2.2.0"/>
<PackageVersion Include="Roslynator.Analyzers" Version="4.13.1"/>
<PackageVersion Include="Roslynator.CodeAnalysis.Analyzers" Version="4.13.1"/>
@@ -33,6 +33,7 @@
<PackageVersion Include="System.Security.Principal.Windows" Version="5.0.0"/>
<PackageVersion Include="Text.Analyzers" Version="4.14.0"/>
<PackageVersion Include="winfsp.net" Version="2.1.25156"/>
<PackageVersion Include="SkiaSharp.NativeAssets.Linux" Version="3.116.1" Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))'" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3"/>
<PackageVersion Include="SabreTools.Hashing" Version="1.2.3"/>

View File

@@ -25,6 +25,7 @@
<ProjectReference Include="..\RomRepoMgr.Settings\RomRepoMgr.Settings.csproj"/>
<ProjectReference Include="..\SabreTools\SabreTools.DatFiles\SabreTools.DatFiles.csproj"/>
<ProjectReference Include="..\SabreTools\SabreTools.DatItems\SabreTools.DatItems.csproj"/>
<ProjectReference Include="..\SabreTools\SabreTools.DatTools\SabreTools.DatTools.csproj" />
<ProjectReference Include="..\SabreTools\SabreTools.FileTypes\SabreTools.FileTypes.csproj"/>
</ItemGroup>

View File

@@ -39,6 +39,7 @@ using RomRepoMgr.Core.Resources;
using RomRepoMgr.Database;
using RomRepoMgr.Database.Models;
using SabreTools.DatFiles;
using SabreTools.DatTools;
using SabreTools.Models.Metadata;
using DatItem = SabreTools.DatItems.DatItem;
using Disk = SabreTools.DatItems.Formats.Disk;
@@ -79,8 +80,8 @@ public sealed class DatImporter
Message = Localization.ParsinDatFile
});
var datFile = DatFile.Create();
datFile.ParseFile(_datPath, 0, false, true);
DatFile datFile = Parser.ParseStatistics(_datPath);
Parser.ParseInto(datFile, _datPath, throwOnError: true);
SetMessage?.Invoke(this,
new MessageEventArgs
@@ -151,14 +152,7 @@ public sealed class DatImporter
Message = Localization.GettingMachineNames
});
var machineNames = (from value in datFile.Items.Values
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();
var machineNames = datFile.Items.SortedKeys.Distinct().ToList();
SetMessage?.Invoke(this,
new MessageEventArgs
@@ -251,7 +245,7 @@ public sealed class DatImporter
new ProgressBoundsEventArgs
{
Minimum = 0,
Maximum = datFile.Items.Values.Count
Maximum = datFile.Items.SortedKeys.Length
});
using(DbTransaction dbTransaction = dbConnection.BeginTransaction())
@@ -308,7 +302,7 @@ public sealed class DatImporter
dbcc.CommandText = $"CREATE TABLE \"{tmpMediaSha256Table}\" (\"Sha256\" TEXT NOT NULL);";
dbcc.ExecuteNonQuery();
foreach(List<DatItem> values in datFile.Items.Values)
foreach(string key in datFile.Items.SortedKeys)
{
SetProgress?.Invoke(this,
new ProgressEventArgs
@@ -316,7 +310,7 @@ public sealed class DatImporter
Value = position
});
foreach(DatItem item in values)
foreach(DatItem item in datFile.GetItemsForBucket(key))
{
switch(item)
{
@@ -477,76 +471,76 @@ public sealed class DatImporter
List<DbFile> pendingFilesByCrcList = romsHaveCrc
? ctx.Files
.FromSql($"SELECT DISTINCT f.* FROM Files AS f, [{tmpRomCrc32Table}] AS t WHERE f.Crc32 = t.Crc32 AND f.Size = t.Size")
.FromSqlRaw($"SELECT DISTINCT f.* FROM Files AS f, [{tmpRomCrc32Table}] AS t WHERE f.Crc32 = t.Crc32 AND f.Size = t.Size")
.ToList()
: [];
List<DbFile> pendingFilesByMd5List = romsHaveMd5
? ctx.Files
.FromSql($"SELECT DISTINCT f.* FROM Files AS f, [{tmpRomMd5Table}] AS t WHERE f.Md5 = t.Md5 AND f.Size = t.Size")
.FromSqlRaw($"SELECT DISTINCT f.* FROM Files AS f, [{tmpRomMd5Table}] AS t WHERE f.Md5 = t.Md5 AND f.Size = t.Size")
.ToList()
: [];
List<DbFile> pendingFilesBySha1List =
romsHaveSha1
? ctx.Files
.FromSql($"SELECT DISTINCT f.* FROM Files AS f, [{tmpRomSha1Table}] AS t WHERE f.Sha1 = t.Sha1 AND f.Size = t.Size")
.FromSqlRaw($"SELECT DISTINCT f.* FROM Files AS f, [{tmpRomSha1Table}] AS t WHERE f.Sha1 = t.Sha1 AND f.Size = t.Size")
.ToList()
: [];
List<DbFile> pendingFilesBySha256List =
romsHaveSha256
? ctx.Files
.FromSql($"SELECT DISTINCT f.* FROM Files AS f, [{tmpRomSha256Table}] AS t WHERE f.Sha256 = t.Sha256 AND f.Size = t.Size")
.FromSqlRaw($"SELECT DISTINCT f.* FROM Files AS f, [{tmpRomSha256Table}] AS t WHERE f.Sha256 = t.Sha256 AND f.Size = t.Size")
.ToList()
: [];
List<DbFile> pendingFilesBySha384List =
romsHaveSha384
? ctx.Files
.FromSql($"SELECT DISTINCT f.* FROM Files AS f, [{tmpRomSha384Table}] AS t WHERE f.Sha384 = t.Sha384 AND f.Size = t.Size")
.FromSqlRaw($"SELECT DISTINCT f.* FROM Files AS f, [{tmpRomSha384Table}] AS t WHERE f.Sha384 = t.Sha384 AND f.Size = t.Size")
.ToList()
: [];
List<DbFile> pendingFilesBySha512List =
romsHaveSha512
? ctx.Files
.FromSql($"SELECT DISTINCT f.* FROM Files AS f, [{tmpRomSha512Table}] AS t WHERE f.Sha512 = t.Sha512 AND f.Size = t.Size")
.FromSqlRaw($"SELECT DISTINCT f.* FROM Files AS f, [{tmpRomSha512Table}] AS t WHERE f.Sha512 = t.Sha512 AND f.Size = t.Size")
.ToList()
: [];
Dictionary<string, DbDisk> pendingDisksByMd5 =
disksHaveMd5
? ctx.Disks
.FromSql($"SELECT DISTINCT f.* FROM Disks AS f, [{tmpDiskMd5Table}] AS t WHERE f.Md5 = t.Md5")
.FromSqlRaw($"SELECT DISTINCT f.* FROM Disks AS f, [{tmpDiskMd5Table}] AS t WHERE f.Md5 = t.Md5")
.ToDictionary(f => f.Md5)
: new Dictionary<string, DbDisk>();
Dictionary<string, DbDisk> pendingDisksBySha1 =
disksHaveSha1
? ctx.Disks
.FromSql($"SELECT DISTINCT f.* FROM Disks AS f, [{tmpDiskSha1Table}] AS t WHERE f.Sha1 = t.Sha1")
.FromSqlRaw($"SELECT DISTINCT f.* FROM Disks AS f, [{tmpDiskSha1Table}] AS t WHERE f.Sha1 = t.Sha1")
.ToDictionary(f => f.Sha1)
: new Dictionary<string, DbDisk>();
Dictionary<string, DbMedia> pendingMediasByMd5 =
mediasHaveMd5
? ctx.Medias
.FromSql($"SELECT DISTINCT f.* FROM Medias AS f, [{tmpMediaMd5Table}] AS t WHERE f.Md5 = t.Md5")
.FromSqlRaw($"SELECT DISTINCT f.* FROM Medias AS f, [{tmpMediaMd5Table}] AS t WHERE f.Md5 = t.Md5")
.ToDictionary(f => f.Md5)
: new Dictionary<string, DbMedia>();
Dictionary<string, DbMedia> pendingMediasBySha1 =
mediasHaveSha1
? ctx.Medias
.FromSql($"SELECT DISTINCT f.* FROM Medias AS f, [{tmpMediaSha1Table}] AS t WHERE f.Sha1 = t.Sha1")
.FromSqlRaw($"SELECT DISTINCT f.* FROM Medias AS f, [{tmpMediaSha1Table}] AS t WHERE f.Sha1 = t.Sha1")
.ToDictionary(f => f.Sha1)
: new Dictionary<string, DbMedia>();
Dictionary<string, DbMedia> pendingMediasBySha256 =
mediasHaveSha256
? ctx.Medias
.FromSql($"SELECT DISTINCT f.* FROM Medias AS f, [{tmpMediaSha256Table}] AS t WHERE f.Sha256 = t.Sha256")
.FromSqlRaw($"SELECT DISTINCT f.* FROM Medias AS f, [{tmpMediaSha256Table}] AS t WHERE f.Sha256 = t.Sha256")
.ToDictionary(f => f.Sha256)
: new Dictionary<string, DbMedia>();
@@ -656,7 +650,8 @@ public sealed class DatImporter
});
if(!machines.TryGetValue(rom.GetFieldValue<SabreTools.DatItems.Machine>(DatItem.MachineKey)
?.GetStringFieldValue(SabreTools.Models.Metadata.Machine.NameKey),
?.GetStringFieldValue(SabreTools.Models.Metadata.Machine.NameKey)
?.ToLowerInvariant(),
out Machine machine))
{
ErrorOccurred?.Invoke(this,
@@ -977,7 +972,8 @@ public sealed class DatImporter
});
if(!machines.TryGetValue(disk.GetFieldValue<SabreTools.DatItems.Machine>(DatItem.MachineKey)
?.GetStringFieldValue(SabreTools.Models.Metadata.Machine.NameKey),
?.GetStringFieldValue(SabreTools.Models.Metadata.Machine.NameKey)
?.ToLowerInvariant(),
out Machine machine))
{
ErrorOccurred?.Invoke(this,
@@ -1104,7 +1100,8 @@ public sealed class DatImporter
});
if(!machines.TryGetValue(media.GetFieldValue<SabreTools.DatItems.Machine>(DatItem.MachineKey)
?.GetStringFieldValue(SabreTools.Models.Metadata.Machine.NameKey),
?.GetStringFieldValue(SabreTools.Models.Metadata.Machine.NameKey)
?.ToLowerInvariant(),
out Machine machine))
{
ErrorOccurred?.Invoke(this,

View File

@@ -28,6 +28,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution items", "Solution
Directory.Packages.props = Directory.Packages.props
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.DatTools", "SabreTools\SabreTools.DatTools\SabreTools.DatTools.csproj", "{20CC9ED6-9F56-49B5-A265-DC246C424F27}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Reports", "SabreTools\SabreTools.Reports\SabreTools.Reports.csproj", "{E73767A7-0A65-4F89-B149-A520874F7B32}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -66,5 +70,13 @@ Global
{F963F3F3-A8C3-4098-9050-D4426744D900}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F963F3F3-A8C3-4098-9050-D4426744D900}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F963F3F3-A8C3-4098-9050-D4426744D900}.Release|Any CPU.Build.0 = Release|Any CPU
{20CC9ED6-9F56-49B5-A265-DC246C424F27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{20CC9ED6-9F56-49B5-A265-DC246C424F27}.Debug|Any CPU.Build.0 = Debug|Any CPU
{20CC9ED6-9F56-49B5-A265-DC246C424F27}.Release|Any CPU.ActiveCfg = Release|Any CPU
{20CC9ED6-9F56-49B5-A265-DC246C424F27}.Release|Any CPU.Build.0 = Release|Any CPU
{E73767A7-0A65-4F89-B149-A520874F7B32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E73767A7-0A65-4F89-B149-A520874F7B32}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E73767A7-0A65-4F89-B149-A520874F7B32}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E73767A7-0A65-4F89-B149-A520874F7B32}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View File

@@ -7,6 +7,7 @@
</Application.DataTemplates>
<Application.Styles>
<FluentTheme />
<StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml"/>
</Application.Styles>
<NativeMenu.Menu>
<NativeMenu>

View File

@@ -33,6 +33,7 @@
<PackageReference Include="Roslynator.Analyzers"/>
<PackageReference Include="Roslynator.CodeAnalysis.Analyzers"/>
<PackageReference Include="Roslynator.Formatting.Analyzers"/>
<PackageReference Include="SkiaSharp.NativeAssets.Linux" />
<PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer"/>
<PackageReference Include="Text.Analyzers"/>
</ItemGroup>