Files
SabreTools/SabreTools.DatItems/Formats/SourceDetails.cs
Matt Nadareski b37aed389e Add nullable context to SabreTools.DatItems
This change also starts migrating the internals of the DatItem formats to the new internal models. Right now, it's basically just acting like a wrapper around those models.
2023-08-14 13:17:51 -04:00

229 lines
7.7 KiB
C#

using System.Xml.Serialization;
using Newtonsoft.Json;
using SabreTools.Core;
// TODO: Add item mappings for all fields
namespace SabreTools.DatItems.Formats
{
/// <summary>
/// Represents a single source details item
/// </summary>
[JsonObject("source_details"), XmlRoot("source_details")]
public class SourceDetails : DatItem
{
#region Fields
/// <summary>
/// Id value
/// </summary>
/// <remarks>TODO: Is this required?</remarks>
[JsonProperty("id", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("id")]
public string? Id { get; set; }
/// <summary>
/// Section value
/// </summary>
[JsonProperty("section", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("section")]
public string? Section { get; set; }
/// <summary>
/// Rom info value
/// </summary>
[JsonProperty("rominfo", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("rominfo")]
public string? RomInfo { get; set; }
/// <summary>
/// Dumping date value
/// </summary>
[JsonProperty("d_date", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("d_date")]
public string? DDate { get; set; }
/// <summary>
/// Dumping date info value
/// </summary>
[JsonProperty("d_date_info", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("d_date_info")]
public string? DDateInfo { get; set; }
/// <summary>
/// Release date value
/// </summary>
[JsonProperty("r_date", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("r_date")]
public string? RDate { get; set; }
/// <summary>
/// Release date info value
/// </summary>
[JsonProperty("r_date_info", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("r_date_info")]
public string? RDateInfo { get; set; }
/// <summary>
/// Origin value
/// </summary>
[JsonProperty("origin", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("origin")]
public string? Origin { get; set; }
/// <summary>
/// Region value
/// </summary>
[JsonProperty("region", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("region")]
public string? Region { get; set; }
/// <summary>
/// Media title value
/// </summary>
[JsonProperty("media_title", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("media_title")]
public string? MediaTitle { get; set; }
/// <summary>
/// Dumper value
/// </summary>
[JsonProperty("dumper", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("dumper")]
public string? Dumper { get; set; }
/// <summary>
/// Project value
/// </summary>
[JsonProperty("project", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("project")]
public string? Project { get; set; }
/// <summary>
/// Original format value
/// </summary>
[JsonProperty("originalformat", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("originalformat")]
public string? OriginalFormat { get; set; }
/// <summary>
/// Nodump value
/// </summary>
[JsonProperty("nodump", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("nodump")]
public string? Nodump { get; set; }
/// <summary>
/// Tool value
/// </summary>
[JsonProperty("tool", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tool")]
public string? Tool { get; set; }
/// <summary>
/// Comment 1 value
/// </summary>
[JsonProperty("comment1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("comment1")]
public string? Comment1 { get; set; }
/// <summary>
/// Link 2 value
/// </summary>
[JsonProperty("comment2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("comment2")]
public string? Comment2 { get; set; }
/// <summary>
/// Link 1 value
/// </summary>
[JsonProperty("link1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("link1")]
public string? Link1 { get; set; }
/// <summary>
/// Link 2 value
/// </summary>
[JsonProperty("link2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("link2")]
public string? Link2 { get; set; }
/// <summary>
/// Link 3 value
/// </summary>
[JsonProperty("link3", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("link3")]
public string? Link3 { get; set; }
#endregion
#region Constructors
/// <summary>
/// Create a default, empty SourceDetails object
/// </summary>
public SourceDetails()
{
ItemType = ItemType.SourceDetails;
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new SourceDetails()
{
ItemType = this.ItemType,
DupeType = this.DupeType,
Machine = this.Machine?.Clone() as Machine,
Source = this.Source?.Clone() as Source,
Remove = this.Remove,
Id = this.Id,
Section = this.Section,
RomInfo = this.RomInfo,
DDate = this.DDate,
DDateInfo = this.DDateInfo,
RDate = this.RDate,
RDateInfo = this.RDateInfo,
Origin = this.Origin,
Region = this.Region,
MediaTitle = this.MediaTitle,
Dumper = this.Dumper,
Project = this.Project,
OriginalFormat = this.OriginalFormat,
Nodump = this.Nodump,
Tool = this.Tool,
Comment1 = this.Comment1,
Comment2 = this.Comment2,
Link1 = this.Link1,
Link2 = this.Link2,
Link3 = this.Link3,
};
}
#endregion
#region Comparision Methods
/// <inheritdoc/>
public override bool Equals(DatItem? other)
{
// If we don't have a SourceDetails, return false
if (ItemType != other?.ItemType)
return false;
// Otherwise, treat it as a SourceDetails
SourceDetails? newOther = other as SourceDetails;
// If the Details information matches
return (Id == newOther!.Id
&& Section == newOther.Section
&& RomInfo == newOther.RomInfo
&& DDate == newOther.DDate
&& DDateInfo == newOther.DDateInfo
&& RomInfo == newOther.RomInfo
&& RDate == newOther.RDate
&& RDateInfo == newOther.RDateInfo
&& Origin == newOther.Origin
&& Region == newOther.Region
&& MediaTitle == newOther.MediaTitle
&& Dumper == newOther.Dumper
&& Project == newOther.Project
&& OriginalFormat == newOther.OriginalFormat
&& Nodump == newOther.Nodump
&& Tool == newOther.Tool
&& Comment1 == newOther.Comment1
&& Comment2 == newOther.Comment2
&& Link1 == newOther.Link1
&& Link2 == newOther.Link2
&& Link3 == newOther.Link3);
}
#endregion
}
}