diff --git a/SabreTools.DatFiles.Test/DatFileTests.cs b/SabreTools.DatFiles.Test/DatFileTests.cs index 93f845ba..95a6e8f6 100644 --- a/SabreTools.DatFiles.Test/DatFileTests.cs +++ b/SabreTools.DatFiles.Test/DatFileTests.cs @@ -349,10 +349,10 @@ namespace SabreTools.DatFiles.Test [InlineData(false, false, false, true, null, false, "rep", false, null, true, "machine/namerep")] [InlineData(false, false, false, true, null, false, "rep", false, "add", false, "namerepadd")] [InlineData(false, false, false, true, null, false, "rep", false, "add", true, "machine/namerepadd")] - [InlineData(false, false, false, true, null, false, "rep", true, null, false, "namerep")] - [InlineData(false, false, false, true, null, false, "rep", true, null, true, "machine/namerep")] - [InlineData(false, false, false, true, null, false, "rep", true, "add", false, "namerepadd")] - [InlineData(false, false, false, true, null, false, "rep", true, "add", true, "machine/namerepadd")] + [InlineData(false, false, false, true, null, false, "rep", true, null, false, "name")] + [InlineData(false, false, false, true, null, false, "rep", true, null, true, "machine/name")] + [InlineData(false, false, false, true, null, false, "rep", true, "add", false, "nameadd")] + [InlineData(false, false, false, true, null, false, "rep", true, "add", true, "machine/nameadd")] [InlineData(false, false, false, true, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] [InlineData(false, false, false, true, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] [InlineData(false, false, false, true, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] @@ -381,10 +381,10 @@ namespace SabreTools.DatFiles.Test [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", false, null, true, "machine_namemachine/namerepmachine_name")] [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", false, "add", false, "machine_namenamerepaddmachine_name")] [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", false, "add", true, "machine_namemachine/namerepaddmachine_name")] - [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamerepmachine_name")] - [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namerepmachine_name")] - [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenamerepaddmachine_name")] - [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/namerepaddmachine_name")] + [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamemachine_name")] + [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namemachine_name")] + [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenameaddmachine_name")] + [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/nameaddmachine_name")] [InlineData(false, false, false, true, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] [InlineData(false, false, false, true, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] [InlineData(false, false, false, true, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] @@ -477,10 +477,10 @@ namespace SabreTools.DatFiles.Test [InlineData(false, false, true, true, null, false, "rep", false, null, true, "machine/namerep")] [InlineData(false, false, true, true, null, false, "rep", false, "add", false, "namerepadd")] [InlineData(false, false, true, true, null, false, "rep", false, "add", true, "machine/namerepadd")] - [InlineData(false, false, true, true, null, false, "rep", true, null, false, "namerep")] - [InlineData(false, false, true, true, null, false, "rep", true, null, true, "machine/namerep")] - [InlineData(false, false, true, true, null, false, "rep", true, "add", false, "namerepadd")] - [InlineData(false, false, true, true, null, false, "rep", true, "add", true, "machine/namerepadd")] + [InlineData(false, false, true, true, null, false, "rep", true, null, false, "name")] + [InlineData(false, false, true, true, null, false, "rep", true, null, true, "machine/name")] + [InlineData(false, false, true, true, null, false, "rep", true, "add", false, "nameadd")] + [InlineData(false, false, true, true, null, false, "rep", true, "add", true, "machine/nameadd")] [InlineData(false, false, true, true, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] [InlineData(false, false, true, true, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] [InlineData(false, false, true, true, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] @@ -509,10 +509,10 @@ namespace SabreTools.DatFiles.Test [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", false, null, true, "machine_namemachine/namerepmachine_name")] [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", false, "add", false, "machine_namenamerepaddmachine_name")] [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", false, "add", true, "machine_namemachine/namerepaddmachine_name")] - [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamerepmachine_name")] - [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namerepmachine_name")] - [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenamerepaddmachine_name")] - [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/namerepaddmachine_name")] + [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamemachine_name")] + [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namemachine_name")] + [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenameaddmachine_name")] + [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/nameaddmachine_name")] [InlineData(false, false, true, true, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] [InlineData(false, false, true, true, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] [InlineData(false, false, true, true, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] @@ -541,10 +541,10 @@ namespace SabreTools.DatFiles.Test [InlineData(false, true, false, false, null, false, "rep", false, null, true, "machine/namerep")] [InlineData(false, true, false, false, null, false, "rep", false, "add", false, "namerepadd")] [InlineData(false, true, false, false, null, false, "rep", false, "add", true, "machine/namerepadd")] - [InlineData(false, true, false, false, null, false, "rep", true, null, false, "namerep")] - [InlineData(false, true, false, false, null, false, "rep", true, null, true, "machine/namerep")] - [InlineData(false, true, false, false, null, false, "rep", true, "add", false, "namerepadd")] - [InlineData(false, true, false, false, null, false, "rep", true, "add", true, "machine/namerepadd")] + [InlineData(false, true, false, false, null, false, "rep", true, null, false, "name")] + [InlineData(false, true, false, false, null, false, "rep", true, null, true, "machine/name")] + [InlineData(false, true, false, false, null, false, "rep", true, "add", false, "nameadd")] + [InlineData(false, true, false, false, null, false, "rep", true, "add", true, "machine/nameadd")] [InlineData(false, true, false, false, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] [InlineData(false, true, false, false, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] [InlineData(false, true, false, false, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] @@ -573,10 +573,10 @@ namespace SabreTools.DatFiles.Test [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", false, null, true, "machine_namemachine/namerepmachine_name")] [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", false, "add", false, "machine_namenamerepaddmachine_name")] [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", false, "add", true, "machine_namemachine/namerepaddmachine_name")] - [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamerepmachine_name")] - [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namerepmachine_name")] - [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenamerepaddmachine_name")] - [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/namerepaddmachine_name")] + [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamemachine_name")] + [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namemachine_name")] + [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenameaddmachine_name")] + [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/nameaddmachine_name")] [InlineData(false, true, false, false, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] [InlineData(false, true, false, false, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] [InlineData(false, true, false, false, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] @@ -605,10 +605,10 @@ namespace SabreTools.DatFiles.Test [InlineData(false, true, false, true, null, false, "rep", false, null, true, "machine/namerep")] [InlineData(false, true, false, true, null, false, "rep", false, "add", false, "namerepadd")] [InlineData(false, true, false, true, null, false, "rep", false, "add", true, "machine/namerepadd")] - [InlineData(false, true, false, true, null, false, "rep", true, null, false, "namerep")] - [InlineData(false, true, false, true, null, false, "rep", true, null, true, "machine/namerep")] - [InlineData(false, true, false, true, null, false, "rep", true, "add", false, "namerepadd")] - [InlineData(false, true, false, true, null, false, "rep", true, "add", true, "machine/namerepadd")] + [InlineData(false, true, false, true, null, false, "rep", true, null, false, "name")] + [InlineData(false, true, false, true, null, false, "rep", true, null, true, "machine/name")] + [InlineData(false, true, false, true, null, false, "rep", true, "add", false, "nameadd")] + [InlineData(false, true, false, true, null, false, "rep", true, "add", true, "machine/nameadd")] [InlineData(false, true, false, true, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] [InlineData(false, true, false, true, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] [InlineData(false, true, false, true, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] @@ -637,10 +637,10 @@ namespace SabreTools.DatFiles.Test [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", false, null, true, "machine_namemachine/namerepmachine_name")] [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", false, "add", false, "machine_namenamerepaddmachine_name")] [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", false, "add", true, "machine_namemachine/namerepaddmachine_name")] - [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamerepmachine_name")] - [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namerepmachine_name")] - [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenamerepaddmachine_name")] - [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/namerepaddmachine_name")] + [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamemachine_name")] + [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namemachine_name")] + [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenameaddmachine_name")] + [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/nameaddmachine_name")] [InlineData(false, true, false, true, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] [InlineData(false, true, false, true, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] [InlineData(false, true, false, true, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] @@ -669,10 +669,10 @@ namespace SabreTools.DatFiles.Test [InlineData(false, true, true, false, null, false, "rep", false, null, true, "machine/namerep")] [InlineData(false, true, true, false, null, false, "rep", false, "add", false, "namerepadd")] [InlineData(false, true, true, false, null, false, "rep", false, "add", true, "machine/namerepadd")] - [InlineData(false, true, true, false, null, false, "rep", true, null, false, "namerep")] - [InlineData(false, true, true, false, null, false, "rep", true, null, true, "machine/namerep")] - [InlineData(false, true, true, false, null, false, "rep", true, "add", false, "namerepadd")] - [InlineData(false, true, true, false, null, false, "rep", true, "add", true, "machine/namerepadd")] + [InlineData(false, true, true, false, null, false, "rep", true, null, false, "name")] + [InlineData(false, true, true, false, null, false, "rep", true, null, true, "machine/name")] + [InlineData(false, true, true, false, null, false, "rep", true, "add", false, "nameadd")] + [InlineData(false, true, true, false, null, false, "rep", true, "add", true, "machine/nameadd")] [InlineData(false, true, true, false, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] [InlineData(false, true, true, false, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] [InlineData(false, true, true, false, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] @@ -701,10 +701,10 @@ namespace SabreTools.DatFiles.Test [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", false, null, true, "machine_namemachine/namerepmachine_name")] [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", false, "add", false, "machine_namenamerepaddmachine_name")] [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", false, "add", true, "machine_namemachine/namerepaddmachine_name")] - [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamerepmachine_name")] - [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namerepmachine_name")] - [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenamerepaddmachine_name")] - [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/namerepaddmachine_name")] + [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamemachine_name")] + [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namemachine_name")] + [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenameaddmachine_name")] + [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/nameaddmachine_name")] [InlineData(false, true, true, false, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] [InlineData(false, true, true, false, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] [InlineData(false, true, true, false, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] @@ -733,10 +733,10 @@ namespace SabreTools.DatFiles.Test [InlineData(false, true, true, true, null, false, "rep", false, null, true, "machine/namerep")] [InlineData(false, true, true, true, null, false, "rep", false, "add", false, "namerepadd")] [InlineData(false, true, true, true, null, false, "rep", false, "add", true, "machine/namerepadd")] - [InlineData(false, true, true, true, null, false, "rep", true, null, false, "namerep")] - [InlineData(false, true, true, true, null, false, "rep", true, null, true, "machine/namerep")] - [InlineData(false, true, true, true, null, false, "rep", true, "add", false, "namerepadd")] - [InlineData(false, true, true, true, null, false, "rep", true, "add", true, "machine/namerepadd")] + [InlineData(false, true, true, true, null, false, "rep", true, null, false, "name")] + [InlineData(false, true, true, true, null, false, "rep", true, null, true, "machine/name")] + [InlineData(false, true, true, true, null, false, "rep", true, "add", false, "nameadd")] + [InlineData(false, true, true, true, null, false, "rep", true, "add", true, "machine/nameadd")] [InlineData(false, true, true, true, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] [InlineData(false, true, true, true, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] [InlineData(false, true, true, true, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] @@ -765,10 +765,10 @@ namespace SabreTools.DatFiles.Test [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", false, null, true, "machine_namemachine/namerepmachine_name")] [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", false, "add", false, "machine_namenamerepaddmachine_name")] [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", false, "add", true, "machine_namemachine/namerepaddmachine_name")] - [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamerepmachine_name")] - [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namerepmachine_name")] - [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenamerepaddmachine_name")] - [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/namerepaddmachine_name")] + [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamemachine_name")] + [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namemachine_name")] + [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenameaddmachine_name")] + [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/nameaddmachine_name")] [InlineData(false, true, true, true, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] [InlineData(false, true, true, true, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] [InlineData(false, true, true, true, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] @@ -861,10 +861,10 @@ namespace SabreTools.DatFiles.Test [InlineData(true, false, false, true, null, false, "rep", false, null, true, "\"machine/namerep\"")] [InlineData(true, false, false, true, null, false, "rep", false, "add", false, "\"namerepadd\"")] [InlineData(true, false, false, true, null, false, "rep", false, "add", true, "\"machine/namerepadd\"")] - [InlineData(true, false, false, true, null, false, "rep", true, null, false, "\"namerep\"")] - [InlineData(true, false, false, true, null, false, "rep", true, null, true, "\"machine/namerep\"")] - [InlineData(true, false, false, true, null, false, "rep", true, "add", false, "\"namerepadd\"")] - [InlineData(true, false, false, true, null, false, "rep", true, "add", true, "\"machine/namerepadd\"")] + [InlineData(true, false, false, true, null, false, "rep", true, null, false, "\"name\"")] + [InlineData(true, false, false, true, null, false, "rep", true, null, true, "\"machine/name\"")] + [InlineData(true, false, false, true, null, false, "rep", true, "add", false, "\"nameadd\"")] + [InlineData(true, false, false, true, null, false, "rep", true, "add", true, "\"machine/nameadd\"")] [InlineData(true, false, false, true, null, true, null, false, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")] [InlineData(true, false, false, true, null, true, null, false, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")] [InlineData(true, false, false, true, null, true, null, false, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")] @@ -893,10 +893,10 @@ namespace SabreTools.DatFiles.Test [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", false, null, true, "machine_name\"machine/namerep\"machine_name")] [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", false, "add", false, "machine_name\"namerepadd\"machine_name")] [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", false, "add", true, "machine_name\"machine/namerepadd\"machine_name")] - [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", true, null, false, "machine_name\"namerep\"machine_name")] - [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", true, null, true, "machine_name\"machine/namerep\"machine_name")] - [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_name\"namerepadd\"machine_name")] - [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_name\"machine/namerepadd\"machine_name")] + [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", true, null, false, "machine_name\"name\"machine_name")] + [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", true, null, true, "machine_name\"machine/name\"machine_name")] + [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_name\"nameadd\"machine_name")] + [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_name\"machine/nameadd\"machine_name")] [InlineData(true, false, false, true, "%machine%_%name%", true, null, false, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")] [InlineData(true, false, false, true, "%machine%_%name%", true, null, false, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")] [InlineData(true, false, false, true, "%machine%_%name%", true, null, false, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")] @@ -989,10 +989,10 @@ namespace SabreTools.DatFiles.Test [InlineData(true, false, true, true, null, false, "rep", false, null, true, "machine/namerep")] [InlineData(true, false, true, true, null, false, "rep", false, "add", false, "namerepadd")] [InlineData(true, false, true, true, null, false, "rep", false, "add", true, "machine/namerepadd")] - [InlineData(true, false, true, true, null, false, "rep", true, null, false, "namerep")] - [InlineData(true, false, true, true, null, false, "rep", true, null, true, "machine/namerep")] - [InlineData(true, false, true, true, null, false, "rep", true, "add", false, "namerepadd")] - [InlineData(true, false, true, true, null, false, "rep", true, "add", true, "machine/namerepadd")] + [InlineData(true, false, true, true, null, false, "rep", true, null, false, "name")] + [InlineData(true, false, true, true, null, false, "rep", true, null, true, "machine/name")] + [InlineData(true, false, true, true, null, false, "rep", true, "add", false, "nameadd")] + [InlineData(true, false, true, true, null, false, "rep", true, "add", true, "machine/nameadd")] [InlineData(true, false, true, true, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] [InlineData(true, false, true, true, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] [InlineData(true, false, true, true, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] @@ -1021,10 +1021,10 @@ namespace SabreTools.DatFiles.Test [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", false, null, true, "machine_namemachine/namerepmachine_name")] [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", false, "add", false, "machine_namenamerepaddmachine_name")] [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", false, "add", true, "machine_namemachine/namerepaddmachine_name")] - [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamerepmachine_name")] - [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namerepmachine_name")] - [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenamerepaddmachine_name")] - [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/namerepaddmachine_name")] + [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamemachine_name")] + [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namemachine_name")] + [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenameaddmachine_name")] + [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/nameaddmachine_name")] [InlineData(true, false, true, true, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] [InlineData(true, false, true, true, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] [InlineData(true, false, true, true, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] @@ -1053,10 +1053,10 @@ namespace SabreTools.DatFiles.Test [InlineData(true, true, false, false, null, false, "rep", false, null, true, "\"machine/namerep\"")] [InlineData(true, true, false, false, null, false, "rep", false, "add", false, "\"namerepadd\"")] [InlineData(true, true, false, false, null, false, "rep", false, "add", true, "\"machine/namerepadd\"")] - [InlineData(true, true, false, false, null, false, "rep", true, null, false, "\"namerep\"")] - [InlineData(true, true, false, false, null, false, "rep", true, null, true, "\"machine/namerep\"")] - [InlineData(true, true, false, false, null, false, "rep", true, "add", false, "\"namerepadd\"")] - [InlineData(true, true, false, false, null, false, "rep", true, "add", true, "\"machine/namerepadd\"")] + [InlineData(true, true, false, false, null, false, "rep", true, null, false, "\"name\"")] + [InlineData(true, true, false, false, null, false, "rep", true, null, true, "\"machine/name\"")] + [InlineData(true, true, false, false, null, false, "rep", true, "add", false, "\"nameadd\"")] + [InlineData(true, true, false, false, null, false, "rep", true, "add", true, "\"machine/nameadd\"")] [InlineData(true, true, false, false, null, true, null, false, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")] [InlineData(true, true, false, false, null, true, null, false, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")] [InlineData(true, true, false, false, null, true, null, false, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")] @@ -1085,10 +1085,10 @@ namespace SabreTools.DatFiles.Test [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", false, null, true, "machine_name\"machine/namerep\"machine_name")] [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", false, "add", false, "machine_name\"namerepadd\"machine_name")] [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", false, "add", true, "machine_name\"machine/namerepadd\"machine_name")] - [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", true, null, false, "machine_name\"namerep\"machine_name")] - [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", true, null, true, "machine_name\"machine/namerep\"machine_name")] - [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", true, "add", false, "machine_name\"namerepadd\"machine_name")] - [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", true, "add", true, "machine_name\"machine/namerepadd\"machine_name")] + [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", true, null, false, "machine_name\"name\"machine_name")] + [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", true, null, true, "machine_name\"machine/name\"machine_name")] + [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", true, "add", false, "machine_name\"nameadd\"machine_name")] + [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", true, "add", true, "machine_name\"machine/nameadd\"machine_name")] [InlineData(true, true, false, false, "%machine%_%name%", true, null, false, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")] [InlineData(true, true, false, false, "%machine%_%name%", true, null, false, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")] [InlineData(true, true, false, false, "%machine%_%name%", true, null, false, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")] @@ -1117,10 +1117,10 @@ namespace SabreTools.DatFiles.Test [InlineData(true, true, false, true, null, false, "rep", false, null, true, "\"machine/namerep\"")] [InlineData(true, true, false, true, null, false, "rep", false, "add", false, "\"namerepadd\"")] [InlineData(true, true, false, true, null, false, "rep", false, "add", true, "\"machine/namerepadd\"")] - [InlineData(true, true, false, true, null, false, "rep", true, null, false, "\"namerep\"")] - [InlineData(true, true, false, true, null, false, "rep", true, null, true, "\"machine/namerep\"")] - [InlineData(true, true, false, true, null, false, "rep", true, "add", false, "\"namerepadd\"")] - [InlineData(true, true, false, true, null, false, "rep", true, "add", true, "\"machine/namerepadd\"")] + [InlineData(true, true, false, true, null, false, "rep", true, null, false, "\"name\"")] + [InlineData(true, true, false, true, null, false, "rep", true, null, true, "\"machine/name\"")] + [InlineData(true, true, false, true, null, false, "rep", true, "add", false, "\"nameadd\"")] + [InlineData(true, true, false, true, null, false, "rep", true, "add", true, "\"machine/nameadd\"")] [InlineData(true, true, false, true, null, true, null, false, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")] [InlineData(true, true, false, true, null, true, null, false, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")] [InlineData(true, true, false, true, null, true, null, false, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")] @@ -1149,10 +1149,10 @@ namespace SabreTools.DatFiles.Test [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", false, null, true, "machine_name\"machine/namerep\"machine_name")] [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", false, "add", false, "machine_name\"namerepadd\"machine_name")] [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", false, "add", true, "machine_name\"machine/namerepadd\"machine_name")] - [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", true, null, false, "machine_name\"namerep\"machine_name")] - [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", true, null, true, "machine_name\"machine/namerep\"machine_name")] - [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_name\"namerepadd\"machine_name")] - [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_name\"machine/namerepadd\"machine_name")] + [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", true, null, false, "machine_name\"name\"machine_name")] + [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", true, null, true, "machine_name\"machine/name\"machine_name")] + [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_name\"nameadd\"machine_name")] + [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_name\"machine/nameadd\"machine_name")] [InlineData(true, true, false, true, "%machine%_%name%", true, null, false, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")] [InlineData(true, true, false, true, "%machine%_%name%", true, null, false, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")] [InlineData(true, true, false, true, "%machine%_%name%", true, null, false, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")] @@ -1181,10 +1181,10 @@ namespace SabreTools.DatFiles.Test [InlineData(true, true, true, false, null, false, "rep", false, null, true, "machine/namerep")] [InlineData(true, true, true, false, null, false, "rep", false, "add", false, "namerepadd")] [InlineData(true, true, true, false, null, false, "rep", false, "add", true, "machine/namerepadd")] - [InlineData(true, true, true, false, null, false, "rep", true, null, false, "namerep")] - [InlineData(true, true, true, false, null, false, "rep", true, null, true, "machine/namerep")] - [InlineData(true, true, true, false, null, false, "rep", true, "add", false, "namerepadd")] - [InlineData(true, true, true, false, null, false, "rep", true, "add", true, "machine/namerepadd")] + [InlineData(true, true, true, false, null, false, "rep", true, null, false, "name")] + [InlineData(true, true, true, false, null, false, "rep", true, null, true, "machine/name")] + [InlineData(true, true, true, false, null, false, "rep", true, "add", false, "nameadd")] + [InlineData(true, true, true, false, null, false, "rep", true, "add", true, "machine/nameadd")] [InlineData(true, true, true, false, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] [InlineData(true, true, true, false, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] [InlineData(true, true, true, false, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] @@ -1213,10 +1213,10 @@ namespace SabreTools.DatFiles.Test [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", false, null, true, "machine_namemachine/namerepmachine_name")] [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", false, "add", false, "machine_namenamerepaddmachine_name")] [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", false, "add", true, "machine_namemachine/namerepaddmachine_name")] - [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamerepmachine_name")] - [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namerepmachine_name")] - [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenamerepaddmachine_name")] - [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/namerepaddmachine_name")] + [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamemachine_name")] + [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namemachine_name")] + [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenameaddmachine_name")] + [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/nameaddmachine_name")] [InlineData(true, true, true, false, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] [InlineData(true, true, true, false, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] [InlineData(true, true, true, false, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] @@ -1245,10 +1245,10 @@ namespace SabreTools.DatFiles.Test [InlineData(true, true, true, true, null, false, "rep", false, null, true, "machine/namerep")] [InlineData(true, true, true, true, null, false, "rep", false, "add", false, "namerepadd")] [InlineData(true, true, true, true, null, false, "rep", false, "add", true, "machine/namerepadd")] - [InlineData(true, true, true, true, null, false, "rep", true, null, false, "namerep")] - [InlineData(true, true, true, true, null, false, "rep", true, null, true, "machine/namerep")] - [InlineData(true, true, true, true, null, false, "rep", true, "add", false, "namerepadd")] - [InlineData(true, true, true, true, null, false, "rep", true, "add", true, "machine/namerepadd")] + [InlineData(true, true, true, true, null, false, "rep", true, null, false, "name")] + [InlineData(true, true, true, true, null, false, "rep", true, null, true, "machine/name")] + [InlineData(true, true, true, true, null, false, "rep", true, "add", false, "nameadd")] + [InlineData(true, true, true, true, null, false, "rep", true, "add", true, "machine/nameadd")] [InlineData(true, true, true, true, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] [InlineData(true, true, true, true, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] [InlineData(true, true, true, true, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] @@ -1277,10 +1277,10 @@ namespace SabreTools.DatFiles.Test [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", false, null, true, "machine_namemachine/namerepmachine_name")] [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", false, "add", false, "machine_namenamerepaddmachine_name")] [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", false, "add", true, "machine_namemachine/namerepaddmachine_name")] - [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamerepmachine_name")] - [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namerepmachine_name")] - [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenamerepaddmachine_name")] - [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/namerepaddmachine_name")] + [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamemachine_name")] + [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namemachine_name")] + [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenameaddmachine_name")] + [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/nameaddmachine_name")] [InlineData(true, true, true, true, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] [InlineData(true, true, true, true, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] [InlineData(true, true, true, true, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")] @@ -1318,19 +1318,16 @@ namespace SabreTools.DatFiles.Test item.SetFieldValue(Models.Metadata.Rom.SHA1Key, ZeroHash.SHA1Str); DatFile? datFile = new Formats.Logiqx(datFile: null, deprecated: false); - datFile.Header.SetFieldValue(DatHeader.QuotesKey, quotes); - datFile.Header.SetFieldValue(DatHeader.UseRomNameKey, useRomName); - datFile.Header.SetFieldValue(DatHeader.PrefixKey, fix); - datFile.Header.SetFieldValue(DatHeader.PostfixKey, fix); - datFile.Header.SetFieldValue(DatHeader.ReplaceExtensionKey, replaceExtension); - datFile.Header.SetFieldValue(DatHeader.RemoveExtensionKey, removeExtension); - datFile.Header.SetFieldValue(DatHeader.AddExtensionKey, addExtension); - datFile.Header.SetFieldValue(DatHeader.GameNameKey, gameName); + datFile.Modifiers.Prefix = fix; + datFile.Modifiers.Postfix = fix; + datFile.Modifiers.AddExtension = addExtension; + datFile.Modifiers.RemoveExtension = removeExtension; + datFile.Modifiers.ReplaceExtension = replaceExtension; + datFile.Modifiers.GameName = gameName; + datFile.Modifiers.Quotes = quotes; + datFile.Modifiers.UseRomName = useRomName; if (depot) - { - DepotInformation di = new DepotInformation(isActive: true, depth: 4); - datFile.Header.SetFieldValue(DatHeader.OutputDepotKey, di); - } + datFile.Modifiers.OutputDepot = new DepotInformation(isActive: true, depth: 4); datFile.ProcessItemName(item, machine, forceRemoveQuotes, forceRomName); string? actual = item.GetName()?.Replace('\\', '/'); diff --git a/SabreTools.DatFiles/DatFile.cs b/SabreTools.DatFiles/DatFile.cs index 383d6f9c..63b005c8 100644 --- a/SabreTools.DatFiles/DatFile.cs +++ b/SabreTools.DatFiles/DatFile.cs @@ -25,6 +25,13 @@ namespace SabreTools.DatFiles [JsonProperty("header"), XmlElement("header")] public DatHeader Header { get; private set; } = new DatHeader(); + /// + /// Modifier values + /// + /// TODO: Make this private set + [JsonProperty("modifiers"), XmlElement("modifiers")] + public DatModifiers Modifiers { get; set; } = new DatModifiers(); + /// /// DatItems and related statistics /// @@ -73,6 +80,7 @@ namespace SabreTools.DatFiles if (datFile != null) { Header = (DatHeader)datFile.Header.Clone(); + Modifiers = (DatModifiers)datFile.Modifiers.Clone(); Items = datFile.Items; ItemsDB = datFile.ItemsDB; } @@ -147,6 +155,15 @@ namespace SabreTools.DatFiles Header = datHeader; } + /// + /// Set the internal header + /// + /// Replacement header to be used + public void SetModifiers(DatModifiers datModifers) + { + Modifiers = (DatModifiers)datModifers.Clone(); + } + /// /// Remove any keys that have null or empty values /// @@ -431,18 +448,28 @@ namespace SabreTools.DatFiles /// DatItem to update /// True if the Quotes flag should be ignored, false otherwise /// True if the UseRomName should be always on, false otherwise + /// + /// There are some unique interactions that can occur because of the large number of effective + /// inputs into this method. + /// - If both a replacement extension is set and the remove extension flag is enabled, + /// the replacement extension will be overridden by the remove extension flag. + /// - Extension addition, removal, and replacement are not done at all if the output + /// depot is specified. Only prefix and postfix logic is applied. + /// - Both methods of using the item name are overridden if the output depot is specified. + /// Instead, the name is always set based on the SHA-1 hash. + /// protected internal void ProcessItemName(DatItem item, Machine? machine, bool forceRemoveQuotes, bool forceRomName) { // Get the relevant processing values - bool quotes = forceRemoveQuotes ? false : Header.GetBoolFieldValue(DatHeader.QuotesKey) ?? false; - bool useRomName = forceRomName ? true : Header.GetBoolFieldValue(DatHeader.UseRomNameKey) ?? false; + bool quotes = forceRemoveQuotes ? false : Modifiers.Quotes; + bool useRomName = forceRomName ? true : Modifiers.UseRomName; // Create the full Prefix - string pre = Header.GetStringFieldValue(DatHeader.PrefixKey) + (quotes ? "\"" : string.Empty); + string pre = Modifiers.Prefix + (quotes ? "\"" : string.Empty); pre = FormatPrefixPostfix(item, machine, pre); // Create the full Postfix - string post = (quotes ? "\"" : string.Empty) + Header.GetStringFieldValue(DatHeader.PostfixKey); + string post = (quotes ? "\"" : string.Empty) + Modifiers.Postfix; post = FormatPrefixPostfix(item, machine, post); // Get the name to update @@ -451,8 +478,7 @@ namespace SabreTools.DatFiles : machine?.GetStringFieldValue(Models.Metadata.Machine.NameKey)) ?? string.Empty; // If we're in Depot mode, take care of that instead - var outputDepot = Header.GetFieldValue(DatHeader.OutputDepotKey); - if (outputDepot?.IsActive == true) + if (Modifiers.OutputDepot?.IsActive == true) { if (item is Disk disk) { @@ -460,7 +486,7 @@ namespace SabreTools.DatFiles string? sha1 = disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key); if (!string.IsNullOrEmpty(sha1)) { - name = Utilities.GetDepotPath(sha1, outputDepot.Depth)?.Replace('\\', '/'); + name = Utilities.GetDepotPath(sha1, Modifiers.OutputDepot.Depth)?.Replace('\\', '/'); item.SetName($"{pre}{name}{post}"); } } @@ -470,7 +496,7 @@ namespace SabreTools.DatFiles string? sha1 = file.SHA1; if (!string.IsNullOrEmpty(sha1)) { - name = Utilities.GetDepotPath(sha1, outputDepot.Depth)?.Replace('\\', '/'); + name = Utilities.GetDepotPath(sha1, Modifiers.OutputDepot.Depth)?.Replace('\\', '/'); item.SetName($"{pre}{name}{post}"); } } @@ -480,7 +506,7 @@ namespace SabreTools.DatFiles string? sha1 = media.GetStringFieldValue(Models.Metadata.Media.SHA1Key); if (!string.IsNullOrEmpty(sha1)) { - name = Utilities.GetDepotPath(sha1, outputDepot.Depth)?.Replace('\\', '/'); + name = Utilities.GetDepotPath(sha1, Modifiers.OutputDepot.Depth)?.Replace('\\', '/'); item.SetName($"{pre}{name}{post}"); } } @@ -490,7 +516,7 @@ namespace SabreTools.DatFiles string? sha1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key); if (!string.IsNullOrEmpty(sha1)) { - name = Utilities.GetDepotPath(sha1, outputDepot.Depth)?.Replace('\\', '/'); + name = Utilities.GetDepotPath(sha1, Modifiers.OutputDepot.Depth)?.Replace('\\', '/'); item.SetName($"{pre}{name}{post}"); } } @@ -498,34 +524,31 @@ namespace SabreTools.DatFiles return; } - string? replaceExtension = Header.GetStringFieldValue(DatHeader.ReplaceExtensionKey); - bool? removeExtension = Header.GetBoolFieldValue(DatHeader.RemoveExtensionKey); - if (!string.IsNullOrEmpty(replaceExtension) || removeExtension == true) + if (!string.IsNullOrEmpty(Modifiers.ReplaceExtension) || Modifiers.RemoveExtension) { - if (removeExtension == true) - Header.SetFieldValue(DatHeader.ReplaceExtensionKey, string.Empty); + if (Modifiers.RemoveExtension) + Modifiers.ReplaceExtension = string.Empty; string? dir = Path.GetDirectoryName(name); if (dir != null) { dir = dir.TrimStart(Path.DirectorySeparatorChar); - name = Path.Combine(dir, Path.GetFileNameWithoutExtension(name) + replaceExtension); + name = Path.Combine(dir, Path.GetFileNameWithoutExtension(name) + Modifiers.ReplaceExtension); } } - string? addExtension = Header.GetStringFieldValue(DatHeader.AddExtensionKey); - if (!string.IsNullOrEmpty(addExtension)) - name += addExtension; + if (!string.IsNullOrEmpty(Modifiers.AddExtension)) + name += Modifiers.AddExtension; - if (useRomName && Header.GetBoolFieldValue(DatHeader.GameNameKey) == true) + if (useRomName && Modifiers.GameName) name = Path.Combine(machine?.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty, name); // Now assign back the formatted name name = $"{pre}{name}{post}"; if (useRomName) item.SetName(name); - else if (machine != null) - machine.SetFieldValue(Models.Metadata.Machine.NameKey, name); + else + machine?.SetFieldValue(Models.Metadata.Machine.NameKey, name); } /// diff --git a/SabreTools.DatFiles/DatFileTool.cs b/SabreTools.DatFiles/DatFileTool.cs index a7675e10..c123a410 100644 --- a/SabreTools.DatFiles/DatFileTool.cs +++ b/SabreTools.DatFiles/DatFileTool.cs @@ -79,11 +79,13 @@ namespace SabreTools.DatFiles /// Create a new DatFile from an existing DatHeader /// /// DatHeader to get the values from - public static DatFile CreateDatFile(DatHeader datHeader) + /// DatModifiers to get the values from + public static DatFile CreateDatFile(DatHeader datHeader, DatModifiers datModifiers) { DatFormat format = datHeader.GetFieldValue(DatHeader.DatFormatKey); DatFile datFile = CreateDatFile(format); datFile.SetHeader(datHeader); + datFile.SetModifiers(datModifiers); return datFile; } @@ -796,7 +798,7 @@ namespace SabreTools.DatFiles for (int j = 0; j < datHeaders.Count; j++) #endif { - DatFile diffData = CreateDatFile(datHeaders[j]); + DatFile diffData = CreateDatFile(datHeaders[j], new DatModifiers()); diffData.ResetDictionary(); FillWithSourceIndex(datFile, diffData, j); FillWithSourceIndexDB(datFile, diffData, j); @@ -845,7 +847,7 @@ namespace SabreTools.DatFiles datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, "datFile.All DATs"); string post = " (Duplicates)"; - DatFile dupeData = CreateDatFile(datFile.Header); + DatFile dupeData = CreateDatFile(datFile.Header, datFile.Modifiers); dupeData.Header.SetFieldValue(DatHeader.FileNameKey, dupeData.Header.GetStringFieldValue(DatHeader.FileNameKey) + post); dupeData.Header.SetFieldValue(Models.Metadata.Header.NameKey, dupeData.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + post); dupeData.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, dupeData.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + post); @@ -923,7 +925,7 @@ namespace SabreTools.DatFiles datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, "datFile.All DATs"); string post = " (Duplicates)"; - DatFile dupeData = CreateDatFile(datFile.Header); + DatFile dupeData = CreateDatFile(datFile.Header, datFile.Modifiers); dupeData.Header.SetFieldValue(DatHeader.FileNameKey, dupeData.Header.GetStringFieldValue(DatHeader.FileNameKey) + post); dupeData.Header.SetFieldValue(Models.Metadata.Header.NameKey, dupeData.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + post); dupeData.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, dupeData.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + post); @@ -1059,7 +1061,7 @@ namespace SabreTools.DatFiles #endif { string innerpost = $" ({j} - {inputs[j].GetNormalizedFileName(true)} Only)"; - DatFile diffData = CreateDatFile(datFile.Header); + DatFile diffData = CreateDatFile(datFile.Header, datFile.Modifiers); diffData.Header.SetFieldValue(DatHeader.FileNameKey, diffData.Header.GetStringFieldValue(DatHeader.FileNameKey) + innerpost); diffData.Header.SetFieldValue(Models.Metadata.Header.NameKey, diffData.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + innerpost); diffData.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, diffData.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + innerpost); @@ -1152,7 +1154,7 @@ namespace SabreTools.DatFiles #endif { string innerpost = $" ({j} - {inputs[j].GetNormalizedFileName(true)} Only)"; - DatFile diffData = CreateDatFile(datFile.Header); + DatFile diffData = CreateDatFile(datFile.Header, datFile.Modifiers); diffData.Header.SetFieldValue(DatHeader.FileNameKey, diffData.Header.GetStringFieldValue(DatHeader.FileNameKey) + innerpost); diffData.Header.SetFieldValue(Models.Metadata.Header.NameKey, diffData.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + innerpost); diffData.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, diffData.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + innerpost); @@ -1276,7 +1278,7 @@ namespace SabreTools.DatFiles datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, "All DATs"); string post = " (No Duplicates)"; - DatFile outerDiffData = CreateDatFile(datFile.Header); + DatFile outerDiffData = CreateDatFile(datFile.Header, datFile.Modifiers); outerDiffData.Header.SetFieldValue(DatHeader.FileNameKey, outerDiffData.Header.GetStringFieldValue(DatHeader.FileNameKey) + post); outerDiffData.Header.SetFieldValue(Models.Metadata.Header.NameKey, outerDiffData.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + post); outerDiffData.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, outerDiffData.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + post); @@ -1352,7 +1354,7 @@ namespace SabreTools.DatFiles datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, "All DATs"); string post = " (No Duplicates)"; - DatFile outerDiffData = CreateDatFile(datFile.Header); + DatFile outerDiffData = CreateDatFile(datFile.Header, datFile.Modifiers); outerDiffData.Header.SetFieldValue(DatHeader.FileNameKey, outerDiffData.Header.GetStringFieldValue(DatHeader.FileNameKey) + post); outerDiffData.Header.SetFieldValue(Models.Metadata.Header.NameKey, outerDiffData.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + post); outerDiffData.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, outerDiffData.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + post); @@ -1483,7 +1485,7 @@ namespace SabreTools.DatFiles { var input = inputs[i]; _staticLogger.User($"Adding DAT: {input.CurrentPath}"); - datFiles[i] = CreateDatFile(datFile.Header.CloneFiltering()); + datFiles[i] = CreateDatFile(datFile.Header.CloneFiltering(), datFile.Modifiers); Parser.ParseInto(datFiles[i], input, i, keep: true); #if NET40_OR_GREATER || NETCOREAPP }); diff --git a/SabreTools.DatFiles/DatHeader.cs b/SabreTools.DatFiles/DatHeader.cs index 3a840c7a..d499d793 100644 --- a/SabreTools.DatFiles/DatHeader.cs +++ b/SabreTools.DatFiles/DatHeader.cs @@ -15,11 +15,6 @@ namespace SabreTools.DatFiles { #region Constants - /// - /// Add a new extension to all items - /// - public const string AddExtensionKey = "ADDEXTENSION"; - /// /// Read or write format /// @@ -30,51 +25,6 @@ namespace SabreTools.DatFiles /// public const string FileNameKey = "FILENAME"; - /// - /// Output the machine name - /// - public const string GameNameKey = "GAMENAME"; - - /// - /// Input depot information - /// - public const string InputDepotKey = "INPUTDEPOT"; - - /// - /// Output depot information - /// - public const string OutputDepotKey = "OUTPUTDEPOT"; - - /// - /// Text to append to all outputted lines - /// - public const string PostfixKey = "POSTFIX"; - - /// - /// Text to prepend to all outputted lines - /// - public const string PrefixKey = "PREFIX"; - - /// - /// Wrap quotes around the entire line, sans prefix and postfix - /// - public const string QuotesKey = "QUOTES"; - - /// - /// Remove all item extensions - /// - public const string RemoveExtensionKey = "REMOVEEXTENSION"; - - /// - /// Replace all item extensions - /// - public const string ReplaceExtensionKey = "REPLACEEXTENSION"; - - /// - /// Output the item name - /// - public const string UseRomNameKey = "USEROMNAME"; - #endregion #region Fields @@ -220,28 +170,8 @@ namespace SabreTools.DatFiles public DatHeader CloneFiltering() { var header = new DatHeader(); - header.SetFieldValue(DatHeader.AddExtensionKey, - GetStringFieldValue(DatHeader.AddExtensionKey)); header.SetFieldValue(DatHeader.DatFormatKey, GetFieldValue(DatHeader.DatFormatKey)); - header.SetFieldValue(DatHeader.GameNameKey, - GetBoolFieldValue(DatHeader.GameNameKey)); - header.SetFieldValue(DatHeader.InputDepotKey, - GetFieldValue(DatHeader.InputDepotKey)?.Clone() as DepotInformation); - header.SetFieldValue(DatHeader.OutputDepotKey, - GetFieldValue(DatHeader.OutputDepotKey)?.Clone() as DepotInformation); - header.SetFieldValue(DatHeader.PostfixKey, - GetStringFieldValue(DatHeader.PostfixKey)); - header.SetFieldValue(DatHeader.PrefixKey, - GetStringFieldValue(DatHeader.PrefixKey)); - header.SetFieldValue(DatHeader.RemoveExtensionKey, - GetBoolFieldValue(DatHeader.RemoveExtensionKey)); - header.SetFieldValue(DatHeader.ReplaceExtensionKey, - GetStringFieldValue(DatHeader.ReplaceExtensionKey)); - header.SetFieldValue(DatHeader.QuotesKey, - GetBoolFieldValue(DatHeader.QuotesKey)); - header.SetFieldValue(DatHeader.UseRomNameKey, - GetBoolFieldValue(DatHeader.UseRomNameKey)); return header; } @@ -356,35 +286,6 @@ namespace SabreTools.DatFiles if (datHeader.GetFieldValue(DatHeader.DatFormatKey) != 0x00) SetFieldValue(DatHeader.DatFormatKey, datHeader.GetFieldValue(DatHeader.DatFormatKey)); - - if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(DatHeader.PrefixKey))) - SetFieldValue(DatHeader.PrefixKey, - datHeader.GetStringFieldValue(DatHeader.PrefixKey)); - - if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(DatHeader.PostfixKey))) - SetFieldValue(DatHeader.PostfixKey, - datHeader.GetStringFieldValue(DatHeader.PostfixKey)); - - if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(DatHeader.AddExtensionKey))) - SetFieldValue(DatHeader.AddExtensionKey, - datHeader.GetStringFieldValue(DatHeader.AddExtensionKey)); - - if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(DatHeader.ReplaceExtensionKey))) - SetFieldValue(DatHeader.ReplaceExtensionKey, - datHeader.GetStringFieldValue(DatHeader.ReplaceExtensionKey)); - - SetFieldValue(DatHeader.InputDepotKey, - datHeader.GetFieldValue(DatHeader.InputDepotKey)?.Clone() as DepotInformation); - SetFieldValue(DatHeader.OutputDepotKey, - datHeader.GetFieldValue(DatHeader.OutputDepotKey)?.Clone() as DepotInformation); - SetFieldValue(DatHeader.GameNameKey, - datHeader.GetBoolFieldValue(DatHeader.GameNameKey)); - SetFieldValue(DatHeader.QuotesKey, - datHeader.GetBoolFieldValue(DatHeader.QuotesKey)); - SetFieldValue(DatHeader.RemoveExtensionKey, - datHeader.GetBoolFieldValue(DatHeader.RemoveExtensionKey)); - SetFieldValue(DatHeader.UseRomNameKey, - datHeader.GetBoolFieldValue(DatHeader.UseRomNameKey)); } #endregion diff --git a/SabreTools.DatFiles/DatModifiers.cs b/SabreTools.DatFiles/DatModifiers.cs new file mode 100644 index 00000000..1d6817aa --- /dev/null +++ b/SabreTools.DatFiles/DatModifiers.cs @@ -0,0 +1,88 @@ +using System; + +namespace SabreTools.DatFiles +{ + /// + /// Represents various modifiers that can be applied to a DAT + /// + public sealed class DatModifiers : ICloneable + { + #region Fields + + /// + /// Text to prepend to all outputted lines + /// + public string? Prefix { get; set; } = null; + + /// + /// Text to append to all outputted lines + /// + public string? Postfix { get; set; } = null; + + /// + /// Add a new extension to all items + /// + public string? AddExtension { get; set; } = null; + + /// + /// Remove all item extensions + /// + public bool RemoveExtension { get; set; } = false; + + /// + /// Replace all item extensions + /// + public string? ReplaceExtension { get; set; } = null; + + /// + /// Output the machine name before the item name + /// + public bool GameName { get; set; } = false; + + /// + /// Wrap quotes around the entire line, sans prefix and postfix + /// + public bool Quotes { get; set; } = false; + + /// + /// Use the item name instead of machine name on output + /// + public bool UseRomName { get; set; } = false; + + /// + /// Input depot information + /// + public DepotInformation? InputDepot { get; set; } = null; + + /// + /// Output depot information + /// + public DepotInformation? OutputDepot { get; set; } = null; + + #endregion + + #region Cloning Methods + + /// + /// Clone the current modifiers + /// + public object Clone() + { + return new DatModifiers + { + Prefix = this.Prefix, + Postfix = this.Postfix, + AddExtension = this.AddExtension, + RemoveExtension = this.RemoveExtension, + ReplaceExtension = this.ReplaceExtension, + GameName = this.GameName, + Quotes = this.Quotes, + UseRomName = this.UseRomName, + InputDepot = (DepotInformation?)this.InputDepot?.Clone(), + OutputDepot = (DepotInformation?)this.OutputDepot?.Clone(), + }; + } + + #endregion + } +} \ No newline at end of file diff --git a/SabreTools.DatFiles/Formats/Missfile.cs b/SabreTools.DatFiles/Formats/Missfile.cs index 5b7855d2..dd3e5955 100644 --- a/SabreTools.DatFiles/Formats/Missfile.cs +++ b/SabreTools.DatFiles/Formats/Missfile.cs @@ -77,7 +77,7 @@ namespace SabreTools.DatFiles.Formats datItem = ProcessNullifiedItem(datItem); // Write out the item if we're using machine names or we're not ignoring - if (!Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true || !ShouldIgnore(datItem, ignoreblanks)) + if (!Modifiers.UseRomName || !ShouldIgnore(datItem, ignoreblanks)) WriteDatItem(sw, datItem, lastgame); // Set the new data to compare against @@ -138,11 +138,8 @@ namespace SabreTools.DatFiles.Formats var machine = ItemsDB.GetMachineForItem(datItem.Key); // Write out the item if we're using machine names or we're not ignoring - if (!Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true - || !ShouldIgnore(datItem.Value, ignoreblanks)) - { + if (!Modifiers.UseRomName || !ShouldIgnore(datItem.Value, ignoreblanks)) WriteDatItemDB(sw, datItem, lastgame); - } // Set the new data to compare against lastgame = machine.Value!.GetStringFieldValue(Models.Metadata.Machine.NameKey); @@ -177,9 +174,9 @@ namespace SabreTools.DatFiles.Formats ProcessItemName(datItem, machine, false, forceRomName: false); // Romba mode automatically uses item name - if (Header.GetFieldValue(DatHeader.OutputDepotKey)?.IsActive == true || Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true) + if (Modifiers.OutputDepot?.IsActive == true || Modifiers.UseRomName) sw.Write($"{datItem.GetName() ?? string.Empty}\n"); - else if (!Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true && datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) != lastgame) + else if (!Modifiers.UseRomName && datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) != lastgame) sw.Write($"{datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty}\n"); sw.Flush(); @@ -200,12 +197,11 @@ namespace SabreTools.DatFiles.Formats ProcessItemName(datItem.Value, machine.Value, forceRemoveQuotes: false, forceRomName: false); // Romba mode automatically uses item name - if (Header.GetFieldValue(DatHeader.OutputDepotKey)?.IsActive == true - || Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true) + if (Modifiers.OutputDepot?.IsActive == true || Modifiers.UseRomName) { sw.Write($"{datItem.Value.GetName() ?? string.Empty}\n"); } - else if (!Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true + else if (!Modifiers.UseRomName && machine.Value!.GetStringFieldValue(Models.Metadata.Machine.NameKey) != lastgame) { sw.Write($"{machine.Value!.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty}\n"); diff --git a/SabreTools.DatTools/DatFromDir.cs b/SabreTools.DatTools/DatFromDir.cs index 2287a37e..d256de42 100644 --- a/SabreTools.DatTools/DatFromDir.cs +++ b/SabreTools.DatTools/DatFromDir.cs @@ -218,7 +218,7 @@ namespace SabreTools.DatTools private static bool CheckDepotFile(DatFile datFile, string item) { // If we're not in Depot mode, return false - if (datFile.Header.GetFieldValue(DatHeader.OutputDepotKey)?.IsActive != true) + if (datFile.Modifiers.OutputDepot?.IsActive != true) return false; // Check the file as if it were in a depot @@ -329,7 +329,7 @@ namespace SabreTools.DatTools private static void ProcessDirectoryBlanks(DatFile datFile, string? basePath) { // If we're in depot mode, we don't process blanks - if (datFile.Header.GetFieldValue(DatHeader.OutputDepotKey)?.IsActive == true) + if (datFile.Modifiers.OutputDepot?.IsActive == true) return; List empties = basePath.ListEmpty() ?? []; diff --git a/SabreTools.DatTools/Rebuilder.cs b/SabreTools.DatTools/Rebuilder.cs index b3a36de0..6581aab9 100644 --- a/SabreTools.DatTools/Rebuilder.cs +++ b/SabreTools.DatTools/Rebuilder.cs @@ -118,7 +118,7 @@ namespace SabreTools.DatTools _staticLogger.User($"Checking hash '{hash}'"); // Get the extension path for the hash - string? subpath = Utilities.GetDepotPath(hash, datFile.Header.GetFieldValue(DatHeader.InputDepotKey)?.Depth ?? 0); + string? subpath = Utilities.GetDepotPath(hash, datFile.Modifiers.InputDepot?.Depth ?? 0); if (subpath == null) continue; @@ -681,7 +681,7 @@ namespace SabreTools.DatTools // Get the proper output path string sha1 = (datItem as Rom)!.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty; if (outputFormat == OutputFormat.TorrentGzipRomba) - outDir = Path.Combine(outDir, Utilities.GetDepotPath(sha1, datFile.Header.GetFieldValue(DatHeader.OutputDepotKey)?.Depth ?? 0) ?? string.Empty); + outDir = Path.Combine(outDir, Utilities.GetDepotPath(sha1, datFile.Modifiers.OutputDepot?.Depth ?? 0) ?? string.Empty); else outDir = Path.Combine(outDir, sha1 + ".gz"); @@ -727,7 +727,7 @@ namespace SabreTools.DatTools // Get the proper output path string sha1 = (datItem as Rom)!.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty; if (outputFormat == OutputFormat.TorrentXZRomba) - outDir = Path.Combine(outDir, Utilities.GetDepotPath(sha1, datFile.Header.GetFieldValue(DatHeader.OutputDepotKey)?.Depth ?? 0) ?? string.Empty).Replace(".gz", ".xz"); + outDir = Path.Combine(outDir, Utilities.GetDepotPath(sha1, datFile.Modifiers.OutputDepot?.Depth ?? 0) ?? string.Empty).Replace(".gz", ".xz"); else outDir = Path.Combine(outDir, sha1 + ".xz"); @@ -832,9 +832,9 @@ namespace SabreTools.DatTools // Set the depth fields where appropriate if (outputArchive is GZipArchive gzipArchive) - gzipArchive.Depth = datFile.Header.GetFieldValue(DatHeader.OutputDepotKey)?.Depth ?? 0; + gzipArchive.Depth = datFile.Modifiers.OutputDepot?.Depth ?? 0; else if (outputArchive is XZArchive xzArchive) - xzArchive.Depth = datFile.Header.GetFieldValue(DatHeader.OutputDepotKey)?.Depth ?? 0; + xzArchive.Depth = datFile.Modifiers.OutputDepot?.Depth ?? 0; return outputArchive; } diff --git a/SabreTools.DatTools/Splitter.cs b/SabreTools.DatTools/Splitter.cs index e5a43952..8c3c8fd1 100644 --- a/SabreTools.DatTools/Splitter.cs +++ b/SabreTools.DatTools/Splitter.cs @@ -54,12 +54,12 @@ namespace SabreTools.DatTools string newExtBString = string.Join(",", newExtB); // Set all of the appropriate outputs for each of the subsets - DatFile extADat = DatFileTool.CreateDatFile(datFile.Header.CloneStandard()); + DatFile extADat = DatFileTool.CreateDatFile(datFile.Header.CloneStandard(), datFile.Modifiers); extADat.Header.SetFieldValue(DatHeader.FileNameKey, extADat.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" ({newExtAString})"); extADat.Header.SetFieldValue(Models.Metadata.Header.NameKey, extADat.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" ({newExtAString})"); extADat.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, extADat.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" ({newExtAString})"); - DatFile extBDat = DatFileTool.CreateDatFile(datFile.Header.CloneStandard()); + DatFile extBDat = DatFileTool.CreateDatFile(datFile.Header.CloneStandard(), datFile.Modifiers); extBDat.Header.SetFieldValue(DatHeader.FileNameKey, extBDat.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" ({newExtBString})"); extBDat.Header.SetFieldValue(Models.Metadata.Header.NameKey, extBDat.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" ({newExtBString})"); extBDat.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, extBDat.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" ({newExtBString})"); @@ -131,12 +131,12 @@ namespace SabreTools.DatTools string newExtBString = string.Join(",", newExtB); // Set all of the appropriate outputs for each of the subsets - DatFile extADat = DatFileTool.CreateDatFile(datFile.Header.CloneStandard()); + DatFile extADat = DatFileTool.CreateDatFile(datFile.Header.CloneStandard(), datFile.Modifiers); extADat.Header.SetFieldValue(DatHeader.FileNameKey, extADat.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" ({newExtAString})"); extADat.Header.SetFieldValue(Models.Metadata.Header.NameKey, extADat.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" ({newExtAString})"); extADat.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, extADat.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" ({newExtAString})"); - DatFile extBDat = DatFileTool.CreateDatFile(datFile.Header.CloneStandard()); + DatFile extBDat = DatFileTool.CreateDatFile(datFile.Header.CloneStandard(), datFile.Modifiers); extBDat.Header.SetFieldValue(DatHeader.FileNameKey, extBDat.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" ({newExtBString})"); extBDat.Header.SetFieldValue(Models.Metadata.Header.NameKey, extBDat.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" ({newExtBString})"); extBDat.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, extBDat.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" ({newExtBString})"); @@ -232,7 +232,7 @@ namespace SabreTools.DatTools Dictionary fieldDats = []; foreach (var kvp in mappings) { - fieldDats[kvp.Key] = DatFileTool.CreateDatFile(datFile.Header.CloneStandard()); + fieldDats[kvp.Key] = DatFileTool.CreateDatFile(datFile.Header.CloneStandard(), datFile.Modifiers); fieldDats[kvp.Key].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[kvp.Key].Header.GetStringFieldValue(DatHeader.FileNameKey) + kvp.Value); fieldDats[kvp.Key].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[kvp.Key].Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + kvp.Value); fieldDats[kvp.Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[kvp.Key].Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + kvp.Value); @@ -349,7 +349,7 @@ namespace SabreTools.DatTools Dictionary fieldDats = []; foreach (var kvp in mappings) { - fieldDats[kvp.Key] = DatFileTool.CreateDatFile(datFile.Header.CloneStandard()); + fieldDats[kvp.Key] = DatFileTool.CreateDatFile(datFile.Header.CloneStandard(), datFile.Modifiers); fieldDats[kvp.Key].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[kvp.Key].Header.GetStringFieldValue(DatHeader.FileNameKey) + kvp.Value); fieldDats[kvp.Key].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[kvp.Key].Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + kvp.Value); fieldDats[kvp.Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[kvp.Key].Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + kvp.Value); @@ -492,7 +492,7 @@ namespace SabreTools.DatTools datFile.BucketBy(ItemKey.Machine, lower: false, norename: true); // Create a temporary DAT to add things to - DatFile tempDat = DatFileTool.CreateDatFile(datFile.Header); + DatFile tempDat = DatFileTool.CreateDatFile(datFile.Header, datFile.Modifiers); tempDat.Header.SetFieldValue(Models.Metadata.Header.NameKey, null); // Sort the input keys @@ -512,7 +512,7 @@ namespace SabreTools.DatTools if (tempDat.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) != null && tempDat.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) != Path.GetDirectoryName(key)) { // Reset the DAT for the next items - tempDat = DatFileTool.CreateDatFile(datFile.Header); + tempDat = DatFileTool.CreateDatFile(datFile.Header, datFile.Modifiers); tempDat.Header.SetFieldValue(Models.Metadata.Header.NameKey, null); } @@ -615,12 +615,12 @@ namespace SabreTools.DatTools // Create each of the respective output DATs InternalStopwatch watch = new($"Splitting DAT by size"); - DatFile lessThan = DatFileTool.CreateDatFile(datFile.Header.CloneStandard()); + DatFile lessThan = DatFileTool.CreateDatFile(datFile.Header.CloneStandard(), datFile.Modifiers); lessThan.Header.SetFieldValue(DatHeader.FileNameKey, lessThan.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" (less than {radix})"); lessThan.Header.SetFieldValue(Models.Metadata.Header.NameKey, lessThan.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" (less than {radix})"); lessThan.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, lessThan.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" (less than {radix})"); - DatFile greaterThan = DatFileTool.CreateDatFile(datFile.Header.CloneStandard()); + DatFile greaterThan = DatFileTool.CreateDatFile(datFile.Header.CloneStandard(), datFile.Modifiers); greaterThan.Header.SetFieldValue(DatHeader.FileNameKey, greaterThan.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" (equal-greater than {radix})"); greaterThan.Header.SetFieldValue(Models.Metadata.Header.NameKey, greaterThan.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" (equal-greater than {radix})"); greaterThan.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, greaterThan.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" (equal-greater than {radix})"); @@ -681,12 +681,12 @@ namespace SabreTools.DatTools // Create each of the respective output DATs var watch = new InternalStopwatch($"Splitting DAT by size"); - DatFile lessThan = DatFileTool.CreateDatFile(datFile.Header.CloneStandard()); + DatFile lessThan = DatFileTool.CreateDatFile(datFile.Header.CloneStandard(), datFile.Modifiers); lessThan.Header.SetFieldValue(DatHeader.FileNameKey, lessThan.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" (less than {radix})"); lessThan.Header.SetFieldValue(Models.Metadata.Header.NameKey, lessThan.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" (less than {radix})"); lessThan.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, lessThan.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" (less than {radix})"); - DatFile greaterThan = DatFileTool.CreateDatFile(datFile.Header.CloneStandard()); + DatFile greaterThan = DatFileTool.CreateDatFile(datFile.Header.CloneStandard(), datFile.Modifiers); greaterThan.Header.SetFieldValue(DatHeader.FileNameKey, greaterThan.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" (equal-greater than {radix})"); greaterThan.Header.SetFieldValue(Models.Metadata.Header.NameKey, greaterThan.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" (equal-greater than {radix})"); greaterThan.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, greaterThan.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" (equal-greater than {radix})"); @@ -782,7 +782,7 @@ namespace SabreTools.DatTools // Initialize everything long currentSize = 0; long currentIndex = 0; - DatFile currentDat = DatFileTool.CreateDatFile(datFile.Header.CloneStandard()); + DatFile currentDat = DatFileTool.CreateDatFile(datFile.Header.CloneStandard(), datFile.Modifiers); currentDat.Header.SetFieldValue(DatHeader.FileNameKey, currentDat.Header.GetStringFieldValue(DatHeader.FileNameKey) + $"_{currentIndex}"); currentDat.Header.SetFieldValue(Models.Metadata.Header.NameKey, currentDat.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $"_{currentIndex}"); currentDat.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, currentDat.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $"_{currentIndex}"); @@ -825,7 +825,7 @@ namespace SabreTools.DatTools datFiles.Add(currentDat); currentSize = 0; currentIndex++; - currentDat = DatFileTool.CreateDatFile(datFile.Header.CloneStandard()); + currentDat = DatFileTool.CreateDatFile(datFile.Header.CloneStandard(), datFile.Modifiers); currentDat.Header.SetFieldValue(DatHeader.FileNameKey, currentDat.Header.GetStringFieldValue(DatHeader.FileNameKey) + $"_{currentIndex}"); currentDat.Header.SetFieldValue(Models.Metadata.Header.NameKey, currentDat.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $"_{currentIndex}"); currentDat.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, currentDat.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $"_{currentIndex}"); @@ -869,7 +869,7 @@ namespace SabreTools.DatTools // Setup all of the DatFiles foreach (ItemType itemType in outputTypes) { - typeDats[itemType] = DatFileTool.CreateDatFile(datFile.Header.CloneStandard()); + typeDats[itemType] = DatFileTool.CreateDatFile(datFile.Header.CloneStandard(), datFile.Modifiers); typeDats[itemType].Header.SetFieldValue(DatHeader.FileNameKey, typeDats[itemType].Header.GetStringFieldValue(DatHeader.FileNameKey) + $" ({itemType})"); typeDats[itemType].Header.SetFieldValue(Models.Metadata.Header.NameKey, typeDats[itemType].Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" ({itemType})"); typeDats[itemType].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, typeDats[itemType].Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" ({itemType})"); diff --git a/SabreTools.DatTools/Verification.cs b/SabreTools.DatTools/Verification.cs index 2f6ee95f..ffff17e8 100644 --- a/SabreTools.DatTools/Verification.cs +++ b/SabreTools.DatTools/Verification.cs @@ -66,7 +66,7 @@ namespace SabreTools.DatTools _staticLogger.User($"Checking hash '{hash}'"); // Get the extension path for the hash - string? subpath = Utilities.GetDepotPath(hash, datFile.Header.GetFieldValue(DatHeader.InputDepotKey)?.Depth ?? 0); + string? subpath = Utilities.GetDepotPath(hash, datFile.Modifiers.InputDepot?.Depth ?? 0); if (subpath == null) continue; @@ -151,7 +151,7 @@ namespace SabreTools.DatTools _staticLogger.User($"Checking hash '{hash}'"); // Get the extension path for the hash - string? subpath = Utilities.GetDepotPath(hash, datFile.Header.GetFieldValue(DatHeader.InputDepotKey)?.Depth ?? 0); + string? subpath = Utilities.GetDepotPath(hash, datFile.Modifiers.InputDepot?.Depth ?? 0); if (subpath == null) continue; diff --git a/SabreTools/Features/BaseFeature.cs b/SabreTools/Features/BaseFeature.cs index 956109fb..b5ffdb80 100644 --- a/SabreTools/Features/BaseFeature.cs +++ b/SabreTools/Features/BaseFeature.cs @@ -1802,6 +1802,12 @@ Some special strings that can be used: /// Public because it's an indicator something went wrong public DatHeader? Header { get; set; } + /// + /// Pre-configured DatModifiers + /// + /// Public because it's an indicator something went wrong + protected DatModifiers? Modifiers { get; set; } + /// /// Lowest log level for output /// @@ -1907,6 +1913,7 @@ Some special strings that can be used: Extras = GetExtras(features); FilterRunner = GetFilterRunner(features); Header = GetDatHeader(features); + Modifiers = GetDatModifiers(features); LogLevel = GetString(features, LogLevelStringValue).AsLogLevel(); OutputDir = GetString(features, OutputDirStringValue)?.Trim('"'); Remover = GetRemover(features); @@ -1922,6 +1929,8 @@ Some special strings that can be used: // Failure conditions if (Header == null) return false; + if (Modifiers == null) + return false; return true; } @@ -2171,16 +2180,7 @@ Some special strings that can be used: /// private DatHeader? GetDatHeader(Dictionary features) { - // Get the depot information - var inputDepot = new DepotInformation( - GetBoolean(features, DepotValue), - GetInt32(features, DepotDepthInt32Value)); - var outputDepot = new DepotInformation( - GetBoolean(features, RombaValue), - GetInt32(features, RombaDepthInt32Value)); - var datHeader = new DatHeader(); - datHeader.SetFieldValue(DatHeader.AddExtensionKey, GetString(features, AddExtensionStringValue)); datHeader.SetFieldValue(Models.Metadata.Header.AuthorKey, GetString(features, AuthorStringValue)); datHeader.SetFieldValue(Models.Metadata.Header.CategoryKey, GetString(features, CategoryStringValue)); datHeader.SetFieldValue(Models.Metadata.Header.CommentKey, GetString(features, CommentStringValue)); @@ -2191,18 +2191,9 @@ Some special strings that can be used: datHeader.SetFieldValue(Models.Metadata.Header.ForceMergingKey, GetString(features, ForceMergingStringValue).AsEnumValue()); datHeader.SetFieldValue(Models.Metadata.Header.ForceNodumpKey, GetString(features, ForceNodumpStringValue).AsEnumValue()); datHeader.SetFieldValue(Models.Metadata.Header.ForceNodumpKey, GetString(features, ForcePackingStringValue).AsEnumValue()); - datHeader.SetFieldValue(DatHeader.GameNameKey, GetBoolean(features, GamePrefixValue)); datHeader.SetFieldValue(Models.Metadata.Header.HeaderKey, GetString(features, HeaderStringValue)); datHeader.SetFieldValue(Models.Metadata.Header.HomepageKey, GetString(features, HomepageStringValue)); - datHeader.SetFieldValue(DatHeader.InputDepotKey, inputDepot); datHeader.SetFieldValue(Models.Metadata.Header.NameKey, GetString(features, NameStringValue)); - datHeader.SetFieldValue(DatHeader.OutputDepotKey, outputDepot); - datHeader.SetFieldValue(DatHeader.PostfixKey, GetString(features, PostfixStringValue)); - datHeader.SetFieldValue(DatHeader.PrefixKey, GetString(features, PrefixStringValue)); - datHeader.SetFieldValue(DatHeader.QuotesKey, GetBoolean(features, QuotesValue)); - datHeader.SetFieldValue(DatHeader.RemoveExtensionKey, GetBoolean(features, RemoveExtensionsValue)); - datHeader.SetFieldValue(DatHeader.ReplaceExtensionKey, GetString(features, ReplaceExtensionStringValue)); - datHeader.SetFieldValue(DatHeader.UseRomNameKey, GetBoolean(features, RomsValue)); datHeader.SetFieldValue(Models.Metadata.Header.RootDirKey, GetString(features, RootStringValue)); datHeader.SetFieldValue(Models.Metadata.Header.TypeKey, GetBoolean(features, SuperdatValue) ? "SuperDAT" : null); datHeader.SetFieldValue(Models.Metadata.Header.UrlKey, GetString(features, UrlStringValue)); @@ -2229,6 +2220,35 @@ Some special strings that can be used: return datHeader; } + /// + /// Get DatModifiers from feature list + /// + private DatModifiers? GetDatModifiers(Dictionary features) + { + // Get the depot information + var inputDepot = new DepotInformation( + GetBoolean(features, DepotValue), + GetInt32(features, DepotDepthInt32Value)); + var outputDepot = new DepotInformation( + GetBoolean(features, RombaValue), + GetInt32(features, RombaDepthInt32Value)); + + var datModifiers = new DatModifiers(); + + datModifiers.Prefix = GetString(features, PrefixStringValue); + datModifiers.Postfix = GetString(features, PostfixStringValue); + datModifiers.AddExtension = GetString(features, AddExtensionStringValue); + datModifiers.RemoveExtension = GetBoolean(features, RemoveExtensionsValue); + datModifiers.ReplaceExtension = GetString(features, ReplaceExtensionStringValue); + datModifiers.GameName = GetBoolean(features, GamePrefixValue); + datModifiers.Quotes = GetBoolean(features, QuotesValue); + datModifiers.UseRomName = GetBoolean(features, RomsValue); + datModifiers.InputDepot = inputDepot; + datModifiers.OutputDepot = outputDepot; + + return datModifiers; + } + /// /// Get DedupeType from feature list /// diff --git a/SabreTools/Features/DatFromDir.cs b/SabreTools/Features/DatFromDir.cs index aecdc236..2381515a 100644 --- a/SabreTools/Features/DatFromDir.cs +++ b/SabreTools/Features/DatFromDir.cs @@ -71,7 +71,7 @@ namespace SabreTools.Features Remover!.PopulateExclusionsFromList(["DatItem.Date"]); // Create a new DATFromDir object and process the inputs - DatFile basedat = DatFileTool.CreateDatFile(Header!); + DatFile basedat = DatFileTool.CreateDatFile(Header!, Modifiers!); basedat.Header.SetFieldValue(Models.Metadata.Header.DateKey, DateTime.Now.ToString("yyyy-MM-dd")); // Update the cleaner based on certain flags @@ -84,7 +84,7 @@ namespace SabreTools.Features if (Directory.Exists(path) || File.Exists(path)) { // Clone the base Dat for information - DatFile datdata = DatFileTool.CreateDatFile(basedat.Header); + DatFile datdata = DatFileTool.CreateDatFile(basedat.Header, basedat.Modifiers); // Get the base path and fill the header, if needed string basePath = Path.GetFullPath(path); diff --git a/SabreTools/Features/Sort.cs b/SabreTools/Features/Sort.cs index 4e3be78e..f194f683 100644 --- a/SabreTools/Features/Sort.cs +++ b/SabreTools/Features/Sort.cs @@ -69,8 +69,8 @@ namespace SabreTools.Features var outputFormat = GetOutputFormat(features); // Get the depots - var inputDepot = Header!.GetFieldValue(DatHeader.InputDepotKey); - var outputDepot = Header!.GetFieldValue(DatHeader.OutputDepotKey); + var inputDepot = Modifiers!.InputDepot; + var outputDepot = Modifiers.OutputDepot; // If we have the romba flag if (outputDepot?.IsActive == true) @@ -101,11 +101,11 @@ namespace SabreTools.Features continue; // Set depot information - datdata.Header.SetFieldValue(DatHeader.InputDepotKey, inputDepot?.Clone() as DepotInformation); - datdata.Header.SetFieldValue(DatHeader.OutputDepotKey, outputDepot?.Clone() as DepotInformation); + datdata.Modifiers.InputDepot = inputDepot?.Clone() as DepotInformation; + datdata.Modifiers.OutputDepot = outputDepot?.Clone() as DepotInformation; // If we have overridden the header skipper, set it now - if (!string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey))) + if (!string.IsNullOrEmpty(Header!.GetStringFieldValue(Models.Metadata.Header.HeaderKey))) datdata.Header.SetFieldValue(Models.Metadata.Header.HeaderKey, Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey)); // If we have the depot flag, respect it @@ -140,11 +140,11 @@ namespace SabreTools.Features } // Set depot information - datdata.Header.SetFieldValue(DatHeader.InputDepotKey, inputDepot?.Clone() as DepotInformation); - datdata.Header.SetFieldValue(DatHeader.OutputDepotKey, outputDepot?.Clone() as DepotInformation); + datdata.Modifiers.InputDepot = inputDepot?.Clone() as DepotInformation; + datdata.Modifiers.OutputDepot = outputDepot?.Clone() as DepotInformation; // If we have overridden the header skipper, set it now - string? headerSkpper = Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey); + string? headerSkpper = Header!.GetStringFieldValue(Models.Metadata.Header.HeaderKey); if (!string.IsNullOrEmpty(headerSkpper)) datdata.Header.SetFieldValue(Models.Metadata.Header.HeaderKey, headerSkpper); diff --git a/SabreTools/Features/Split.cs b/SabreTools/Features/Split.cs index 57117a07..cb8a308e 100644 --- a/SabreTools/Features/Split.cs +++ b/SabreTools/Features/Split.cs @@ -64,7 +64,7 @@ namespace SabreTools.Features foreach (ParentablePath file in files) { // Create and fill the new DAT - DatFile internalDat = DatFileTool.CreateDatFile(Header!); + DatFile internalDat = DatFileTool.CreateDatFile(Header!, Modifiers!); Parser.ParseInto(internalDat, file); // Get the output directory diff --git a/SabreTools/Features/Update.cs b/SabreTools/Features/Update.cs index 3a1f88d0..54476f2e 100644 --- a/SabreTools/Features/Update.cs +++ b/SabreTools/Features/Update.cs @@ -95,12 +95,12 @@ namespace SabreTools.Features var updateMode = GetUpdateMode(features); // Normalize the extensions - Header!.SetFieldValue(DatHeader.AddExtensionKey, (string.IsNullOrEmpty(Header.GetStringFieldValue(DatHeader.AddExtensionKey)) || Header.GetStringFieldValue(DatHeader.AddExtensionKey)!.StartsWith(".") - ? Header.GetStringFieldValue(DatHeader.AddExtensionKey) - : $".{Header.GetStringFieldValue(DatHeader.AddExtensionKey)}")); - Header.SetFieldValue(DatHeader.ReplaceExtensionKey, (string.IsNullOrEmpty(Header.GetStringFieldValue(DatHeader.ReplaceExtensionKey)) || Header.GetStringFieldValue(DatHeader.ReplaceExtensionKey)!.StartsWith(".") - ? Header.GetStringFieldValue(DatHeader.ReplaceExtensionKey) - : $".{Header.GetStringFieldValue(DatHeader.ReplaceExtensionKey)}")); + Modifiers!.AddExtension = string.IsNullOrEmpty(Modifiers.AddExtension) || Modifiers.AddExtension!.StartsWith(".") + ? Modifiers.AddExtension + : $".{Modifiers.AddExtension}"; + Modifiers.ReplaceExtension = string.IsNullOrEmpty(Modifiers.ReplaceExtension) || Modifiers.ReplaceExtension!.StartsWith(".") + ? Modifiers.ReplaceExtension + : $".{Modifiers.ReplaceExtension}"; // If we're in a non-replacement special update mode and the names aren't set, set defaults if (updateMode != 0 @@ -111,7 +111,7 @@ namespace SabreTools.Features #endif { // Get the values that will be used - if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.DateKey))) + if (string.IsNullOrEmpty(Header!.GetStringFieldValue(Models.Metadata.Header.DateKey))) Header.SetFieldValue(Models.Metadata.Header.DateKey, DateTime.Now.ToString("yyyy-MM-dd")); if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.NameKey))) @@ -168,7 +168,7 @@ namespace SabreTools.Features #endif { // Create a new base DatFile - DatFile datFile = DatFileTool.CreateDatFile(Header); + DatFile datFile = DatFileTool.CreateDatFile(Header!, Modifiers); _logger.User($"Processing '{Path.GetFileName(inputPath.CurrentPath)}'"); // Check the current format @@ -228,7 +228,7 @@ namespace SabreTools.Features } // Create a DAT to capture inputs - DatFile userInputDat = DatFileTool.CreateDatFile(Header); + DatFile userInputDat = DatFileTool.CreateDatFile(Header!, Modifiers); // Populate using the correct set List datHeaders; @@ -391,7 +391,7 @@ namespace SabreTools.Features #endif { // Parse the path to a new DatFile - DatFile repDat = DatFileTool.CreateDatFile(Header); + DatFile repDat = DatFileTool.CreateDatFile(Header!, Modifiers); Parser.ParseInto(repDat, inputPath, indexId: 1, keep: true); // Perform additional processing steps @@ -432,7 +432,7 @@ namespace SabreTools.Features #endif { // Parse the path to a new DatFile - DatFile repDat = DatFileTool.CreateDatFile(Header); + DatFile repDat = DatFileTool.CreateDatFile(Header!, Modifiers); Parser.ParseInto(repDat, inputPath, indexId: 1, keep: true); // Perform additional processing steps diff --git a/SabreTools/Features/Verify.cs b/SabreTools/Features/Verify.cs index 5aab9b04..57ffaecc 100644 --- a/SabreTools/Features/Verify.cs +++ b/SabreTools/Features/Verify.cs @@ -74,11 +74,11 @@ namespace SabreTools.Features Remover!.ApplyRemovals(datdata); // Set depot information - var inputDepot = Header!.GetFieldValue(DatHeader.InputDepotKey); - datdata.Header.SetFieldValue(DatHeader.InputDepotKey, inputDepot?.Clone() as DepotInformation); + var inputDepot = Modifiers!.InputDepot; + datdata.Modifiers.InputDepot = inputDepot?.Clone() as DepotInformation; // If we have overridden the header skipper, set it now - string? headerSkipper = Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey); + string? headerSkipper = Header!.GetStringFieldValue(Models.Metadata.Header.HeaderKey); if (!string.IsNullOrEmpty(headerSkipper)) datdata.Header.SetFieldValue(Models.Metadata.Header.HeaderKey, headerSkipper); @@ -126,11 +126,11 @@ namespace SabreTools.Features Remover!.ApplyRemovals(datdata); // Set depot information - var inputDepot = Header!.GetFieldValue(DatHeader.InputDepotKey); - datdata.Header.SetFieldValue(DatHeader.InputDepotKey, inputDepot?.Clone() as DepotInformation); + var inputDepot = Modifiers!.InputDepot; + datdata.Modifiers.InputDepot = inputDepot?.Clone() as DepotInformation; // If we have overridden the header skipper, set it now - string? headerSkipper = Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey); + string? headerSkipper = Header!.GetStringFieldValue(Models.Metadata.Header.HeaderKey); if (!string.IsNullOrEmpty(headerSkipper)) datdata.Header.SetFieldValue(Models.Metadata.Header.HeaderKey, headerSkipper);