mirror of
https://github.com/SabreTools/SabreTools.RedumpLib.git
synced 2026-02-04 05:36:11 +00:00
Disallow some fields from being null
This commit is contained in:
@@ -26,102 +26,6 @@ namespace SabreTools.RedumpLib.Test
|
|||||||
Assert.Equal(expectNull, si == null);
|
Assert.Equal(expectNull, si == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void EnsureAllSections_Null_Filled()
|
|
||||||
{
|
|
||||||
SubmissionInfo? si = null;
|
|
||||||
var actual = Builder.EnsureAllSections(si);
|
|
||||||
|
|
||||||
Assert.NotNull(actual);
|
|
||||||
Assert.NotNull(actual.CommonDiscInfo);
|
|
||||||
Assert.NotNull(actual.CommonDiscInfo.CommentsSpecialFields);
|
|
||||||
Assert.NotNull(actual.CommonDiscInfo.ContentsSpecialFields);
|
|
||||||
Assert.NotNull(actual.VersionAndEditions);
|
|
||||||
Assert.NotNull(actual.EDC);
|
|
||||||
Assert.NotNull(actual.ParentCloneRelationship);
|
|
||||||
Assert.NotNull(actual.Extras);
|
|
||||||
Assert.NotNull(actual.CopyProtection);
|
|
||||||
Assert.NotNull(actual.DumpersAndStatus);
|
|
||||||
Assert.NotNull(actual.TracksAndWriteOffsets);
|
|
||||||
Assert.NotNull(actual.SizeAndChecksums);
|
|
||||||
Assert.NotNull(actual.DumpingInfo);
|
|
||||||
Assert.NotNull(actual.Artifacts);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void EnsureAllSections_Empty_Filled()
|
|
||||||
{
|
|
||||||
SubmissionInfo? si = new SubmissionInfo
|
|
||||||
{
|
|
||||||
CommonDiscInfo = null,
|
|
||||||
VersionAndEditions = null,
|
|
||||||
EDC = null,
|
|
||||||
ParentCloneRelationship = null,
|
|
||||||
Extras = null,
|
|
||||||
CopyProtection = null,
|
|
||||||
DumpersAndStatus = null,
|
|
||||||
TracksAndWriteOffsets = null,
|
|
||||||
SizeAndChecksums = null,
|
|
||||||
DumpingInfo = null,
|
|
||||||
Artifacts = null,
|
|
||||||
};
|
|
||||||
var actual = Builder.EnsureAllSections(si);
|
|
||||||
|
|
||||||
Assert.NotNull(actual);
|
|
||||||
Assert.NotNull(actual.CommonDiscInfo);
|
|
||||||
Assert.NotNull(actual.CommonDiscInfo.CommentsSpecialFields);
|
|
||||||
Assert.NotNull(actual.CommonDiscInfo.ContentsSpecialFields);
|
|
||||||
Assert.NotNull(actual.VersionAndEditions);
|
|
||||||
Assert.NotNull(actual.EDC);
|
|
||||||
Assert.NotNull(actual.ParentCloneRelationship);
|
|
||||||
Assert.NotNull(actual.Extras);
|
|
||||||
Assert.NotNull(actual.CopyProtection);
|
|
||||||
Assert.NotNull(actual.DumpersAndStatus);
|
|
||||||
Assert.NotNull(actual.TracksAndWriteOffsets);
|
|
||||||
Assert.NotNull(actual.SizeAndChecksums);
|
|
||||||
Assert.NotNull(actual.DumpingInfo);
|
|
||||||
Assert.NotNull(actual.Artifacts);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void EnsureAllSections_Filled_Filled()
|
|
||||||
{
|
|
||||||
SubmissionInfo? si = new SubmissionInfo
|
|
||||||
{
|
|
||||||
CommonDiscInfo = new CommonDiscInfoSection
|
|
||||||
{
|
|
||||||
CommentsSpecialFields = [],
|
|
||||||
ContentsSpecialFields = [],
|
|
||||||
},
|
|
||||||
VersionAndEditions = new VersionAndEditionsSection(),
|
|
||||||
EDC = new EDCSection(),
|
|
||||||
ParentCloneRelationship = new ParentCloneRelationshipSection(),
|
|
||||||
Extras = new ExtrasSection(),
|
|
||||||
CopyProtection = new CopyProtectionSection(),
|
|
||||||
DumpersAndStatus = new DumpersAndStatusSection(),
|
|
||||||
TracksAndWriteOffsets = new TracksAndWriteOffsetsSection(),
|
|
||||||
SizeAndChecksums = new SizeAndChecksumsSection(),
|
|
||||||
DumpingInfo = new DumpingInfoSection(),
|
|
||||||
Artifacts = [],
|
|
||||||
};
|
|
||||||
var actual = Builder.EnsureAllSections(si);
|
|
||||||
|
|
||||||
Assert.NotNull(actual);
|
|
||||||
Assert.NotNull(actual.CommonDiscInfo);
|
|
||||||
Assert.NotNull(actual.CommonDiscInfo.CommentsSpecialFields);
|
|
||||||
Assert.NotNull(actual.CommonDiscInfo.ContentsSpecialFields);
|
|
||||||
Assert.NotNull(actual.VersionAndEditions);
|
|
||||||
Assert.NotNull(actual.EDC);
|
|
||||||
Assert.NotNull(actual.ParentCloneRelationship);
|
|
||||||
Assert.NotNull(actual.Extras);
|
|
||||||
Assert.NotNull(actual.CopyProtection);
|
|
||||||
Assert.NotNull(actual.DumpersAndStatus);
|
|
||||||
Assert.NotNull(actual.TracksAndWriteOffsets);
|
|
||||||
Assert.NotNull(actual.SizeAndChecksums);
|
|
||||||
Assert.NotNull(actual.DumpingInfo);
|
|
||||||
Assert.NotNull(actual.Artifacts);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void InjectSubmissionInformation_BothNull_Null()
|
public void InjectSubmissionInformation_BothNull_Null()
|
||||||
{
|
{
|
||||||
@@ -188,4 +92,4 @@ namespace SabreTools.RedumpLib.Test
|
|||||||
Assert.Equal(expected, actual);
|
Assert.Equal(expected, actual);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ namespace SabreTools.RedumpLib.Test
|
|||||||
SubmissionInfo si = new SubmissionInfo
|
SubmissionInfo si = new SubmissionInfo
|
||||||
{
|
{
|
||||||
CommonDiscInfo = new CommonDiscInfoSection { Media = DiscType.CD },
|
CommonDiscInfo = new CommonDiscInfoSection { Media = DiscType.CD },
|
||||||
SizeAndChecksums = null,
|
SizeAndChecksums = new(),
|
||||||
};
|
};
|
||||||
|
|
||||||
Validator.NormalizeDiscType(si);
|
Validator.NormalizeDiscType(si);
|
||||||
@@ -301,4 +301,4 @@ namespace SabreTools.RedumpLib.Test
|
|||||||
Assert.Equal(expected, si.CommonDiscInfo.Media);
|
Assert.Equal(expected, si.CommonDiscInfo.Media);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -253,8 +253,6 @@ namespace SabreTools.RedumpLib
|
|||||||
/// <param name="includeAllData">True to include all pullable information, false to do bare minimum</param>
|
/// <param name="includeAllData">True to include all pullable information, false to do bare minimum</param>
|
||||||
public async static Task<bool> FillFromId(RedumpClient rc, SubmissionInfo info, int id, bool includeAllData)
|
public async static Task<bool> FillFromId(RedumpClient rc, SubmissionInfo info, int id, bool includeAllData)
|
||||||
{
|
{
|
||||||
// Ensure that required sections exist
|
|
||||||
info = EnsureAllSections(info);
|
|
||||||
var discData = await rc.DownloadSingleSiteID(id);
|
var discData = await rc.DownloadSingleSiteID(id);
|
||||||
if (string.IsNullOrEmpty(discData))
|
if (string.IsNullOrEmpty(discData))
|
||||||
return false;
|
return false;
|
||||||
@@ -605,35 +603,6 @@ namespace SabreTools.RedumpLib
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Ensure all required sections in a submission info exist
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="info">SubmissionInfo object to verify</param>
|
|
||||||
public static SubmissionInfo EnsureAllSections(SubmissionInfo? info)
|
|
||||||
{
|
|
||||||
// If there's no info, create one
|
|
||||||
info ??= new SubmissionInfo();
|
|
||||||
|
|
||||||
// Ensure all sections
|
|
||||||
info.CommonDiscInfo ??= new CommonDiscInfoSection();
|
|
||||||
info.VersionAndEditions ??= new VersionAndEditionsSection();
|
|
||||||
info.EDC ??= new EDCSection();
|
|
||||||
info.ParentCloneRelationship ??= new ParentCloneRelationshipSection();
|
|
||||||
info.Extras ??= new ExtrasSection();
|
|
||||||
info.CopyProtection ??= new CopyProtectionSection();
|
|
||||||
info.DumpersAndStatus ??= new DumpersAndStatusSection();
|
|
||||||
info.TracksAndWriteOffsets ??= new TracksAndWriteOffsetsSection();
|
|
||||||
info.SizeAndChecksums ??= new SizeAndChecksumsSection();
|
|
||||||
info.DumpingInfo ??= new DumpingInfoSection();
|
|
||||||
info.Artifacts ??= [];
|
|
||||||
|
|
||||||
// Ensure special dictionaries
|
|
||||||
info.CommonDiscInfo.CommentsSpecialFields ??= [];
|
|
||||||
info.CommonDiscInfo.ContentsSpecialFields ??= [];
|
|
||||||
|
|
||||||
return info;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Inject information from a seed SubmissionInfo into the existing one
|
/// Inject information from a seed SubmissionInfo into the existing one
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -645,62 +614,52 @@ namespace SabreTools.RedumpLib
|
|||||||
if (seed == null)
|
if (seed == null)
|
||||||
return info;
|
return info;
|
||||||
|
|
||||||
// Ensure that required sections exist
|
|
||||||
info = EnsureAllSections(info);
|
|
||||||
|
|
||||||
// Otherwise, inject information as necessary
|
// Otherwise, inject information as necessary
|
||||||
if (info.CommonDiscInfo != null && seed.CommonDiscInfo != null)
|
info ??= new SubmissionInfo();
|
||||||
{
|
|
||||||
// Info that only overwrites if supplied
|
|
||||||
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Title)) info.CommonDiscInfo.Title = seed.CommonDiscInfo.Title;
|
|
||||||
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.ForeignTitleNonLatin)) info.CommonDiscInfo.ForeignTitleNonLatin = seed.CommonDiscInfo.ForeignTitleNonLatin;
|
|
||||||
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.DiscNumberLetter)) info.CommonDiscInfo.DiscNumberLetter = seed.CommonDiscInfo.DiscNumberLetter;
|
|
||||||
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.DiscTitle)) info.CommonDiscInfo.DiscTitle = seed.CommonDiscInfo.DiscTitle;
|
|
||||||
if (seed.CommonDiscInfo.Category != null) info.CommonDiscInfo.Category = seed.CommonDiscInfo.Category;
|
|
||||||
if (seed.CommonDiscInfo.Region != null) info.CommonDiscInfo.Region = seed.CommonDiscInfo.Region;
|
|
||||||
if (seed.CommonDiscInfo.Languages != null) info.CommonDiscInfo.Languages = seed.CommonDiscInfo.Languages;
|
|
||||||
if (seed.CommonDiscInfo.LanguageSelection != null) info.CommonDiscInfo.LanguageSelection = seed.CommonDiscInfo.LanguageSelection;
|
|
||||||
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Serial)) info.CommonDiscInfo.Serial = seed.CommonDiscInfo.Serial;
|
|
||||||
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Barcode)) info.CommonDiscInfo.Barcode = seed.CommonDiscInfo.Barcode;
|
|
||||||
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Comments)) info.CommonDiscInfo.Comments = seed.CommonDiscInfo.Comments;
|
|
||||||
if (seed.CommonDiscInfo.CommentsSpecialFields != null) info.CommonDiscInfo.CommentsSpecialFields = seed.CommonDiscInfo.CommentsSpecialFields;
|
|
||||||
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Contents)) info.CommonDiscInfo.Contents = seed.CommonDiscInfo.Contents;
|
|
||||||
if (seed.CommonDiscInfo.ContentsSpecialFields != null) info.CommonDiscInfo.ContentsSpecialFields = seed.CommonDiscInfo.ContentsSpecialFields;
|
|
||||||
|
|
||||||
// Info that always overwrites
|
// Info that only overwrites if supplied
|
||||||
info.CommonDiscInfo.Layer0MasteringRing = seed.CommonDiscInfo.Layer0MasteringRing;
|
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Title)) info.CommonDiscInfo.Title = seed.CommonDiscInfo.Title;
|
||||||
info.CommonDiscInfo.Layer0MasteringSID = seed.CommonDiscInfo.Layer0MasteringSID;
|
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.ForeignTitleNonLatin)) info.CommonDiscInfo.ForeignTitleNonLatin = seed.CommonDiscInfo.ForeignTitleNonLatin;
|
||||||
info.CommonDiscInfo.Layer0ToolstampMasteringCode = seed.CommonDiscInfo.Layer0ToolstampMasteringCode;
|
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.DiscNumberLetter)) info.CommonDiscInfo.DiscNumberLetter = seed.CommonDiscInfo.DiscNumberLetter;
|
||||||
info.CommonDiscInfo.Layer0MouldSID = seed.CommonDiscInfo.Layer0MouldSID;
|
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.DiscTitle)) info.CommonDiscInfo.DiscTitle = seed.CommonDiscInfo.DiscTitle;
|
||||||
info.CommonDiscInfo.Layer0AdditionalMould = seed.CommonDiscInfo.Layer0AdditionalMould;
|
if (seed.CommonDiscInfo.Category != null) info.CommonDiscInfo.Category = seed.CommonDiscInfo.Category;
|
||||||
|
if (seed.CommonDiscInfo.Region != null) info.CommonDiscInfo.Region = seed.CommonDiscInfo.Region;
|
||||||
|
if (seed.CommonDiscInfo.Languages != null) info.CommonDiscInfo.Languages = seed.CommonDiscInfo.Languages;
|
||||||
|
if (seed.CommonDiscInfo.LanguageSelection != null) info.CommonDiscInfo.LanguageSelection = seed.CommonDiscInfo.LanguageSelection;
|
||||||
|
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Serial)) info.CommonDiscInfo.Serial = seed.CommonDiscInfo.Serial;
|
||||||
|
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Barcode)) info.CommonDiscInfo.Barcode = seed.CommonDiscInfo.Barcode;
|
||||||
|
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Comments)) info.CommonDiscInfo.Comments = seed.CommonDiscInfo.Comments;
|
||||||
|
if (seed.CommonDiscInfo.CommentsSpecialFields != null) info.CommonDiscInfo.CommentsSpecialFields = seed.CommonDiscInfo.CommentsSpecialFields;
|
||||||
|
if (!string.IsNullOrEmpty(seed.CommonDiscInfo.Contents)) info.CommonDiscInfo.Contents = seed.CommonDiscInfo.Contents;
|
||||||
|
if (seed.CommonDiscInfo.ContentsSpecialFields != null) info.CommonDiscInfo.ContentsSpecialFields = seed.CommonDiscInfo.ContentsSpecialFields;
|
||||||
|
|
||||||
info.CommonDiscInfo.Layer1MasteringRing = seed.CommonDiscInfo.Layer1MasteringRing;
|
// Info that always overwrites
|
||||||
info.CommonDiscInfo.Layer1MasteringSID = seed.CommonDiscInfo.Layer1MasteringSID;
|
info.CommonDiscInfo.Layer0MasteringRing = seed.CommonDiscInfo.Layer0MasteringRing;
|
||||||
info.CommonDiscInfo.Layer1ToolstampMasteringCode = seed.CommonDiscInfo.Layer1ToolstampMasteringCode;
|
info.CommonDiscInfo.Layer0MasteringSID = seed.CommonDiscInfo.Layer0MasteringSID;
|
||||||
info.CommonDiscInfo.Layer1MouldSID = seed.CommonDiscInfo.Layer1MouldSID;
|
info.CommonDiscInfo.Layer0ToolstampMasteringCode = seed.CommonDiscInfo.Layer0ToolstampMasteringCode;
|
||||||
info.CommonDiscInfo.Layer1AdditionalMould = seed.CommonDiscInfo.Layer1AdditionalMould;
|
info.CommonDiscInfo.Layer0MouldSID = seed.CommonDiscInfo.Layer0MouldSID;
|
||||||
|
info.CommonDiscInfo.Layer0AdditionalMould = seed.CommonDiscInfo.Layer0AdditionalMould;
|
||||||
|
|
||||||
info.CommonDiscInfo.Layer2MasteringRing = seed.CommonDiscInfo.Layer2MasteringRing;
|
info.CommonDiscInfo.Layer1MasteringRing = seed.CommonDiscInfo.Layer1MasteringRing;
|
||||||
info.CommonDiscInfo.Layer2MasteringSID = seed.CommonDiscInfo.Layer2MasteringSID;
|
info.CommonDiscInfo.Layer1MasteringSID = seed.CommonDiscInfo.Layer1MasteringSID;
|
||||||
info.CommonDiscInfo.Layer2ToolstampMasteringCode = seed.CommonDiscInfo.Layer2ToolstampMasteringCode;
|
info.CommonDiscInfo.Layer1ToolstampMasteringCode = seed.CommonDiscInfo.Layer1ToolstampMasteringCode;
|
||||||
|
info.CommonDiscInfo.Layer1MouldSID = seed.CommonDiscInfo.Layer1MouldSID;
|
||||||
|
info.CommonDiscInfo.Layer1AdditionalMould = seed.CommonDiscInfo.Layer1AdditionalMould;
|
||||||
|
|
||||||
info.CommonDiscInfo.Layer3MasteringRing = seed.CommonDiscInfo.Layer3MasteringRing;
|
info.CommonDiscInfo.Layer2MasteringRing = seed.CommonDiscInfo.Layer2MasteringRing;
|
||||||
info.CommonDiscInfo.Layer3MasteringSID = seed.CommonDiscInfo.Layer3MasteringSID;
|
info.CommonDiscInfo.Layer2MasteringSID = seed.CommonDiscInfo.Layer2MasteringSID;
|
||||||
info.CommonDiscInfo.Layer3ToolstampMasteringCode = seed.CommonDiscInfo.Layer3ToolstampMasteringCode;
|
info.CommonDiscInfo.Layer2ToolstampMasteringCode = seed.CommonDiscInfo.Layer2ToolstampMasteringCode;
|
||||||
}
|
|
||||||
|
|
||||||
if (info.VersionAndEditions != null && seed.VersionAndEditions != null)
|
info.CommonDiscInfo.Layer3MasteringRing = seed.CommonDiscInfo.Layer3MasteringRing;
|
||||||
{
|
info.CommonDiscInfo.Layer3MasteringSID = seed.CommonDiscInfo.Layer3MasteringSID;
|
||||||
// Info that only overwrites if supplied
|
info.CommonDiscInfo.Layer3ToolstampMasteringCode = seed.CommonDiscInfo.Layer3ToolstampMasteringCode;
|
||||||
if (!string.IsNullOrEmpty(seed.VersionAndEditions.Version)) info.VersionAndEditions.Version = seed.VersionAndEditions.Version;
|
|
||||||
if (!string.IsNullOrEmpty(seed.VersionAndEditions.OtherEditions)) info.VersionAndEditions.OtherEditions = seed.VersionAndEditions.OtherEditions;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (info.CopyProtection != null && seed.CopyProtection != null)
|
// Info that only overwrites if supplied
|
||||||
{
|
if (!string.IsNullOrEmpty(seed.VersionAndEditions.Version)) info.VersionAndEditions.Version = seed.VersionAndEditions.Version;
|
||||||
// Info that only overwrites if supplied
|
if (!string.IsNullOrEmpty(seed.VersionAndEditions.OtherEditions)) info.VersionAndEditions.OtherEditions = seed.VersionAndEditions.OtherEditions;
|
||||||
if (!string.IsNullOrEmpty(seed.CopyProtection.Protection)) info.CopyProtection.Protection = seed.CopyProtection.Protection;
|
|
||||||
}
|
// Info that only overwrites if supplied
|
||||||
|
if (!string.IsNullOrEmpty(seed.CopyProtection.Protection)) info.CopyProtection.Protection = seed.CopyProtection.Protection;
|
||||||
|
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,48 +38,44 @@ namespace SabreTools.RedumpLib.Data
|
|||||||
public DateTime? LastModified { get; set; }
|
public DateTime? LastModified { get; set; }
|
||||||
|
|
||||||
[JsonProperty(PropertyName = "common_disc_info", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
[JsonProperty(PropertyName = "common_disc_info", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||||
public CommonDiscInfoSection? CommonDiscInfo { get; set; } = new CommonDiscInfoSection();
|
public CommonDiscInfoSection CommonDiscInfo { get; set; } = new CommonDiscInfoSection();
|
||||||
|
|
||||||
[JsonProperty(PropertyName = "versions_and_editions", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
[JsonProperty(PropertyName = "versions_and_editions", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||||
public VersionAndEditionsSection? VersionAndEditions { get; set; } = new VersionAndEditionsSection();
|
public VersionAndEditionsSection VersionAndEditions { get; set; } = new VersionAndEditionsSection();
|
||||||
|
|
||||||
[JsonProperty(PropertyName = "edc", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
[JsonProperty(PropertyName = "edc", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||||
public EDCSection? EDC { get; set; } = new EDCSection();
|
public EDCSection EDC { get; set; } = new EDCSection();
|
||||||
|
|
||||||
[JsonProperty(PropertyName = "parent_clone_relationship", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
[JsonProperty(PropertyName = "parent_clone_relationship", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||||
public ParentCloneRelationshipSection? ParentCloneRelationship { get; set; } = new ParentCloneRelationshipSection();
|
public ParentCloneRelationshipSection ParentCloneRelationship { get; set; } = new ParentCloneRelationshipSection();
|
||||||
|
|
||||||
[JsonProperty(PropertyName = "extras", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
[JsonProperty(PropertyName = "extras", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||||
public ExtrasSection? Extras { get; set; } = new ExtrasSection();
|
public ExtrasSection Extras { get; set; } = new ExtrasSection();
|
||||||
|
|
||||||
[JsonProperty(PropertyName = "copy_protection", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
[JsonProperty(PropertyName = "copy_protection", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||||
public CopyProtectionSection? CopyProtection { get; set; } = new CopyProtectionSection();
|
public CopyProtectionSection CopyProtection { get; set; } = new CopyProtectionSection();
|
||||||
|
|
||||||
[JsonProperty(PropertyName = "dumpers_and_status", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
[JsonProperty(PropertyName = "dumpers_and_status", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||||
public DumpersAndStatusSection? DumpersAndStatus { get; set; } = new DumpersAndStatusSection();
|
public DumpersAndStatusSection DumpersAndStatus { get; set; } = new DumpersAndStatusSection();
|
||||||
|
|
||||||
[JsonProperty(PropertyName = "tracks_and_write_offsets", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
[JsonProperty(PropertyName = "tracks_and_write_offsets", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||||
public TracksAndWriteOffsetsSection? TracksAndWriteOffsets { get; set; } = new TracksAndWriteOffsetsSection();
|
public TracksAndWriteOffsetsSection TracksAndWriteOffsets { get; set; } = new TracksAndWriteOffsetsSection();
|
||||||
|
|
||||||
[JsonProperty(PropertyName = "size_and_checksums", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
[JsonProperty(PropertyName = "size_and_checksums", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||||
public SizeAndChecksumsSection? SizeAndChecksums { get; set; } = new SizeAndChecksumsSection();
|
public SizeAndChecksumsSection SizeAndChecksums { get; set; } = new SizeAndChecksumsSection();
|
||||||
|
|
||||||
[JsonProperty(PropertyName = "dumping_info", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
[JsonProperty(PropertyName = "dumping_info", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||||
public DumpingInfoSection? DumpingInfo { get; set; } = new DumpingInfoSection();
|
public DumpingInfoSection DumpingInfo { get; set; } = new DumpingInfoSection();
|
||||||
|
|
||||||
[JsonProperty(PropertyName = "artifacts", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
[JsonProperty(PropertyName = "artifacts", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||||
public Dictionary<string, string>? Artifacts { get; set; } = [];
|
public Dictionary<string, string> Artifacts { get; set; } = [];
|
||||||
|
|
||||||
public object Clone()
|
public object Clone()
|
||||||
{
|
{
|
||||||
Dictionary<string, string>? artifacts = null;
|
Dictionary<string, string> artifacts = [];
|
||||||
if (this.Artifacts != null)
|
foreach (var kvp in this.Artifacts)
|
||||||
{
|
{
|
||||||
artifacts = new Dictionary<string, string>();
|
artifacts[kvp.Key] = kvp.Value;
|
||||||
foreach (var kvp in this.Artifacts)
|
|
||||||
{
|
|
||||||
artifacts[kvp.Key] = kvp.Value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return new SubmissionInfo
|
return new SubmissionInfo
|
||||||
@@ -89,16 +85,16 @@ namespace SabreTools.RedumpLib.Data
|
|||||||
PartiallyMatchedIDs = this.PartiallyMatchedIDs,
|
PartiallyMatchedIDs = this.PartiallyMatchedIDs,
|
||||||
Added = this.Added,
|
Added = this.Added,
|
||||||
LastModified = this.LastModified,
|
LastModified = this.LastModified,
|
||||||
CommonDiscInfo = this.CommonDiscInfo?.Clone() as CommonDiscInfoSection,
|
CommonDiscInfo = this.CommonDiscInfo?.Clone() as CommonDiscInfoSection ?? new CommonDiscInfoSection(),
|
||||||
VersionAndEditions = this.VersionAndEditions?.Clone() as VersionAndEditionsSection,
|
VersionAndEditions = this.VersionAndEditions?.Clone() as VersionAndEditionsSection ?? new VersionAndEditionsSection(),
|
||||||
EDC = this.EDC?.Clone() as EDCSection,
|
EDC = this.EDC?.Clone() as EDCSection ?? new EDCSection(),
|
||||||
ParentCloneRelationship = this.ParentCloneRelationship?.Clone() as ParentCloneRelationshipSection,
|
ParentCloneRelationship = this.ParentCloneRelationship?.Clone() as ParentCloneRelationshipSection ?? new ParentCloneRelationshipSection(),
|
||||||
Extras = this.Extras?.Clone() as ExtrasSection,
|
Extras = this.Extras?.Clone() as ExtrasSection ?? new ExtrasSection(),
|
||||||
CopyProtection = this.CopyProtection?.Clone() as CopyProtectionSection,
|
CopyProtection = this.CopyProtection?.Clone() as CopyProtectionSection ?? new CopyProtectionSection(),
|
||||||
DumpersAndStatus = this.DumpersAndStatus?.Clone() as DumpersAndStatusSection,
|
DumpersAndStatus = this.DumpersAndStatus?.Clone() as DumpersAndStatusSection ?? new DumpersAndStatusSection(),
|
||||||
TracksAndWriteOffsets = this.TracksAndWriteOffsets?.Clone() as TracksAndWriteOffsetsSection,
|
TracksAndWriteOffsets = this.TracksAndWriteOffsets?.Clone() as TracksAndWriteOffsetsSection ?? new TracksAndWriteOffsetsSection(),
|
||||||
SizeAndChecksums = this.SizeAndChecksums?.Clone() as SizeAndChecksumsSection,
|
SizeAndChecksums = this.SizeAndChecksums?.Clone() as SizeAndChecksumsSection ?? new SizeAndChecksumsSection(),
|
||||||
DumpingInfo = this.DumpingInfo?.Clone() as DumpingInfoSection,
|
DumpingInfo = this.DumpingInfo?.Clone() as DumpingInfoSection ?? new DumpingInfoSection(),
|
||||||
Artifacts = artifacts,
|
Artifacts = artifacts,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -232,34 +228,26 @@ namespace SabreTools.RedumpLib.Data
|
|||||||
public string? Comments { get; set; }
|
public string? Comments { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public Dictionary<SiteCode, string>? CommentsSpecialFields { get; set; }
|
public Dictionary<SiteCode, string> CommentsSpecialFields { get; set; } = [];
|
||||||
|
|
||||||
[JsonProperty(PropertyName = "d_contents", NullValueHandling = NullValueHandling.Ignore)]
|
[JsonProperty(PropertyName = "d_contents", NullValueHandling = NullValueHandling.Ignore)]
|
||||||
public string? Contents { get; set; }
|
public string? Contents { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public Dictionary<SiteCode, string>? ContentsSpecialFields { get; set; }
|
public Dictionary<SiteCode, string> ContentsSpecialFields { get; set; } = [];
|
||||||
|
|
||||||
public object Clone()
|
public object Clone()
|
||||||
{
|
{
|
||||||
Dictionary<SiteCode, string>? commentsSpecialFields = null;
|
Dictionary<SiteCode, string> commentsSpecialFields = [];
|
||||||
if (this.CommentsSpecialFields != null)
|
foreach (var kvp in this.CommentsSpecialFields)
|
||||||
{
|
{
|
||||||
commentsSpecialFields = new Dictionary<SiteCode, string>();
|
commentsSpecialFields[kvp.Key] = kvp.Value;
|
||||||
foreach (var kvp in this.CommentsSpecialFields)
|
|
||||||
{
|
|
||||||
commentsSpecialFields[kvp.Key] = kvp.Value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Dictionary<SiteCode, string>? contentsSpecialFields = null;
|
Dictionary<SiteCode, string> contentsSpecialFields = [];
|
||||||
if (this.ContentsSpecialFields != null)
|
foreach (var kvp in this.ContentsSpecialFields)
|
||||||
{
|
{
|
||||||
contentsSpecialFields = new Dictionary<SiteCode, string>();
|
contentsSpecialFields[kvp.Key] = kvp.Value;
|
||||||
foreach (var kvp in this.ContentsSpecialFields)
|
|
||||||
{
|
|
||||||
contentsSpecialFields[kvp.Key] = kvp.Value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return new CommonDiscInfoSection
|
return new CommonDiscInfoSection
|
||||||
|
|||||||
@@ -156,7 +156,7 @@ namespace SabreTools.RedumpLib
|
|||||||
output.AppendLine();
|
output.AppendLine();
|
||||||
|
|
||||||
// EDC section
|
// EDC section
|
||||||
FormatOutputData(output, info.EDC, info.CommonDiscInfo?.System);
|
FormatOutputData(output, info.EDC, info.CommonDiscInfo.System);
|
||||||
output.AppendLine();
|
output.AppendLine();
|
||||||
|
|
||||||
// Extras section
|
// Extras section
|
||||||
@@ -164,11 +164,11 @@ namespace SabreTools.RedumpLib
|
|||||||
output.AppendLine();
|
output.AppendLine();
|
||||||
|
|
||||||
// Copy Protection section
|
// Copy Protection section
|
||||||
FormatOutputData(output, info.CopyProtection, info.CommonDiscInfo?.System);
|
FormatOutputData(output, info.CopyProtection, info.CommonDiscInfo.System);
|
||||||
output.AppendLine();
|
output.AppendLine();
|
||||||
|
|
||||||
// Tracks and Write Offsets section
|
// Tracks and Write Offsets section
|
||||||
if (!string.IsNullOrEmpty(info.TracksAndWriteOffsets?.ClrMameProData))
|
if (!string.IsNullOrEmpty(info.TracksAndWriteOffsets.ClrMameProData))
|
||||||
{
|
{
|
||||||
FormatOutputData(output, info.TracksAndWriteOffsets!);
|
FormatOutputData(output, info.TracksAndWriteOffsets!);
|
||||||
output.AppendLine();
|
output.AppendLine();
|
||||||
@@ -178,8 +178,8 @@ namespace SabreTools.RedumpLib
|
|||||||
{
|
{
|
||||||
FormatOutputData(output,
|
FormatOutputData(output,
|
||||||
info.SizeAndChecksums,
|
info.SizeAndChecksums,
|
||||||
info.CommonDiscInfo?.Media.ToMediaType(),
|
info.CommonDiscInfo.Media.ToMediaType(),
|
||||||
info.CommonDiscInfo?.System,
|
info.CommonDiscInfo.System,
|
||||||
enableRedumpCompatibility);
|
enableRedumpCompatibility);
|
||||||
output.AppendLine();
|
output.AppendLine();
|
||||||
}
|
}
|
||||||
@@ -226,7 +226,7 @@ namespace SabreTools.RedumpLib
|
|||||||
info.CommonDiscInfo.Comments = info.CommonDiscInfo.Comments.Trim();
|
info.CommonDiscInfo.Comments = info.CommonDiscInfo.Comments.Trim();
|
||||||
|
|
||||||
// Wipe out the special fields dictionary
|
// Wipe out the special fields dictionary
|
||||||
info.CommonDiscInfo.CommentsSpecialFields = null;
|
info.CommonDiscInfo.CommentsSpecialFields.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process the contents field
|
// Process the contents field
|
||||||
@@ -246,7 +246,7 @@ namespace SabreTools.RedumpLib
|
|||||||
info.CommonDiscInfo.Contents = info.CommonDiscInfo.Contents.Trim();
|
info.CommonDiscInfo.Contents = info.CommonDiscInfo.Contents.Trim();
|
||||||
|
|
||||||
// Wipe out the special fields dictionary
|
// Wipe out the special fields dictionary
|
||||||
info.CommonDiscInfo.ContentsSpecialFields = null;
|
info.CommonDiscInfo.ContentsSpecialFields.Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ namespace SabreTools.RedumpLib
|
|||||||
public static void NormalizeDiscType(SubmissionInfo info)
|
public static void NormalizeDiscType(SubmissionInfo info)
|
||||||
{
|
{
|
||||||
// If we have nothing valid, do nothing
|
// If we have nothing valid, do nothing
|
||||||
if (info?.CommonDiscInfo?.Media == null || info?.SizeAndChecksums == null)
|
if (info.CommonDiscInfo.Media == null || info.SizeAndChecksums == default)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (info.CommonDiscInfo.Media)
|
switch (info.CommonDiscInfo.Media)
|
||||||
@@ -161,7 +161,7 @@ namespace SabreTools.RedumpLib
|
|||||||
public async static Task<List<int>?> ValidateUniversalHash(RedumpClient rc, SubmissionInfo info)
|
public async static Task<List<int>?> ValidateUniversalHash(RedumpClient rc, SubmissionInfo info)
|
||||||
{
|
{
|
||||||
// If we don't have special fields
|
// If we don't have special fields
|
||||||
if (info.CommonDiscInfo?.CommentsSpecialFields == null)
|
if (info.CommonDiscInfo.CommentsSpecialFields == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
// If we don't have a universal hash
|
// If we don't have a universal hash
|
||||||
|
|||||||
Reference in New Issue
Block a user