From 5c7de45f4f3882b72bcf49c2424bb37db2292dc6 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Sun, 14 Jun 2026 15:58:53 -0400 Subject: [PATCH] Disc categories are the same, just ordered differently in the UI --- .../Data/ExtensionsTests.cs | 63 +++++++++++++++++++ .../RedumpInfo/ExtensionsTests.cs | 63 ------------------- .../RedumpOrg/ExtensionsTests.cs | 63 ------------------- .../Converters/DiscCategoryConverter.cs | 4 +- SabreTools.RedumpLib/Data/Enumerations.cs | 39 ++++++++++++ SabreTools.RedumpLib/Data/Extensions.cs | 39 ++++++++++++ .../Converters/DiscCategoryConverter.cs | 35 ----------- .../RedumpInfo/Data/Enumerations.cs | 39 ------------ .../RedumpInfo/Data/Extensions.cs | 40 ------------ .../RedumpOrg/Data/Enumerations.cs | 39 ------------ .../RedumpOrg/Data/Extensions.cs | 39 ------------ 11 files changed, 143 insertions(+), 320 deletions(-) rename SabreTools.RedumpLib/{RedumpOrg => }/Converters/DiscCategoryConverter.cs (91%) delete mode 100644 SabreTools.RedumpLib/RedumpInfo/Converters/DiscCategoryConverter.cs diff --git a/SabreTools.RedumpLib.Test/Data/ExtensionsTests.cs b/SabreTools.RedumpLib.Test/Data/ExtensionsTests.cs index 55110fa..fe84f64 100644 --- a/SabreTools.RedumpLib.Test/Data/ExtensionsTests.cs +++ b/SabreTools.RedumpLib.Test/Data/ExtensionsTests.cs @@ -40,6 +40,69 @@ namespace SabreTools.RedumpLib.Test.Data #endregion + #region Disc Category + + /// + /// Check that every DiscCategory has a long name provided + /// + /// DiscCategory value to check + /// True to expect a null value, false otherwise + [Theory] + [MemberData(nameof(GenerateDiscCategoryTestData))] + public void DiscCategory_LongName(DiscCategory? discCategory, bool expectNull) + { + var actual = discCategory.LongName(); + + if (expectNull) + Assert.Null(actual); + else + Assert.NotNull(actual); + } + + /// + /// Check that every DiscCategory can be mapped from a string + /// + /// DiscCategory value to check + /// True to expect a null value, false otherwise + [Theory] + [MemberData(nameof(GenerateDiscCategoryTestData))] + public void DiscCategory_ToDiscCategory(DiscCategory? discCategory, bool expectNull) + { + string? longName = discCategory.LongName(); + string? longNameSpaceless = longName?.Replace(" ", string.Empty); + + var actualNormal = longName.ToDiscCategory(); + var actualSpaceless = longNameSpaceless.ToDiscCategory(); + + if (expectNull) + { + Assert.Null(actualNormal); + Assert.Null(actualSpaceless); + } + else + { + Assert.Equal(discCategory, actualNormal); + Assert.Equal(discCategory, actualSpaceless); + } + } + + /// + /// Generate a test set of DiscCategory values + /// + /// MemberData-compatible list of DiscCategory values + public static TheoryData GenerateDiscCategoryTestData() + { + var testData = new TheoryData() { { null, true } }; + foreach (DiscCategory? discCategory in Enum.GetValues().Cast()) + { + testData.Add(discCategory, false); + } + + return testData; + } + + #endregion + #region Language /// diff --git a/SabreTools.RedumpLib.Test/RedumpInfo/ExtensionsTests.cs b/SabreTools.RedumpLib.Test/RedumpInfo/ExtensionsTests.cs index 57adda1..810b290 100644 --- a/SabreTools.RedumpLib.Test/RedumpInfo/ExtensionsTests.cs +++ b/SabreTools.RedumpLib.Test/RedumpInfo/ExtensionsTests.cs @@ -117,69 +117,6 @@ namespace SabreTools.RedumpLib.Test.RedumpInfo #endregion - #region Disc Category - - /// - /// Check that every DiscCategory has a long name provided - /// - /// DiscCategory value to check - /// True to expect a null value, false otherwise - [Theory] - [MemberData(nameof(GenerateDiscCategoryTestData))] - public void DiscCategory_LongName(DiscCategory? discCategory, bool expectNull) - { - var actual = discCategory.LongName(); - - if (expectNull) - Assert.Null(actual); - else - Assert.NotNull(actual); - } - - /// - /// Check that every DiscCategory can be mapped from a string - /// - /// DiscCategory value to check - /// True to expect a null value, false otherwise - [Theory] - [MemberData(nameof(GenerateDiscCategoryTestData))] - public void DiscCategory_ToDiscCategory(DiscCategory? discCategory, bool expectNull) - { - string? longName = discCategory.LongName(); - string? longNameSpaceless = longName?.Replace(" ", string.Empty); - - var actualNormal = longName.ToDiscCategory(); - var actualSpaceless = longNameSpaceless.ToDiscCategory(); - - if (expectNull) - { - Assert.Null(actualNormal); - Assert.Null(actualSpaceless); - } - else - { - Assert.Equal(discCategory, actualNormal); - Assert.Equal(discCategory, actualSpaceless); - } - } - - /// - /// Generate a test set of DiscCategory values - /// - /// MemberData-compatible list of DiscCategory values - public static TheoryData GenerateDiscCategoryTestData() - { - var testData = new TheoryData() { { null, true } }; - foreach (DiscCategory? discCategory in Enum.GetValues().Cast()) - { - testData.Add(discCategory, false); - } - - return testData; - } - - #endregion - #region Disc Subpath /// diff --git a/SabreTools.RedumpLib.Test/RedumpOrg/ExtensionsTests.cs b/SabreTools.RedumpLib.Test/RedumpOrg/ExtensionsTests.cs index 39615cd..78dbf67 100644 --- a/SabreTools.RedumpLib.Test/RedumpOrg/ExtensionsTests.cs +++ b/SabreTools.RedumpLib.Test/RedumpOrg/ExtensionsTests.cs @@ -118,69 +118,6 @@ namespace SabreTools.RedumpLib.Test.RedumpOrg #endregion - #region Disc Category - - /// - /// Check that every DiscCategory has a long name provided - /// - /// DiscCategory value to check - /// True to expect a null value, false otherwise - [Theory] - [MemberData(nameof(GenerateDiscCategoryTestData))] - public void DiscCategory_LongName(DiscCategory? discCategory, bool expectNull) - { - var actual = discCategory.LongName(); - - if (expectNull) - Assert.Null(actual); - else - Assert.NotNull(actual); - } - - /// - /// Check that every DiscCategory can be mapped from a string - /// - /// DiscCategory value to check - /// True to expect a null value, false otherwise - [Theory] - [MemberData(nameof(GenerateDiscCategoryTestData))] - public void DiscCategory_ToDiscCategory(DiscCategory? discCategory, bool expectNull) - { - string? longName = discCategory.LongName(); - string? longNameSpaceless = longName?.Replace(" ", string.Empty); - - var actualNormal = longName.ToDiscCategory(); - var actualSpaceless = longNameSpaceless.ToDiscCategory(); - - if (expectNull) - { - Assert.Null(actualNormal); - Assert.Null(actualSpaceless); - } - else - { - Assert.Equal(discCategory, actualNormal); - Assert.Equal(discCategory, actualSpaceless); - } - } - - /// - /// Generate a test set of DiscCategory values - /// - /// MemberData-compatible list of DiscCategory values - public static TheoryData GenerateDiscCategoryTestData() - { - var testData = new TheoryData() { { null, true } }; - foreach (DiscCategory? discCategory in Enum.GetValues().Cast()) - { - testData.Add(discCategory, false); - } - - return testData; - } - - #endregion - #region Disc Subpath /// diff --git a/SabreTools.RedumpLib/RedumpOrg/Converters/DiscCategoryConverter.cs b/SabreTools.RedumpLib/Converters/DiscCategoryConverter.cs similarity index 91% rename from SabreTools.RedumpLib/RedumpOrg/Converters/DiscCategoryConverter.cs rename to SabreTools.RedumpLib/Converters/DiscCategoryConverter.cs index 0151b79..49c66c7 100644 --- a/SabreTools.RedumpLib/RedumpOrg/Converters/DiscCategoryConverter.cs +++ b/SabreTools.RedumpLib/Converters/DiscCategoryConverter.cs @@ -1,9 +1,9 @@ using System; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using SabreTools.RedumpLib.RedumpOrg.Data; +using SabreTools.RedumpLib.Data; -namespace SabreTools.RedumpLib.RedumpOrg.Converters +namespace SabreTools.RedumpLib.Converters { /// /// Serialize DiscCategory enum values diff --git a/SabreTools.RedumpLib/Data/Enumerations.cs b/SabreTools.RedumpLib/Data/Enumerations.cs index 77fd6f0..50b4366 100644 --- a/SabreTools.RedumpLib/Data/Enumerations.cs +++ b/SabreTools.RedumpLib/Data/Enumerations.cs @@ -2,6 +2,45 @@ using SabreTools.RedumpLib.Attributes; namespace SabreTools.RedumpLib.Data { + /// + /// List of all disc categories + /// + public enum DiscCategory + { + [HumanReadable(LongName = "Games")] + Games = 1, + + [HumanReadable(LongName = "Demos")] + Demos = 2, + + [HumanReadable(LongName = "Video")] + Video = 3, + + [HumanReadable(LongName = "Audio")] + Audio = 4, + + [HumanReadable(LongName = "Multimedia")] + Multimedia = 5, + + [HumanReadable(LongName = "Applications")] + Applications = 6, + + [HumanReadable(LongName = "Coverdiscs")] + Coverdiscs = 7, + + [HumanReadable(LongName = "Educational")] + Educational = 8, + + [HumanReadable(LongName = "Bonus Discs")] + BonusDiscs = 9, + + [HumanReadable(LongName = "Preproduction")] + Preproduction = 10, + + [HumanReadable(LongName = "Add-Ons")] + AddOns = 11, + } + /// /// List of all disc langauges /// diff --git a/SabreTools.RedumpLib/Data/Extensions.cs b/SabreTools.RedumpLib/Data/Extensions.cs index c003464..cdb86e7 100644 --- a/SabreTools.RedumpLib/Data/Extensions.cs +++ b/SabreTools.RedumpLib/Data/Extensions.cs @@ -806,6 +806,45 @@ namespace SabreTools.RedumpLib.Data #endregion + #region Disc Category + + /// + /// Get the Redump longnames for each known category + /// + public static string? LongName(this DiscCategory category) + => ((DiscCategory?)category).LongName(); + + /// + /// Get the Redump longnames for each known category + /// + public static string? LongName(this DiscCategory? category) + => AttributeHelper.GetHumanReadableAttribute(category)?.LongName; + + /// + /// Get the Category enum value for a given string + /// + /// String value to convert + /// Category represented by the string, if possible + public static DiscCategory? ToDiscCategory(this string? category) + { + // No value means no match + if (category is null || category.Length == 0) + return null; + + category = category?.ToLowerInvariant(); + var categories = (DiscCategory[])Enum.GetValues(typeof(DiscCategory)); + + // Check long names + int index = Array.FindIndex(categories, c => category == c.LongName()?.ToLowerInvariant() + || category == c.LongName()?.Replace(" ", string.Empty)?.ToLowerInvariant()); + if (index > -1) + return categories[index]; + + return null; + } + + #endregion + #region Language /// diff --git a/SabreTools.RedumpLib/RedumpInfo/Converters/DiscCategoryConverter.cs b/SabreTools.RedumpLib/RedumpInfo/Converters/DiscCategoryConverter.cs deleted file mode 100644 index 56ba4d8..0000000 --- a/SabreTools.RedumpLib/RedumpInfo/Converters/DiscCategoryConverter.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using SabreTools.RedumpLib.RedumpInfo.Data; - -namespace SabreTools.RedumpLib.RedumpInfo.Converters -{ - /// - /// Serialize DiscCategory enum values - /// - public class DiscCategoryConverter : JsonConverter - { - public override bool CanRead { get { return true; } } - - public override DiscCategory? ReadJson(JsonReader reader, Type objectType, DiscCategory? existingValue, bool hasExistingValue, JsonSerializer serializer) - { - // If we have a value already, don't overwrite it - if (hasExistingValue) - return existingValue; - - // Read the value - if (reader.Value is not string value) - return null; - - // Try to parse the value - return value.ToDiscCategory(); - } - - public override void WriteJson(JsonWriter writer, DiscCategory? value, JsonSerializer serializer) - { - JToken t = JToken.FromObject(value.LongName() ?? string.Empty); - t.WriteTo(writer); - } - } -} diff --git a/SabreTools.RedumpLib/RedumpInfo/Data/Enumerations.cs b/SabreTools.RedumpLib/RedumpInfo/Data/Enumerations.cs index 6a50cff..66b270f 100644 --- a/SabreTools.RedumpLib/RedumpInfo/Data/Enumerations.cs +++ b/SabreTools.RedumpLib/RedumpInfo/Data/Enumerations.cs @@ -2,45 +2,6 @@ using SabreTools.RedumpLib.Attributes; namespace SabreTools.RedumpLib.RedumpInfo.Data { - /// - /// List of all disc categories - /// - public enum DiscCategory - { - [HumanReadable(LongName = "Add-Ons")] - AddOns, - - [HumanReadable(LongName = "Applications")] - Applications, - - [HumanReadable(LongName = "Audio")] - Audio, - - [HumanReadable(LongName = "Bonus Discs")] - BonusDiscs, - - [HumanReadable(LongName = "Coverdiscs")] - Coverdiscs, - - [HumanReadable(LongName = "Demos")] - Demos, - - [HumanReadable(LongName = "Educational")] - Educational, - - [HumanReadable(LongName = "Games")] - Games, - - [HumanReadable(LongName = "Multimedia")] - Multimedia, - - [HumanReadable(LongName = "Preproduction")] - Preproduction, - - [HumanReadable(LongName = "Video")] - Video, - } - /// /// List of all disc subpaths /// diff --git a/SabreTools.RedumpLib/RedumpInfo/Data/Extensions.cs b/SabreTools.RedumpLib/RedumpInfo/Data/Extensions.cs index e856b71..fd78b18 100644 --- a/SabreTools.RedumpLib/RedumpInfo/Data/Extensions.cs +++ b/SabreTools.RedumpLib/RedumpInfo/Data/Extensions.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using SabreTools.RedumpLib.Attributes; using SabreTools.RedumpLib.Data; @@ -100,45 +99,6 @@ namespace SabreTools.RedumpLib.RedumpInfo.Data #endregion - #region Disc Category - - /// - /// Get the Redump longnames for each known category - /// - public static string? LongName(this DiscCategory category) - => ((DiscCategory?)category).LongName(); - - /// - /// Get the Redump longnames for each known category - /// - public static string? LongName(this DiscCategory? category) - => AttributeHelper.GetHumanReadableAttribute(category)?.LongName; - - /// - /// Get the Category enum value for a given string - /// - /// String value to convert - /// Category represented by the string, if possible - public static DiscCategory? ToDiscCategory(this string? category) - { - // No value means no match - if (category is null || category.Length == 0) - return null; - - category = category?.ToLowerInvariant(); - var categories = (DiscCategory[])Enum.GetValues(typeof(DiscCategory)); - - // Check long names - int index = Array.FindIndex(categories, c => category == c.LongName()?.ToLowerInvariant() - || category == c.LongName()?.Replace(" ", string.Empty)?.ToLowerInvariant()); - if (index > -1) - return categories[index]; - - return null; - } - - #endregion - #region Disc Subpath /// diff --git a/SabreTools.RedumpLib/RedumpOrg/Data/Enumerations.cs b/SabreTools.RedumpLib/RedumpOrg/Data/Enumerations.cs index 2e4c299..473da74 100644 --- a/SabreTools.RedumpLib/RedumpOrg/Data/Enumerations.cs +++ b/SabreTools.RedumpLib/RedumpOrg/Data/Enumerations.cs @@ -2,45 +2,6 @@ using SabreTools.RedumpLib.Attributes; namespace SabreTools.RedumpLib.RedumpOrg.Data { - /// - /// List of all disc categories - /// - public enum DiscCategory - { - [HumanReadable(LongName = "Games")] - Games = 1, - - [HumanReadable(LongName = "Demos")] - Demos = 2, - - [HumanReadable(LongName = "Video")] - Video = 3, - - [HumanReadable(LongName = "Audio")] - Audio = 4, - - [HumanReadable(LongName = "Multimedia")] - Multimedia = 5, - - [HumanReadable(LongName = "Applications")] - Applications = 6, - - [HumanReadable(LongName = "Coverdiscs")] - Coverdiscs = 7, - - [HumanReadable(LongName = "Educational")] - Educational = 8, - - [HumanReadable(LongName = "Bonus Discs")] - BonusDiscs = 9, - - [HumanReadable(LongName = "Preproduction")] - Preproduction = 10, - - [HumanReadable(LongName = "Add-Ons")] - AddOns = 11, - } - /// /// List of all disc subpaths /// diff --git a/SabreTools.RedumpLib/RedumpOrg/Data/Extensions.cs b/SabreTools.RedumpLib/RedumpOrg/Data/Extensions.cs index 2f14a03..4996dd1 100644 --- a/SabreTools.RedumpLib/RedumpOrg/Data/Extensions.cs +++ b/SabreTools.RedumpLib/RedumpOrg/Data/Extensions.cs @@ -71,45 +71,6 @@ namespace SabreTools.RedumpLib.RedumpOrg.Data #endregion - #region Disc Category - - /// - /// Get the Redump longnames for each known category - /// - public static string? LongName(this DiscCategory category) - => ((DiscCategory?)category).LongName(); - - /// - /// Get the Redump longnames for each known category - /// - public static string? LongName(this DiscCategory? category) - => AttributeHelper.GetHumanReadableAttribute(category)?.LongName; - - /// - /// Get the Category enum value for a given string - /// - /// String value to convert - /// Category represented by the string, if possible - public static DiscCategory? ToDiscCategory(this string? category) - { - // No value means no match - if (category is null || category.Length == 0) - return null; - - category = category?.ToLowerInvariant(); - var categories = (DiscCategory[])Enum.GetValues(typeof(DiscCategory)); - - // Check long names - int index = Array.FindIndex(categories, c => category == c.LongName()?.ToLowerInvariant() - || category == c.LongName()?.Replace(" ", string.Empty)?.ToLowerInvariant()); - if (index > -1) - return categories[index]; - - return null; - } - - #endregion - #region Disc Subpath ///