mirror of
https://github.com/SabreTools/SabreTools.RedumpLib.git
synced 2026-07-08 18:16:25 +00:00
Dump status is the same, conceptually
This commit is contained in:
@@ -315,6 +315,117 @@ namespace SabreTools.RedumpLib.Test.Data
|
||||
|
||||
#endregion
|
||||
|
||||
#region Dump Status
|
||||
|
||||
/// <summary>
|
||||
/// Check that every DumpStatus has a long name provided
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus">DumpStatus value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateDumpStatusTestData))]
|
||||
public void DumpStatus_LongName(DumpStatus? dumpStatus, bool expectNull)
|
||||
{
|
||||
var actual = dumpStatus.LongName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check that every DumpStatus has a short name provided
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus">DumpStatus value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateDumpStatusTestData))]
|
||||
public void DumpStatus_ShortName(DumpStatus? dumpStatus, bool expectNull)
|
||||
{
|
||||
var actual = dumpStatus.ShortName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ensure that every DumpStatus that has a short name that is unique
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void DumpStatus_ShortName_NoDuplicates()
|
||||
{
|
||||
var fullDumpStatuses = Enum.GetValues<DumpStatus>().Cast<DumpStatus>().ToList();
|
||||
var filteredDumpStatuses = new Dictionary<string, DumpStatus?>();
|
||||
|
||||
int totalCount = 0;
|
||||
foreach (DumpStatus? dumpStatus in fullDumpStatuses)
|
||||
{
|
||||
var code = dumpStatus.ShortName();
|
||||
if (string.IsNullOrEmpty(code))
|
||||
continue;
|
||||
|
||||
// Throw if the code already exists
|
||||
if (filteredDumpStatuses.ContainsKey(code))
|
||||
throw new DuplicateNameException($"Code {code} already in dictionary");
|
||||
|
||||
filteredDumpStatuses[code] = dumpStatus;
|
||||
totalCount++;
|
||||
}
|
||||
|
||||
Assert.Equal(totalCount, filteredDumpStatuses.Count);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check that every DumpStatus can be mapped from a string
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus">DumpStatus value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateDumpStatusTestData))]
|
||||
public void DumpStatus_ToDumpStatus(DumpStatus? dumpStatus, bool expectNull)
|
||||
{
|
||||
string? longName = dumpStatus.LongName();
|
||||
string? longNameSpaceless = longName?.Replace(" ", string.Empty);
|
||||
string? possibleInteger = $"{(int?)dumpStatus}";
|
||||
|
||||
var actualNormal = longName.ToDumpStatus();
|
||||
var actualSpaceless = longNameSpaceless.ToDumpStatus();
|
||||
var actualInteger = possibleInteger.ToDumpStatus();
|
||||
|
||||
if (expectNull)
|
||||
{
|
||||
Assert.Null(actualNormal);
|
||||
Assert.Null(actualSpaceless);
|
||||
Assert.Null(actualInteger);
|
||||
}
|
||||
else
|
||||
{
|
||||
Assert.Equal(dumpStatus, actualNormal);
|
||||
Assert.Equal(dumpStatus, actualSpaceless);
|
||||
Assert.Equal(dumpStatus, actualInteger);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of DumpStatus values
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of DumpStatus values</returns>
|
||||
public static TheoryData<DumpStatus?, bool> GenerateDumpStatusTestData()
|
||||
{
|
||||
var testData = new TheoryData<DumpStatus?, bool>() { { null, true } };
|
||||
foreach (DumpStatus? dumpStatus in Enum.GetValues<DumpStatus>().Cast<DumpStatus?>())
|
||||
{
|
||||
testData.Add(dumpStatus, false);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Language
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,124 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using SabreTools.RedumpLib.Data;
|
||||
using SabreTools.RedumpLib.RedumpInfo.Data;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.RedumpLib.Test.RedumpInfo
|
||||
{
|
||||
public class ExtensionsTests
|
||||
{
|
||||
#region Dump Status
|
||||
|
||||
/// <summary>
|
||||
/// Check that every DumpStatus has a long name provided
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus">DumpStatus value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateDumpStatusTestData))]
|
||||
public void DumpStatus_LongName(DumpStatus? dumpStatus, bool expectNull)
|
||||
{
|
||||
var actual = dumpStatus.LongName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check that every DumpStatus has a short name provided
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus">DumpStatus value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateDumpStatusTestData))]
|
||||
public void DumpStatus_ShortName(DumpStatus? dumpStatus, bool expectNull)
|
||||
{
|
||||
var actual = dumpStatus.ShortName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ensure that every DumpStatus that has a short name that is unique
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void DumpStatus_ShortName_NoDuplicates()
|
||||
{
|
||||
var fullDumpStatuses = Enum.GetValues<DumpStatus>().Cast<DumpStatus>().ToList();
|
||||
var filteredDumpStatuses = new Dictionary<string, DumpStatus?>();
|
||||
|
||||
int totalCount = 0;
|
||||
foreach (DumpStatus? dumpStatus in fullDumpStatuses)
|
||||
{
|
||||
var code = dumpStatus.ShortName();
|
||||
if (string.IsNullOrEmpty(code))
|
||||
continue;
|
||||
|
||||
// Throw if the code already exists
|
||||
if (filteredDumpStatuses.ContainsKey(code))
|
||||
throw new DuplicateNameException($"Code {code} already in dictionary");
|
||||
|
||||
filteredDumpStatuses[code] = dumpStatus;
|
||||
totalCount++;
|
||||
}
|
||||
|
||||
Assert.Equal(totalCount, filteredDumpStatuses.Count);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check that every DumpStatus can be mapped from a string
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus">DumpStatus value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateDumpStatusTestData))]
|
||||
public void DumpStatus_ToDumpStatus(DumpStatus? dumpStatus, bool expectNull)
|
||||
{
|
||||
string? longName = dumpStatus.LongName();
|
||||
string? longNameSpaceless = longName?.Replace(" ", string.Empty);
|
||||
string? possibleInteger = $"{(int?)dumpStatus}";
|
||||
|
||||
var actualNormal = longName.ToDumpStatus();
|
||||
var actualSpaceless = longNameSpaceless.ToDumpStatus();
|
||||
var actualInteger = possibleInteger.ToDumpStatus();
|
||||
|
||||
if (expectNull)
|
||||
{
|
||||
Assert.Null(actualNormal);
|
||||
Assert.Null(actualSpaceless);
|
||||
Assert.Null(actualInteger);
|
||||
}
|
||||
else
|
||||
{
|
||||
Assert.Equal(dumpStatus, actualNormal);
|
||||
Assert.Equal(dumpStatus, actualSpaceless);
|
||||
Assert.Equal(dumpStatus, actualInteger);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of DumpStatus values
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of DumpStatus values</returns>
|
||||
public static TheoryData<DumpStatus?, bool> GenerateDumpStatusTestData()
|
||||
{
|
||||
var testData = new TheoryData<DumpStatus?, bool>() { { null, true } };
|
||||
foreach (DumpStatus? dumpStatus in Enum.GetValues<DumpStatus>().Cast<DumpStatus?>())
|
||||
{
|
||||
testData.Add(dumpStatus, false);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using SabreTools.RedumpLib.Data;
|
||||
@@ -10,117 +9,6 @@ namespace SabreTools.RedumpLib.Test.RedumpOrg
|
||||
{
|
||||
public class ExtensionsTests
|
||||
{
|
||||
#region Dump Status
|
||||
|
||||
/// <summary>
|
||||
/// Check that every DumpStatus has a long name provided
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus">DumpStatus value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateDumpStatusTestData))]
|
||||
public void DumpStatus_LongName(DumpStatus? dumpStatus, bool expectNull)
|
||||
{
|
||||
var actual = dumpStatus.LongName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check that every DumpStatus has a short name provided
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus">DumpStatus value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateDumpStatusTestData))]
|
||||
public void DumpStatus_ShortName(DumpStatus? dumpStatus, bool expectNull)
|
||||
{
|
||||
var actual = dumpStatus.ShortName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ensure that every DumpStatus that has a short name that is unique
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void DumpStatus_ShortName_NoDuplicates()
|
||||
{
|
||||
var fullDumpStatuses = Enum.GetValues<DumpStatus>().Cast<DumpStatus>().ToList();
|
||||
var filteredDumpStatuses = new Dictionary<string, DumpStatus?>();
|
||||
|
||||
int totalCount = 0;
|
||||
foreach (DumpStatus? dumpStatus in fullDumpStatuses)
|
||||
{
|
||||
var code = dumpStatus.ShortName();
|
||||
if (string.IsNullOrEmpty(code))
|
||||
continue;
|
||||
|
||||
// Throw if the code already exists
|
||||
if (filteredDumpStatuses.ContainsKey(code))
|
||||
throw new DuplicateNameException($"Code {code} already in dictionary");
|
||||
|
||||
filteredDumpStatuses[code] = dumpStatus;
|
||||
totalCount++;
|
||||
}
|
||||
|
||||
Assert.Equal(totalCount, filteredDumpStatuses.Count);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check that every DumpStatus can be mapped from a string
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus">DumpStatus value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateDumpStatusTestData))]
|
||||
public void DumpStatus_ToDumpStatus(DumpStatus? dumpStatus, bool expectNull)
|
||||
{
|
||||
string? longName = dumpStatus.LongName();
|
||||
string? longNameSpaceless = longName?.Replace(" ", string.Empty);
|
||||
string? possibleInteger = $"{(int?)dumpStatus}";
|
||||
|
||||
var actualNormal = longName.ToDumpStatus();
|
||||
var actualSpaceless = longNameSpaceless.ToDumpStatus();
|
||||
var actualInteger = possibleInteger.ToDumpStatus();
|
||||
|
||||
if (expectNull)
|
||||
{
|
||||
Assert.Null(actualNormal);
|
||||
Assert.Null(actualSpaceless);
|
||||
Assert.Null(actualInteger);
|
||||
}
|
||||
else
|
||||
{
|
||||
Assert.Equal(dumpStatus, actualNormal);
|
||||
Assert.Equal(dumpStatus, actualSpaceless);
|
||||
Assert.Equal(dumpStatus, actualInteger);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of DumpStatus values
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of DumpStatus values</returns>
|
||||
public static TheoryData<DumpStatus?, bool> GenerateDumpStatusTestData()
|
||||
{
|
||||
var testData = new TheoryData<DumpStatus?, bool>() { { null, true } };
|
||||
foreach (DumpStatus? dumpStatus in Enum.GetValues<DumpStatus>().Cast<DumpStatus?>())
|
||||
{
|
||||
testData.Add(dumpStatus, false);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Language Selection
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -135,7 +135,7 @@ namespace SabreTools.RedumpLib.Test
|
||||
|
||||
DumpersAndStatus = new DumpersAndStatusSection()
|
||||
{
|
||||
Status = DumpStatus.TwoOrMoreGreen,
|
||||
Status = DumpStatus.VerifiedGreen,
|
||||
Dumpers = ["Dumper1", "Dumper2"],
|
||||
OtherDumpers = "Dumper3",
|
||||
},
|
||||
|
||||
@@ -95,6 +95,32 @@ namespace SabreTools.RedumpLib.Data
|
||||
WIP,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Dump status
|
||||
/// </summary>
|
||||
public enum DumpStatus
|
||||
{
|
||||
// TODO: Verify new naming
|
||||
[HumanReadable(LongName = "Unknown", ShortName = "grey")]
|
||||
UnknownGrey = 1,
|
||||
|
||||
// TODO: Verify new naming
|
||||
[HumanReadable(LongName = "Bad Dump", ShortName = "red")]
|
||||
BadDumpRed = 2,
|
||||
|
||||
// Known as "Possible Bad Dump" on redump.org
|
||||
[HumanReadable(LongName = "Questionable", ShortName = "yellow")]
|
||||
QuestionableYellow = 3,
|
||||
|
||||
// Known as "Original Media" on redump.org
|
||||
[HumanReadable(LongName = "Unverified", ShortName = "blue")]
|
||||
UnverifiedBlue = 4,
|
||||
|
||||
// Known as "Two or More" on redump.org
|
||||
[HumanReadable(LongName = "Verified", ShortName = "green")]
|
||||
VerifiedGreen = 5,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// List of all disc langauges
|
||||
/// </summary>
|
||||
|
||||
@@ -998,6 +998,74 @@ namespace SabreTools.RedumpLib.Data
|
||||
|
||||
#endregion
|
||||
|
||||
#region Dump Status
|
||||
|
||||
/// <summary>
|
||||
/// Get the human readable name for a DumpStatus
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus"></param>
|
||||
/// <returns></returns>
|
||||
public static string? LongName(this DumpStatus dumpStatus)
|
||||
=> AttributeHelper<DumpStatus>.GetHumanReadableAttribute(dumpStatus)?.LongName;
|
||||
|
||||
/// <summary>
|
||||
/// Get the human readable name for a DumpStatus
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus"></param>
|
||||
/// <returns></returns>
|
||||
public static string? LongName(this DumpStatus? dumpStatus)
|
||||
=> AttributeHelper<DumpStatus?>.GetHumanReadableAttribute(dumpStatus)?.LongName;
|
||||
|
||||
/// <summary>
|
||||
/// Get the URL path part for a DumpStatus
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus"></param>
|
||||
/// <returns></returns>
|
||||
public static string? ShortName(this DumpStatus dumpStatus)
|
||||
=> AttributeHelper<DumpStatus>.GetHumanReadableAttribute(dumpStatus)?.ShortName;
|
||||
|
||||
/// <summary>
|
||||
/// Get the URL path part for a DumpStatus
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus"></param>
|
||||
/// <returns></returns>
|
||||
public static string? ShortName(this DumpStatus? dumpStatus)
|
||||
=> AttributeHelper<DumpStatus?>.GetHumanReadableAttribute(dumpStatus)?.ShortName;
|
||||
|
||||
/// <summary>
|
||||
/// Get the Region enum value for a given string
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus">String value to convert</param>
|
||||
/// <returns>Region represented by the string, if possible</returns>
|
||||
public static DumpStatus? ToDumpStatus(this string? dumpStatus)
|
||||
{
|
||||
// No value means no match
|
||||
if (dumpStatus is null || dumpStatus.Length == 0)
|
||||
return null;
|
||||
|
||||
dumpStatus = dumpStatus.ToLowerInvariant();
|
||||
var dumpStatuses = (DumpStatus[])Enum.GetValues(typeof(DumpStatus));
|
||||
|
||||
// Check short names
|
||||
int index = Array.FindIndex(dumpStatuses, s => dumpStatus == s.ShortName()?.ToLowerInvariant());
|
||||
if (index > -1)
|
||||
return dumpStatuses[index];
|
||||
|
||||
// Check long names
|
||||
index = Array.FindIndex(dumpStatuses, s => dumpStatus == s.LongName()?.ToLowerInvariant()
|
||||
|| dumpStatus == s.LongName()?.Replace(" ", string.Empty)?.ToLowerInvariant());
|
||||
if (index > -1)
|
||||
return dumpStatuses[index];
|
||||
|
||||
// Check numeric values
|
||||
if (int.TryParse(dumpStatus, out int dumpStatusInt) && Enum.IsDefined(typeof(DumpStatus), dumpStatusInt))
|
||||
return (DumpStatus)dumpStatusInt;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Language
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.RedumpLib.RedumpOrg.Data;
|
||||
|
||||
namespace SabreTools.RedumpLib.Data.Sections
|
||||
{
|
||||
|
||||
@@ -10,7 +10,6 @@ using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using SabreTools.RedumpLib.Data;
|
||||
using SabreTools.RedumpLib.RedumpInfo.Data;
|
||||
using SabreTools.RedumpLib.Web;
|
||||
using static SabreTools.RedumpLib.RedumpOrg.Data.Extensions;
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@ using System;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using SabreTools.RedumpLib.Data;
|
||||
using SabreTools.RedumpLib.RedumpInfo.Data;
|
||||
|
||||
namespace SabreTools.RedumpLib.RedumpInfo.Converters
|
||||
{
|
||||
|
||||
@@ -2,7 +2,6 @@ using System;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using SabreTools.RedumpLib.Data;
|
||||
using SabreTools.RedumpLib.RedumpInfo.Data;
|
||||
|
||||
namespace SabreTools.RedumpLib.RedumpInfo.Converters
|
||||
{
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
using SabreTools.RedumpLib.Attributes;
|
||||
|
||||
namespace SabreTools.RedumpLib.RedumpInfo.Data
|
||||
{
|
||||
/// <summary>
|
||||
/// Dump status
|
||||
/// </summary>
|
||||
public enum DumpStatus
|
||||
{
|
||||
// TODO: Verify new naming
|
||||
[HumanReadable(LongName = "Unknown", ShortName = "grey")]
|
||||
UnknownGrey = 1,
|
||||
|
||||
// TODO: Verify new naming
|
||||
[HumanReadable(LongName = "Bad Dump", ShortName = "red")]
|
||||
BadDumpRed = 2,
|
||||
|
||||
[HumanReadable(LongName = "Questionable", ShortName = "yellow")]
|
||||
Questionable,
|
||||
|
||||
[HumanReadable(LongName = "Unverified", ShortName = "blue")]
|
||||
Unverified,
|
||||
|
||||
[HumanReadable(LongName = "Verified", ShortName = "green")]
|
||||
Verified,
|
||||
}
|
||||
}
|
||||
@@ -1,79 +0,0 @@
|
||||
using System;
|
||||
using SabreTools.RedumpLib.Attributes;
|
||||
|
||||
namespace SabreTools.RedumpLib.RedumpInfo.Data
|
||||
{
|
||||
/// <summary>
|
||||
/// Information pertaining to Redump systems
|
||||
/// </summary>
|
||||
public static class Extensions
|
||||
{
|
||||
#region Dump Status
|
||||
|
||||
/// <summary>
|
||||
/// Get the human readable name for a DumpStatus
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus"></param>
|
||||
/// <returns></returns>
|
||||
public static string? LongName(this DumpStatus dumpStatus)
|
||||
=> AttributeHelper<DumpStatus>.GetHumanReadableAttribute(dumpStatus)?.LongName;
|
||||
|
||||
/// <summary>
|
||||
/// Get the human readable name for a DumpStatus
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus"></param>
|
||||
/// <returns></returns>
|
||||
public static string? LongName(this DumpStatus? dumpStatus)
|
||||
=> AttributeHelper<DumpStatus?>.GetHumanReadableAttribute(dumpStatus)?.LongName;
|
||||
|
||||
/// <summary>
|
||||
/// Get the URL path part for a DumpStatus
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus"></param>
|
||||
/// <returns></returns>
|
||||
public static string? ShortName(this DumpStatus dumpStatus)
|
||||
=> AttributeHelper<DumpStatus>.GetHumanReadableAttribute(dumpStatus)?.ShortName;
|
||||
|
||||
/// <summary>
|
||||
/// Get the URL path part for a DumpStatus
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus"></param>
|
||||
/// <returns></returns>
|
||||
public static string? ShortName(this DumpStatus? dumpStatus)
|
||||
=> AttributeHelper<DumpStatus?>.GetHumanReadableAttribute(dumpStatus)?.ShortName;
|
||||
|
||||
/// <summary>
|
||||
/// Get the Region enum value for a given string
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus">String value to convert</param>
|
||||
/// <returns>Region represented by the string, if possible</returns>
|
||||
public static DumpStatus? ToDumpStatus(this string? dumpStatus)
|
||||
{
|
||||
// No value means no match
|
||||
if (dumpStatus is null || dumpStatus.Length == 0)
|
||||
return null;
|
||||
|
||||
dumpStatus = dumpStatus.ToLowerInvariant();
|
||||
var dumpStatuses = (DumpStatus[])Enum.GetValues(typeof(DumpStatus));
|
||||
|
||||
// Check short names
|
||||
int index = Array.FindIndex(dumpStatuses, s => dumpStatus == s.ShortName()?.ToLowerInvariant());
|
||||
if (index > -1)
|
||||
return dumpStatuses[index];
|
||||
|
||||
// Check long names
|
||||
index = Array.FindIndex(dumpStatuses, s => dumpStatus == s.LongName()?.ToLowerInvariant()
|
||||
|| dumpStatus == s.LongName()?.Replace(" ", string.Empty)?.ToLowerInvariant());
|
||||
if (index > -1)
|
||||
return dumpStatuses[index];
|
||||
|
||||
// Check numeric values
|
||||
if (int.TryParse(dumpStatus, out int dumpStatusInt) && Enum.IsDefined(typeof(DumpStatus), dumpStatusInt))
|
||||
return (DumpStatus)dumpStatusInt;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,6 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using SabreTools.RedumpLib.Data;
|
||||
using SabreTools.RedumpLib.RedumpInfo.Data;
|
||||
using SabreTools.RedumpLib.Web;
|
||||
|
||||
namespace SabreTools.RedumpLib.RedumpInfo
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
using SabreTools.RedumpLib.Data;
|
||||
using SabreTools.RedumpLib.RedumpInfo.Data;
|
||||
using static SabreTools.RedumpLib.RedumpOrg.Data.Extensions;
|
||||
|
||||
namespace SabreTools.RedumpLib.RedumpInfo
|
||||
@@ -227,7 +226,7 @@ namespace SabreTools.RedumpLib.RedumpInfo
|
||||
}
|
||||
|
||||
// Status
|
||||
if (status is not null && status >= DumpStatus.UnknownGrey && status <= DumpStatus.Verified)
|
||||
if (status is not null && status >= DumpStatus.UnknownGrey && status <= DumpStatus.VerifiedGreen)
|
||||
sb.Append($"status={(int)status}&");
|
||||
|
||||
// System
|
||||
|
||||
@@ -2,27 +2,6 @@ using SabreTools.RedumpLib.Attributes;
|
||||
|
||||
namespace SabreTools.RedumpLib.RedumpOrg.Data
|
||||
{
|
||||
/// <summary>
|
||||
/// Dump status
|
||||
/// </summary>
|
||||
public enum DumpStatus
|
||||
{
|
||||
[HumanReadable(LongName = "Unknown", ShortName = "grey")]
|
||||
UnknownGrey = 1,
|
||||
|
||||
[HumanReadable(LongName = "Bad Dump", ShortName = "red")]
|
||||
BadDumpRed = 2,
|
||||
|
||||
[HumanReadable(LongName = "Possible Bad Dump", ShortName = "yellow")]
|
||||
PossibleBadDumpYellow = 3,
|
||||
|
||||
[HumanReadable(LongName = "Original Media", ShortName = "blue")]
|
||||
OriginalMediaBlue = 4,
|
||||
|
||||
[HumanReadable(LongName = "Two or More", ShortName = "green")]
|
||||
TwoOrMoreGreen = 5,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// All possible language selections
|
||||
/// </summary>
|
||||
|
||||
@@ -10,74 +10,6 @@ namespace SabreTools.RedumpLib.RedumpOrg.Data
|
||||
#pragma warning disable IDE0072
|
||||
public static class Extensions
|
||||
{
|
||||
#region Dump Status
|
||||
|
||||
/// <summary>
|
||||
/// Get the human readable name for a DumpStatus
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus"></param>
|
||||
/// <returns></returns>
|
||||
public static string? LongName(this DumpStatus dumpStatus)
|
||||
=> AttributeHelper<DumpStatus>.GetHumanReadableAttribute(dumpStatus)?.LongName;
|
||||
|
||||
/// <summary>
|
||||
/// Get the human readable name for a DumpStatus
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus"></param>
|
||||
/// <returns></returns>
|
||||
public static string? LongName(this DumpStatus? dumpStatus)
|
||||
=> AttributeHelper<DumpStatus?>.GetHumanReadableAttribute(dumpStatus)?.LongName;
|
||||
|
||||
/// <summary>
|
||||
/// Get the URL path part for a DumpStatus
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus"></param>
|
||||
/// <returns></returns>
|
||||
public static string? ShortName(this DumpStatus dumpStatus)
|
||||
=> AttributeHelper<DumpStatus>.GetHumanReadableAttribute(dumpStatus)?.ShortName;
|
||||
|
||||
/// <summary>
|
||||
/// Get the URL path part for a DumpStatus
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus"></param>
|
||||
/// <returns></returns>
|
||||
public static string? ShortName(this DumpStatus? dumpStatus)
|
||||
=> AttributeHelper<DumpStatus?>.GetHumanReadableAttribute(dumpStatus)?.ShortName;
|
||||
|
||||
/// <summary>
|
||||
/// Get the Region enum value for a given string
|
||||
/// </summary>
|
||||
/// <param name="dumpStatus">String value to convert</param>
|
||||
/// <returns>Region represented by the string, if possible</returns>
|
||||
public static DumpStatus? ToDumpStatus(this string? dumpStatus)
|
||||
{
|
||||
// No value means no match
|
||||
if (dumpStatus is null || dumpStatus.Length == 0)
|
||||
return null;
|
||||
|
||||
dumpStatus = dumpStatus.ToLowerInvariant();
|
||||
var dumpStatuses = (DumpStatus[])Enum.GetValues(typeof(DumpStatus));
|
||||
|
||||
// Check short names
|
||||
int index = Array.FindIndex(dumpStatuses, s => dumpStatus == s.ShortName()?.ToLowerInvariant());
|
||||
if (index > -1)
|
||||
return dumpStatuses[index];
|
||||
|
||||
// Check long names
|
||||
index = Array.FindIndex(dumpStatuses, s => dumpStatus == s.LongName()?.ToLowerInvariant()
|
||||
|| dumpStatus == s.LongName()?.Replace(" ", string.Empty)?.ToLowerInvariant());
|
||||
if (index > -1)
|
||||
return dumpStatuses[index];
|
||||
|
||||
// Check numeric values
|
||||
if (int.TryParse(dumpStatus, out int dumpStatusInt) && Enum.IsDefined(typeof(DumpStatus), dumpStatusInt))
|
||||
return (DumpStatus)dumpStatusInt;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Language Selection
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -326,7 +326,7 @@ namespace SabreTools.RedumpLib.RedumpOrg
|
||||
}
|
||||
|
||||
// Status
|
||||
if (status is not null && status >= DumpStatus.UnknownGrey && status <= DumpStatus.TwoOrMoreGreen)
|
||||
if (status is not null && status >= DumpStatus.UnknownGrey && status <= DumpStatus.VerifiedGreen)
|
||||
sb.Append($"status/{(int)status}/");
|
||||
|
||||
// System / Disc Type Search
|
||||
|
||||
Reference in New Issue
Block a user