mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Simplify CleanDatItem
This commit is contained in:
@@ -171,8 +171,13 @@ namespace SabreTools.DatTools
|
|||||||
if (item == null)
|
if (item == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// Get the machine associated with the item, if possible
|
||||||
|
var machine = item.GetFieldValue<Machine>(DatItem.MachineKey);
|
||||||
|
if (machine == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
// Run cleaning per item
|
// Run cleaning per item
|
||||||
CleanDatItem(item);
|
CleanDatItem(item, machine);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -196,8 +201,13 @@ namespace SabreTools.DatTools
|
|||||||
if (item.Value == null)
|
if (item.Value == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// Get the machine associated with the item, if possible
|
||||||
|
var machine = datFile.ItemsDB.GetMachineForItem(item.Key);
|
||||||
|
if (machine.Value == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
// Run cleaning per item
|
// Run cleaning per item
|
||||||
CleanDatItemDB(datFile.ItemsDB, item);
|
CleanDatItem(item.Value, machine.Value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -206,13 +216,9 @@ namespace SabreTools.DatTools
|
|||||||
/// Clean a DatItem according to the cleaner
|
/// Clean a DatItem according to the cleaner
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="datItem">DatItem to clean</param>
|
/// <param name="datItem">DatItem to clean</param>
|
||||||
internal void CleanDatItem(DatItem datItem)
|
/// <param name="machine">Machine related to the DatItem to clean</param>
|
||||||
|
internal void CleanDatItem(DatItem datItem, Machine machine)
|
||||||
{
|
{
|
||||||
// Get the machine associated with the item, if possible
|
|
||||||
var machine = datItem.GetFieldValue<Machine>(DatItem.MachineKey);
|
|
||||||
if (machine == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Get the fields for processing
|
// Get the fields for processing
|
||||||
string? machineName = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey);
|
string? machineName = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey);
|
||||||
string? machineDesc = machine.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey);
|
string? machineDesc = machine.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey);
|
||||||
@@ -258,63 +264,6 @@ namespace SabreTools.DatTools
|
|||||||
datItem.SetName(datItemName);
|
datItem.SetName(datItemName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Clean a DatItem according to the cleaner
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="db">ItemDictionaryDB to get machine information from</param>
|
|
||||||
/// <param name="datItem">DatItem to clean</param>
|
|
||||||
internal void CleanDatItemDB(ItemDictionaryDB db, KeyValuePair<long, DatItem> datItem)
|
|
||||||
{
|
|
||||||
// Get the machine associated with the item, if possible
|
|
||||||
var machine = db.GetMachineForItem(datItem.Key);
|
|
||||||
if (machine.Value == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Get the fields for processing
|
|
||||||
string? machineName = machine.Value.GetStringFieldValue(Models.Metadata.Machine.NameKey);
|
|
||||||
string? machineDesc = machine.Value.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey);
|
|
||||||
string? datItemName = datItem.Value.GetName();
|
|
||||||
|
|
||||||
// If we're stripping unicode characters, strip machine name and description
|
|
||||||
if (RemoveUnicode)
|
|
||||||
{
|
|
||||||
machineName = TextHelper.RemoveUnicodeCharacters(machineName);
|
|
||||||
machineDesc = TextHelper.RemoveUnicodeCharacters(machineDesc);
|
|
||||||
datItemName = TextHelper.RemoveUnicodeCharacters(datItemName);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we're in normalization mode, sanitize machine name and description
|
|
||||||
if (Normalize)
|
|
||||||
{
|
|
||||||
machineName = TextHelper.NormalizeCharacters(machineName);
|
|
||||||
machineDesc = TextHelper.NormalizeCharacters(machineDesc);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we are in single game mode, rename the machine
|
|
||||||
if (Single)
|
|
||||||
{
|
|
||||||
machineName = "!";
|
|
||||||
machineDesc = "!";
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we are in NTFS trim mode, trim the item name
|
|
||||||
if (Trim && datItemName != null)
|
|
||||||
{
|
|
||||||
// Windows max name length is 260
|
|
||||||
int usableLength = 260 - (machineName?.Length ?? 0) - (Root?.Length ?? 0);
|
|
||||||
if (datItemName.Length > usableLength)
|
|
||||||
{
|
|
||||||
string ext = Path.GetExtension(datItemName);
|
|
||||||
datItemName = datItemName.Substring(0, usableLength - ext.Length) + ext;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the fields back, if necessary
|
|
||||||
machine.Value.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, machineName);
|
|
||||||
machine.Value.SetFieldValue<string?>(Models.Metadata.Machine.DescriptionKey, machineDesc);
|
|
||||||
datItem.Value.SetName(datItemName);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,63 +8,43 @@ namespace SabreTools.Test
|
|||||||
public class CleaningTests
|
public class CleaningTests
|
||||||
{
|
{
|
||||||
[Fact]
|
[Fact]
|
||||||
public void CleanDatItemRemoveUnicodeTest()
|
public void CleanDatItem_Normalize()
|
||||||
{
|
{
|
||||||
// Setup cleaner
|
var datItem = CreateDatItem("name");
|
||||||
var cleaner = new Cleaner
|
var machine = CreateMachine("\"ÁБ\"", "ä|/Ж");
|
||||||
{
|
|
||||||
RemoveUnicode = true,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Setup DatItem
|
var cleaner = new Cleaner { Normalize = true };
|
||||||
var datItem = CreateDatItem("nam诶", "nam诶-2", "nam诶-3");
|
cleaner.CleanDatItem(datItem, machine);
|
||||||
|
|
||||||
// Run cleaning
|
|
||||||
cleaner.CleanDatItem(datItem);
|
|
||||||
|
|
||||||
// Check the fields
|
|
||||||
Assert.Equal("nam", datItem.GetName());
|
|
||||||
Assert.Equal("nam-2", datItem.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey));
|
|
||||||
Assert.Equal("nam-3", datItem.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey));
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void CleanDatItemCleanTest()
|
|
||||||
{
|
|
||||||
// Setup cleaner
|
|
||||||
var cleaner = new Cleaner
|
|
||||||
{
|
|
||||||
Normalize = true,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Setup DatItem
|
|
||||||
var datItem = CreateDatItem("name", "\"ÁБ\"", "ä|/Ж");
|
|
||||||
|
|
||||||
// Run cleaning
|
|
||||||
cleaner.CleanDatItem(datItem);
|
|
||||||
|
|
||||||
// Check the fields
|
|
||||||
Assert.Equal("name", datItem.GetName());
|
Assert.Equal("name", datItem.GetName());
|
||||||
Assert.Equal("'AB'", datItem.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey));
|
Assert.Equal("'AB'", datItem.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey));
|
||||||
Assert.Equal("ae-Zh", datItem.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey));
|
Assert.Equal("ae-Zh", datItem.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void CleanDatItemSingleTest()
|
public void CleanDatItem_RemoveUnicode()
|
||||||
{
|
{
|
||||||
// Setup cleaner
|
var datItem = CreateDatItem("nam诶");
|
||||||
var cleaner = new Cleaner
|
var machine = CreateMachine("nam诶-2", "nam诶-3");
|
||||||
{
|
|
||||||
Single = true,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Setup DatItem
|
|
||||||
var datItem = CreateDatItem("name", "name-2", "name-3");
|
|
||||||
|
|
||||||
// Run cleaning
|
var cleaner = new Cleaner { RemoveUnicode = true };
|
||||||
cleaner.CleanDatItem(datItem);
|
cleaner.CleanDatItem(datItem, machine);
|
||||||
|
|
||||||
|
Assert.Equal("nam", datItem.GetName());
|
||||||
|
Assert.Equal("nam-2", datItem.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey));
|
||||||
|
Assert.Equal("nam-3", datItem.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void CleanDatItem_Single()
|
||||||
|
{
|
||||||
|
var datItem = CreateDatItem("name");
|
||||||
|
var machine = CreateMachine("name-2", "name-3");
|
||||||
|
|
||||||
|
var cleaner = new Cleaner { Single = true };
|
||||||
|
cleaner.CleanDatItem(datItem, machine);
|
||||||
|
|
||||||
// Check the fields
|
|
||||||
Assert.Equal("name", datItem.GetName());
|
Assert.Equal("name", datItem.GetName());
|
||||||
Assert.Equal("!", datItem.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey));
|
Assert.Equal("!", datItem.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey));
|
||||||
Assert.Equal("!", datItem.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey));
|
Assert.Equal("!", datItem.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey));
|
||||||
@@ -75,22 +55,18 @@ namespace SabreTools.Test
|
|||||||
[InlineData("", "name")]
|
[InlineData("", "name")]
|
||||||
[InlineData("C:\\Normal\\Depth\\Path", "name")]
|
[InlineData("C:\\Normal\\Depth\\Path", "name")]
|
||||||
[InlineData("C:\\AbnormalFolderLengthPath\\ThatReallyPushesTheLimit\\OfHowLongYou\\ReallyShouldNameThings\\AndItGetsEvenWorse\\TheMoreSubfoldersThatYouTraverse\\BecauseWhyWouldYouStop\\AtSomethingReasonable\\LikeReallyThisIsGettingDumb\\AndIKnowItsJustATest\\ButNotAsMuchAsMe", "nam")]
|
[InlineData("C:\\AbnormalFolderLengthPath\\ThatReallyPushesTheLimit\\OfHowLongYou\\ReallyShouldNameThings\\AndItGetsEvenWorse\\TheMoreSubfoldersThatYouTraverse\\BecauseWhyWouldYouStop\\AtSomethingReasonable\\LikeReallyThisIsGettingDumb\\AndIKnowItsJustATest\\ButNotAsMuchAsMe", "nam")]
|
||||||
public void CleanDatItemTrimTest(string? root, string expected)
|
public void CleanDatItem_TrimRoot(string? root, string expected)
|
||||||
{
|
{
|
||||||
// Setup cleaner
|
var datItem = CreateDatItem("name");
|
||||||
|
var machine = CreateMachine("name-2", "name-3");
|
||||||
|
|
||||||
var cleaner = new Cleaner
|
var cleaner = new Cleaner
|
||||||
{
|
{
|
||||||
Trim = true,
|
Trim = true,
|
||||||
Root = root,
|
Root = root,
|
||||||
};
|
};
|
||||||
|
cleaner.CleanDatItem(datItem, machine);
|
||||||
|
|
||||||
// Setup DatItem
|
|
||||||
var datItem = CreateDatItem("name", "name-2", "name-3");
|
|
||||||
|
|
||||||
// Run cleaning
|
|
||||||
cleaner.CleanDatItem(datItem);
|
|
||||||
|
|
||||||
// Check the fields
|
|
||||||
Assert.Equal(expected, datItem.GetName());
|
Assert.Equal(expected, datItem.GetName());
|
||||||
Assert.Equal("name-2", datItem.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey));
|
Assert.Equal("name-2", datItem.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey));
|
||||||
Assert.Equal("name-3", datItem.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey));
|
Assert.Equal("name-3", datItem.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey));
|
||||||
@@ -99,17 +75,26 @@ namespace SabreTools.Test
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Generate a consistent DatItem for testing
|
/// Generate a consistent DatItem for testing
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static DatItem CreateDatItem(string name, string machName, string desc)
|
private static DatItem CreateDatItem(string name)
|
||||||
{
|
{
|
||||||
var machine = new Machine();
|
|
||||||
machine.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, machName);
|
|
||||||
machine.SetFieldValue<string?>(Models.Metadata.Machine.DescriptionKey, desc);
|
|
||||||
|
|
||||||
var rom = new Rom();
|
var rom = new Rom();
|
||||||
|
|
||||||
rom.SetName(name);
|
rom.SetName(name);
|
||||||
rom.SetFieldValue<Machine>(DatItem.MachineKey, machine);
|
|
||||||
|
|
||||||
return rom;
|
return rom;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Generate a consistent Machine for testing
|
||||||
|
/// </summary>
|
||||||
|
private static Machine CreateMachine(string machName, string desc)
|
||||||
|
{
|
||||||
|
var machine = new Machine();
|
||||||
|
|
||||||
|
machine.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, machName);
|
||||||
|
machine.SetFieldValue<string?>(Models.Metadata.Machine.DescriptionKey, desc);
|
||||||
|
|
||||||
|
return machine;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user