mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Checkpoint (nw)
This commit is contained in:
@@ -256,8 +256,8 @@ namespace SabreTools.Library.DatFiles
|
||||
if (updateFields.Intersect(DatItem.DatItemFields).Any())
|
||||
{
|
||||
// For comparison's sake, we want to use CRC as the base bucketing
|
||||
Items.BucketBy(Field.CRC, DedupeType.Full);
|
||||
intDat.Items.BucketBy(Field.CRC, DedupeType.None);
|
||||
Items.BucketBy(Field.DatItem_CRC, DedupeType.Full);
|
||||
intDat.Items.BucketBy(Field.DatItem_CRC, DedupeType.None);
|
||||
|
||||
// Then we do a hashwise comparison against the base DAT
|
||||
Parallel.ForEach(intDat.Items.Keys, Globals.ParallelOptions, key =>
|
||||
@@ -362,7 +362,7 @@ namespace SabreTools.Library.DatFiles
|
||||
if (useGames)
|
||||
Items.BucketBy(Field.Machine_Name, DedupeType.None);
|
||||
else
|
||||
Items.BucketBy(Field.CRC, DedupeType.None);
|
||||
Items.BucketBy(Field.DatItem_CRC, DedupeType.None);
|
||||
|
||||
// Now we want to compare each input DAT against the base
|
||||
foreach (ParentablePath path in inputs)
|
||||
@@ -379,7 +379,7 @@ namespace SabreTools.Library.DatFiles
|
||||
if (useGames)
|
||||
intDat.Items.BucketBy(Field.Machine_Name, DedupeType.None);
|
||||
else
|
||||
intDat.Items.BucketBy(Field.CRC, DedupeType.Full);
|
||||
intDat.Items.BucketBy(Field.DatItem_CRC, DedupeType.Full);
|
||||
|
||||
// Then we compare against the base DAT
|
||||
List<string> keys = intDat.Items.Keys.ToList();
|
||||
@@ -508,7 +508,7 @@ namespace SabreTools.Library.DatFiles
|
||||
watch.Stop();
|
||||
|
||||
// Then, ensure that the internal dat can be bucketed in the best possible way
|
||||
Items.BucketBy(Field.CRC, DedupeType.None);
|
||||
Items.BucketBy(Field.DatItem_CRC, DedupeType.None);
|
||||
|
||||
// Now, loop through the dictionary and populate the correct DATs
|
||||
watch.Start("Populating all output DATs");
|
||||
@@ -1957,7 +1957,7 @@ namespace SabreTools.Library.DatFiles
|
||||
|
||||
// If the output type isn't set already, get the internal output type
|
||||
Header.DatFormat = (Header.DatFormat == 0 ? currentPath.GetDatFormat() : Header.DatFormat);
|
||||
Items.SetBucketedBy(Field.CRC); // Setting this because it can reduce issues later
|
||||
Items.SetBucketedBy(Field.DatItem_CRC); // Setting this because it can reduce issues later
|
||||
|
||||
// Now parse the correct type of DAT
|
||||
try
|
||||
@@ -2083,7 +2083,7 @@ namespace SabreTools.Library.DatFiles
|
||||
}
|
||||
|
||||
// Get the key and add the file
|
||||
key = item.GetKey(Field.CRC);
|
||||
key = item.GetKey(Field.DatItem_CRC);
|
||||
Items.Add(key, item);
|
||||
|
||||
return key;
|
||||
@@ -2255,7 +2255,7 @@ namespace SabreTools.Library.DatFiles
|
||||
{
|
||||
// Add the list if it doesn't exist already
|
||||
Rom rom = new Rom(baseFile);
|
||||
Items.Add(rom.GetKey(Field.CRC), rom);
|
||||
Items.Add(rom.GetKey(Field.DatItem_CRC), rom);
|
||||
Globals.Logger.User($"File added: {Path.GetFileNameWithoutExtension(item)}{Environment.NewLine}");
|
||||
}
|
||||
else
|
||||
@@ -2379,7 +2379,7 @@ namespace SabreTools.Library.DatFiles
|
||||
SetDatItemInfo(datItem, item, parent, basepath);
|
||||
|
||||
// Add the file information to the DAT
|
||||
string key = datItem.GetKey(Field.CRC);
|
||||
string key = datItem.GetKey(Field.DatItem_CRC);
|
||||
Items.Add(key, datItem);
|
||||
|
||||
Globals.Logger.User($"File added: {datItem.Name}{Environment.NewLine}");
|
||||
@@ -2571,7 +2571,7 @@ namespace SabreTools.Library.DatFiles
|
||||
return success;
|
||||
|
||||
// Now that we have a list of depots, we want to bucket the input DAT by SHA-1
|
||||
Items.BucketBy(Field.SHA1, DedupeType.None);
|
||||
Items.BucketBy(Field.DatItem_SHA1, DedupeType.None);
|
||||
|
||||
// Then we want to loop through each of the hashes and see if we can rebuild
|
||||
var keys = Items.SortedKeys.ToList();
|
||||
@@ -3143,7 +3143,7 @@ namespace SabreTools.Library.DatFiles
|
||||
return success;
|
||||
|
||||
// Now that we have a list of depots, we want to bucket the input DAT by SHA-1
|
||||
Items.BucketBy(Field.SHA1, DedupeType.None);
|
||||
Items.BucketBy(Field.DatItem_SHA1, DedupeType.None);
|
||||
|
||||
// Then we want to loop through each of the hashes and see if we can rebuild
|
||||
var keys = Items.SortedKeys.ToList();
|
||||
@@ -3247,7 +3247,7 @@ namespace SabreTools.Library.DatFiles
|
||||
if (hashOnly)
|
||||
{
|
||||
// First we need to bucket and dedupe by hash to get duplicates
|
||||
Items.BucketBy(Field.CRC, DedupeType.Full);
|
||||
Items.BucketBy(Field.DatItem_CRC, DedupeType.Full);
|
||||
|
||||
// Then follow the same tactics as before
|
||||
var keys = Items.SortedKeys.ToList();
|
||||
@@ -3770,7 +3770,7 @@ namespace SabreTools.Library.DatFiles
|
||||
|
||||
// Bucket and dedupe according to the flag
|
||||
if (Header.DedupeRoms == DedupeType.Full)
|
||||
Items.BucketBy(Field.CRC, Header.DedupeRoms, norename: norename);
|
||||
Items.BucketBy(Field.DatItem_CRC, Header.DedupeRoms, norename: norename);
|
||||
else if (Header.DedupeRoms == DedupeType.Game)
|
||||
Items.BucketBy(Field.Machine_Name, Header.DedupeRoms, norename: norename);
|
||||
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
using SabreTools.Library.DatItems;
|
||||
using SabreTools.Library.IO;
|
||||
using SabreTools.Library.Tools;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace SabreTools.Library.DatFiles
|
||||
@@ -382,6 +384,133 @@ namespace SabreTools.Library.DatFiles
|
||||
|
||||
#region Instance Methods
|
||||
|
||||
#region Accessors
|
||||
|
||||
/// <summary>
|
||||
/// Set fields with given values
|
||||
/// </summary>
|
||||
/// <param name="mappings">Mappings dictionary</param>
|
||||
public void SetFields(Dictionary<Field, string> mappings)
|
||||
{
|
||||
#region Common
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_FileName))
|
||||
FileName = mappings[Field.DatHeader_FileName];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_Name))
|
||||
Name = mappings[Field.DatHeader_Name];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_Description))
|
||||
Description = mappings[Field.DatHeader_Description];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_RootDir))
|
||||
RootDir = mappings[Field.DatHeader_RootDir];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_Category))
|
||||
Category = mappings[Field.DatHeader_Category];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_Version))
|
||||
Version = mappings[Field.DatHeader_Version];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_Date))
|
||||
Date = mappings[Field.DatHeader_Date];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_Author))
|
||||
Author = mappings[Field.DatHeader_Author];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_Email))
|
||||
Email = mappings[Field.DatHeader_Email];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_Homepage))
|
||||
Homepage = mappings[Field.DatHeader_Homepage];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_Url))
|
||||
Url = mappings[Field.DatHeader_Url];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_Comment))
|
||||
Comment = mappings[Field.DatHeader_Comment];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_HeaderSkipper))
|
||||
HeaderSkipper = mappings[Field.DatHeader_HeaderSkipper];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_Type))
|
||||
Type = mappings[Field.DatHeader_Type];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_ForceMerging))
|
||||
ForceMerging = mappings[Field.DatHeader_ForceMerging].AsMergingFlag();
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_ForceNodump))
|
||||
ForceNodump = mappings[Field.DatHeader_ForceNodump].AsNodumpFlag();
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_ForcePacking))
|
||||
ForcePacking = mappings[Field.DatHeader_ForcePacking].AsPackingFlag();
|
||||
|
||||
#endregion
|
||||
|
||||
#region ListXML
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_Debug))
|
||||
Debug = mappings[Field.DatHeader_Debug].AsYesNo();
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_MameConfig))
|
||||
MameConfig = mappings[Field.DatHeader_MameConfig];
|
||||
|
||||
#endregion
|
||||
|
||||
#region Logiqx
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_Build))
|
||||
Build = mappings[Field.DatHeader_Build];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_RomMode))
|
||||
RomMode = mappings[Field.DatHeader_RomMode].AsMergingFlag();
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_BiosMode))
|
||||
BiosMode = mappings[Field.DatHeader_BiosMode].AsMergingFlag();
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_SampleMode))
|
||||
SampleMode = mappings[Field.DatHeader_SampleMode].AsMergingFlag();
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_LockRomMode))
|
||||
LockRomMode = mappings[Field.DatHeader_LockRomMode].AsYesNo();
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_LockBiosMode))
|
||||
LockBiosMode = mappings[Field.DatHeader_LockBiosMode].AsYesNo();
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_LockSampleMode))
|
||||
LockSampleMode = mappings[Field.DatHeader_LockSampleMode].AsYesNo();
|
||||
|
||||
#endregion
|
||||
|
||||
#region OfflineList
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_System))
|
||||
System = mappings[Field.DatHeader_System];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_ScreenshotsWidth))
|
||||
ScreenshotsWidth = mappings[Field.DatHeader_ScreenshotsWidth];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_ScreenshotsHeight))
|
||||
ScreenshotsHeight = mappings[Field.DatHeader_ScreenshotsHeight];
|
||||
|
||||
// TODO: Add DatHeader_Info*
|
||||
// TDOO: Add DatHeader_CanOpen*
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_RomTitle))
|
||||
RomTitle = mappings[Field.DatHeader_RomTitle];
|
||||
|
||||
#endregion
|
||||
|
||||
#region RomCenter
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatHeader_RomCenterVersion))
|
||||
RomCenterVersion = mappings[Field.DatHeader_RomCenterVersion];
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -806,33 +806,33 @@ namespace SabreTools.Library.DatFiles
|
||||
{
|
||||
// If all items are supposed to have a SHA-512, we bucket by that
|
||||
if (RomCount + DiskCount - NodumpCount == SHA512Count)
|
||||
return Field.SHA512;
|
||||
return Field.DatItem_SHA512;
|
||||
|
||||
// If all items are supposed to have a SHA-384, we bucket by that
|
||||
else if (RomCount + DiskCount - NodumpCount == SHA384Count)
|
||||
return Field.SHA384;
|
||||
return Field.DatItem_SHA384;
|
||||
|
||||
// If all items are supposed to have a SHA-256, we bucket by that
|
||||
else if (RomCount + DiskCount - NodumpCount == SHA256Count)
|
||||
return Field.SHA256;
|
||||
return Field.DatItem_SHA256;
|
||||
|
||||
// If all items are supposed to have a SHA-1, we bucket by that
|
||||
else if (RomCount + DiskCount - NodumpCount == SHA1Count)
|
||||
return Field.SHA1;
|
||||
return Field.DatItem_SHA1;
|
||||
|
||||
#if NET_FRAMEWORK
|
||||
// If all items are supposed to have a RIPEMD160, we bucket by that
|
||||
else if (RomCount + DiskCount - NodumpCount == RIPEMD160Count)
|
||||
return Field.RIPEMD160;
|
||||
return Field.DatItem_RIPEMD160;
|
||||
#endif
|
||||
|
||||
// If all items are supposed to have a MD5, we bucket by that
|
||||
else if (RomCount + DiskCount - NodumpCount == MD5Count)
|
||||
return Field.MD5;
|
||||
return Field.DatItem_MD5;
|
||||
|
||||
// Otherwise, we bucket by CRC
|
||||
else
|
||||
return Field.CRC;
|
||||
return Field.DatItem_CRC;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user