Import disks from DATs.

This commit is contained in:
2020-09-04 03:15:26 +01:00
parent 2edf6296e2
commit d6e23ca95e
4 changed files with 382 additions and 415 deletions

View File

@@ -1,7 +1,6 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -12,46 +11,32 @@ namespace RomRepoMgr.Core.Resources {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Localization {
private static global::System.Resources.ResourceManager resourceMan;
private static System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
private static System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Localization() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
internal static System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("RomRepoMgr.Core.Resources.Localization", typeof(Localization).Assembly);
if (object.Equals(null, resourceMan)) {
System.Resources.ResourceManager temp = new System.Resources.ResourceManager("RomRepoMgr.Core.Resources.Localization", typeof(Localization).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
internal static System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
@@ -60,435 +45,303 @@ namespace RomRepoMgr.Core.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Adding DAT to database....
/// </summary>
internal static string AddingDatToDatabase {
get {
return ResourceManager.GetString("AddingDatToDatabase", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Adding machines (games)....
/// </summary>
internal static string AddingMachines {
get {
return ResourceManager.GetString("AddingMachines", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Adding ROMs....
/// </summary>
internal static string AddingRoms {
get {
return ResourceManager.GetString("AddingRoms", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Assertion failed.
/// </summary>
internal static string Assertion_failed {
get {
return ResourceManager.GetString("Assertion_failed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Specified string is not valid Base32 format because character &quot;{0}&quot; does not exist in Base32 alphabet.
/// </summary>
internal static string Base32_Invalid_format {
get {
return ResourceManager.GetString("Base32_Invalid_format", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Specified string is not valid Base32 format because it doesn&apos;t have enough data to construct a complete byte array.
/// </summary>
internal static string Base32_Not_enought_data {
get {
return ResourceManager.GetString("Base32_Not_enought_data", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Cannot seek after stream end..
/// </summary>
internal static string Cannot_seek_after_end {
internal static string Base32_Invalid_format {
get {
return ResourceManager.GetString("Cannot_seek_after_end", resourceCulture);
return ResourceManager.GetString("Base32_Invalid_format", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Cannot seek before stream start..
/// </summary>
internal static string Cannot_seek_before_start {
get {
return ResourceManager.GetString("Cannot_seek_before_start", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Cannot find file with hash {0} in the repository.
/// </summary>
internal static string CannotFindHashInRepository {
internal static string Cannot_seek_after_end {
get {
return ResourceManager.GetString("CannotFindHashInRepository", resourceCulture);
return ResourceManager.GetString("Cannot_seek_after_end", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Cannot find lsar executable..
/// </summary>
internal static string CannotFindLsAr {
get {
return ResourceManager.GetString("CannotFindLsAr", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Cannot find unar executable at {0}..
/// </summary>
internal static string CannotFindUnArAtPath {
get {
return ResourceManager.GetString("CannotFindUnArAtPath", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Cannot find requested zip entry in hashes dictionary.
/// </summary>
internal static string CannotFindZipEntryInDictionary {
get {
return ResourceManager.GetString("CannotFindZipEntryInDictionary", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Cannot run lsar..
/// </summary>
internal static string CannotRunLsAr {
get {
return ResourceManager.GetString("CannotRunLsAr", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Cannot run unar..
/// </summary>
internal static string CannotRunUnAr {
get {
return ResourceManager.GetString("CannotRunUnAr", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Checking if file is an archive....
/// </summary>
internal static string CheckingIfFIleIsAnArchive {
get {
return ResourceManager.GetString("CheckingIfFIleIsAnArchive", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Compressing {0}....
/// </summary>
internal static string Compressing {
get {
return ResourceManager.GetString("Compressing", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Compressing DAT file....
/// </summary>
internal static string CompressingDatFile {
get {
return ResourceManager.GetString("CompressingDatFile", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Compressing file....
/// </summary>
internal static string CompressingFile {
get {
return ResourceManager.GetString("CompressingFile", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Could not find ROM set in database..
/// </summary>
internal static string CouldNotFindRomSetInDatabase {
get {
return ResourceManager.GetString("CouldNotFindRomSetInDatabase", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to File exists.
/// </summary>
internal static string DatabaseFileExistsMsgBoxTitle {
get {
return ResourceManager.GetString("DatabaseFileExistsMsgBoxTitle", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to DAT file is already in database, not importing duplicates..
/// </summary>
internal static string DatAlreadyInDatabase {
get {
return ResourceManager.GetString("DatAlreadyInDatabase", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Enumerating files....
/// </summary>
internal static string EnumeratingFiles {
get {
return ResourceManager.GetString("EnumeratingFiles", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Error: {0}.
/// </summary>
internal static string ErrorWithMessage {
get {
return ResourceManager.GetString("ErrorWithMessage", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Exporting ROMs....
/// </summary>
internal static string ExportingRoms {
get {
return ResourceManager.GetString("ExportingRoms", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Extracted contents.
/// </summary>
internal static string ExtractedContents {
get {
return ResourceManager.GetString("ExtractedContents", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Extracting archive contents....
/// </summary>
internal static string ExtractingArchive {
get {
return ResourceManager.GetString("ExtractingArchive", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Finished.
/// </summary>
internal static string Finished {
get {
return ResourceManager.GetString("Finished", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Finishing....
/// </summary>
internal static string Finishing {
get {
return ResourceManager.GetString("Finishing", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Found a ROM with an unknown machine, this should not happen..
/// </summary>
internal static string FoundRomWithoutMachine {
get {
return ResourceManager.GetString("FoundRomWithoutMachine", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Getting machine (game) names....
/// </summary>
internal static string GettingMachineNames {
get {
return ResourceManager.GetString("GettingMachineNames", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Hashing DAT file....
/// </summary>
internal static string HashingDatFile {
get {
return ResourceManager.GetString("HashingDatFile", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Hashing file....
/// </summary>
internal static string HashingFile {
get {
return ResourceManager.GetString("HashingFile", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Importing {0}....
/// </summary>
internal static string Importing {
get {
return ResourceManager.GetString("Importing", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Not yet implemented..
/// </summary>
internal static string Not_yet_implemented {
get {
return ResourceManager.GetString("Not_yet_implemented", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Not the correct lsar executable.
/// </summary>
internal static string NotCorrectLsAr {
get {
return ResourceManager.GetString("NotCorrectLsAr", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Not the correct unar executable.
/// </summary>
internal static string NotCorrectUnAr {
get {
return ResourceManager.GetString("NotCorrectUnAr", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to OK.
/// </summary>
internal static string OK {
get {
return ResourceManager.GetString("OK", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Parsing DAT file....
/// </summary>
internal static string ParsinDatFile {
get {
return ResourceManager.GetString("ParsinDatFile", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Removing temporary path....
/// </summary>
internal static string RemovingTemporaryPath {
get {
return ResourceManager.GetString("RemovingTemporaryPath", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Retrieving ROMs and disks....
/// </summary>
internal static string RetrievingRomsAndDisks {
get {
return ResourceManager.GetString("RetrievingRomsAndDisks", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Retrieving ROM set from database..
/// </summary>
internal static string RetrievingRomSetFromDatabase {
get {
return ResourceManager.GetString("RetrievingRomSetFromDatabase", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Saving changes to database....
/// </summary>
internal static string SavingChangesToDatabase {
get {
return ResourceManager.GetString("SavingChangesToDatabase", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The input exceeds data types..
/// </summary>
internal static string Spamsum_Input_exceeds_data {
get {
return ResourceManager.GetString("Spamsum_Input_exceeds_data", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to SpamSum does not have a binary representation..
/// </summary>
internal static string Spamsum_no_binary {
get {
return ResourceManager.GetString("Spamsum_no_binary", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to unar path is not set..
/// </summary>
internal static string Assertion_failed {
get {
return ResourceManager.GetString("Assertion_failed", resourceCulture);
}
}
internal static string Spamsum_Input_exceeds_data {
get {
return ResourceManager.GetString("Spamsum_Input_exceeds_data", resourceCulture);
}
}
internal static string Not_yet_implemented {
get {
return ResourceManager.GetString("Not_yet_implemented", resourceCulture);
}
}
internal static string DatabaseFileExistsMsgBoxTitle {
get {
return ResourceManager.GetString("DatabaseFileExistsMsgBoxTitle", resourceCulture);
}
}
internal static string UnArPathNotSet {
get {
return ResourceManager.GetString("UnArPathNotSet", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Unhandled exception occurred..
/// </summary>
internal static string CannotFindUnArAtPath {
get {
return ResourceManager.GetString("CannotFindUnArAtPath", resourceCulture);
}
}
internal static string CannotFindLsAr {
get {
return ResourceManager.GetString("CannotFindLsAr", resourceCulture);
}
}
internal static string CannotRunUnAr {
get {
return ResourceManager.GetString("CannotRunUnAr", resourceCulture);
}
}
internal static string CannotRunLsAr {
get {
return ResourceManager.GetString("CannotRunLsAr", resourceCulture);
}
}
internal static string NotCorrectUnAr {
get {
return ResourceManager.GetString("NotCorrectUnAr", resourceCulture);
}
}
internal static string NotCorrectLsAr {
get {
return ResourceManager.GetString("NotCorrectLsAr", resourceCulture);
}
}
internal static string ParsinDatFile {
get {
return ResourceManager.GetString("ParsinDatFile", resourceCulture);
}
}
internal static string HashingDatFile {
get {
return ResourceManager.GetString("HashingDatFile", resourceCulture);
}
}
internal static string DatAlreadyInDatabase {
get {
return ResourceManager.GetString("DatAlreadyInDatabase", resourceCulture);
}
}
internal static string AddingDatToDatabase {
get {
return ResourceManager.GetString("AddingDatToDatabase", resourceCulture);
}
}
internal static string CompressingDatFile {
get {
return ResourceManager.GetString("CompressingDatFile", resourceCulture);
}
}
internal static string GettingMachineNames {
get {
return ResourceManager.GetString("GettingMachineNames", resourceCulture);
}
}
internal static string AddingMachines {
get {
return ResourceManager.GetString("AddingMachines", resourceCulture);
}
}
internal static string SavingChangesToDatabase {
get {
return ResourceManager.GetString("SavingChangesToDatabase", resourceCulture);
}
}
internal static string RetrievingRomsAndDisks {
get {
return ResourceManager.GetString("RetrievingRomsAndDisks", resourceCulture);
}
}
internal static string AddingRoms {
get {
return ResourceManager.GetString("AddingRoms", resourceCulture);
}
}
internal static string FoundRomWithoutMachine {
get {
return ResourceManager.GetString("FoundRomWithoutMachine", resourceCulture);
}
}
internal static string UnhandledException {
get {
return ResourceManager.GetString("UnhandledException", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Unhandled exception when importing file..
/// </summary>
internal static string RetrievingRomSetFromDatabase {
get {
return ResourceManager.GetString("RetrievingRomSetFromDatabase", resourceCulture);
}
}
internal static string CouldNotFindRomSetInDatabase {
get {
return ResourceManager.GetString("CouldNotFindRomSetInDatabase", resourceCulture);
}
}
internal static string ExportingRoms {
get {
return ResourceManager.GetString("ExportingRoms", resourceCulture);
}
}
internal static string Finished {
get {
return ResourceManager.GetString("Finished", resourceCulture);
}
}
internal static string CannotFindZipEntryInDictionary {
get {
return ResourceManager.GetString("CannotFindZipEntryInDictionary", resourceCulture);
}
}
internal static string CannotFindHashInRepository {
get {
return ResourceManager.GetString("CannotFindHashInRepository", resourceCulture);
}
}
internal static string Compressing {
get {
return ResourceManager.GetString("Compressing", resourceCulture);
}
}
internal static string EnumeratingFiles {
get {
return ResourceManager.GetString("EnumeratingFiles", resourceCulture);
}
}
internal static string Importing {
get {
return ResourceManager.GetString("Importing", resourceCulture);
}
}
internal static string CheckingIfFIleIsAnArchive {
get {
return ResourceManager.GetString("CheckingIfFIleIsAnArchive", resourceCulture);
}
}
internal static string OK {
get {
return ResourceManager.GetString("OK", resourceCulture);
}
}
internal static string ErrorWithMessage {
get {
return ResourceManager.GetString("ErrorWithMessage", resourceCulture);
}
}
internal static string ExtractingArchive {
get {
return ResourceManager.GetString("ExtractingArchive", resourceCulture);
}
}
internal static string RemovingTemporaryPath {
get {
return ResourceManager.GetString("RemovingTemporaryPath", resourceCulture);
}
}
internal static string ExtractedContents {
get {
return ResourceManager.GetString("ExtractedContents", resourceCulture);
}
}
internal static string HashingFile {
get {
return ResourceManager.GetString("HashingFile", resourceCulture);
}
}
internal static string UnknownFile {
get {
return ResourceManager.GetString("UnknownFile", resourceCulture);
}
}
internal static string CompressingFile {
get {
return ResourceManager.GetString("CompressingFile", resourceCulture);
}
}
internal static string Finishing {
get {
return ResourceManager.GetString("Finishing", resourceCulture);
}
}
internal static string UnhandledExceptionWhenImporting {
get {
return ResourceManager.GetString("UnhandledExceptionWhenImporting", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Unknown file..
/// </summary>
internal static string UnknownFile {
internal static string AddingDisks {
get {
return ResourceManager.GetString("UnknownFile", resourceCulture);
return ResourceManager.GetString("AddingDisks", resourceCulture);
}
}
internal static string FoundDiskWithoutMachine {
get {
return ResourceManager.GetString("FoundDiskWithoutMachine", resourceCulture);
}
}
}

View File

@@ -155,4 +155,10 @@
<data name="UnknownFile" xml:space="preserve">
<value>Archivo desconocido.</value>
</data>
<data name="AddingDisks" xml:space="preserve">
<value>Añadiendo discos...</value>
</data>
<data name="FoundDiskWithoutMachine" xml:space="preserve">
<value>Se encontró un disco sin máquina, esto no debería pasar.</value>
</data>
</root>

View File

@@ -160,4 +160,10 @@
<data name="UnhandledExceptionWhenImporting" xml:space="preserve">
<value>Unhandled exception when importing file.</value>
</data>
<data name="AddingDisks" xml:space="preserve">
<value>Adding disks...</value>
</data>
<data name="FoundDiskWithoutMachine" xml:space="preserve">
<value>Found a disk with an unknown machine, this should not happen.</value>
</data>
</root>

View File

@@ -354,8 +354,6 @@ namespace RomRepoMgr.Core.Workers
};
newFiles.Add(file);
//Context.Singleton.Files.Add(file);
}
if(string.IsNullOrEmpty(file.Crc32) &&
@@ -453,12 +451,116 @@ namespace RomRepoMgr.Core.Workers
Maximum = disks.Count
});
// TODO: Support CHDs
SetMessage?.Invoke(this, new MessageEventArgs
{
Message = "Adding disks..."
Message = Localization.AddingDisks
});
position = 0;
Dictionary<string, DbDisk> pendingDisksBySha1 = new Dictionary<string, DbDisk>();
Dictionary<string, DbDisk> pendingDisksByMd5 = new Dictionary<string, DbDisk>();
List<DbDisk> newDisks = new List<DbDisk>();
List<DiskByMachine> newDisksByMachine = new List<DiskByMachine>();
foreach(Disk disk in disks)
{
SetProgress?.Invoke(this, new ProgressEventArgs
{
Value = position
});
if(!machines.TryGetValue(disk.Machine.Name, out Machine machine))
{
ErrorOccurred?.Invoke(this, new ErrorEventArgs
{
Message = Localization.FoundDiskWithoutMachine
});
return;
}
if(disk.MD5 == null &&
disk.SHA1 == null)
{
position++;
continue;
}
DbDisk dbDisk = null;
if(disk.SHA1 != null &&
dbDisk == null)
pendingDisksBySha1.TryGetValue(disk.SHA1, out dbDisk);
if(disk.MD5 != null &&
dbDisk == null)
pendingDisksByMd5.TryGetValue(disk.MD5, out dbDisk);
dbDisk ??= Context.Singleton.Disks.FirstOrDefault(f => (disk.SHA1 != null && f.Sha1 == disk.SHA1) ||
(disk.MD5 != null && f.Md5 == disk.MD5));
if(dbDisk == null)
{
dbDisk = new DbDisk
{
CreatedOn = DateTime.UtcNow,
Md5 = disk.MD5,
Sha1 = disk.SHA1,
UpdatedOn = DateTime.UtcNow
};
newDisks.Add(dbDisk);
}
if(string.IsNullOrEmpty(dbDisk.Md5) &&
!string.IsNullOrEmpty(disk.MD5))
{
dbDisk.Md5 = disk.MD5;
dbDisk.UpdatedOn = DateTime.UtcNow;
}
if(string.IsNullOrEmpty(dbDisk.Sha1) &&
!string.IsNullOrEmpty(disk.SHA1))
{
dbDisk.Sha1 = disk.SHA1;
dbDisk.UpdatedOn = DateTime.UtcNow;
}
newDisksByMachine.Add(new DiskByMachine
{
Disk = dbDisk,
Machine = machine,
Name = disk.Name
});
if(dbDisk.Sha1 != null)
pendingDisksBySha1[dbDisk.Sha1] = dbDisk;
if(dbDisk.Md5 != null)
pendingDisksByMd5[dbDisk.Md5] = dbDisk;
position++;
}
SetMessage?.Invoke(this, new MessageEventArgs
{
Message = Localization.SavingChangesToDatabase
});
SetIndeterminateProgress?.Invoke(this, System.EventArgs.Empty);
Context.Singleton.Disks.AddRange(newDisks);
Context.Singleton.DisksByMachines.AddRange(newDisksByMachine);
Context.Singleton.SaveChanges();
pendingDisksBySha1.Clear();
pendingDisksByMd5.Clear();
newDisks.Clear();
newDisksByMachine.Clear();
WorkFinished?.Invoke(this, System.EventArgs.Empty);
romSet = Context.Singleton.RomSets.Find(romSet.Id);