Files
SabreTools/SabreTools.DatItems/Formats/ReleaseDetails.cs

191 lines
6.8 KiB
C#
Raw Normal View History

2023-04-07 15:25:13 -04:00
using System.Xml.Serialization;
using Newtonsoft.Json;
using SabreTools.Core;
// TODO: Add item mappings for all fields
namespace SabreTools.DatItems.Formats
{
/// <summary>
2023-04-19 12:26:54 -04:00
/// Represents a single release details item
2023-04-07 15:25:13 -04:00
/// </summary>
2023-04-19 12:26:54 -04:00
[JsonObject("release_details"), XmlRoot("release_details")]
2024-03-10 20:39:54 -04:00
public sealed class ReleaseDetails : DatItem
2023-04-07 15:25:13 -04:00
{
#region Fields
2024-03-10 20:45:54 -04:00
/// <inheritdoc>/>
protected override ItemType ItemType => ItemType.ReleaseDetails;
2023-04-07 15:25:13 -04:00
/// <summary>
/// Id value
/// </summary>
/// <remarks>TODO: Is this required?</remarks>
[JsonProperty("id", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("id")]
public string? Id { get; set; }
2023-04-07 15:25:13 -04:00
/// <summary>
2023-04-19 12:26:54 -04:00
/// Directory name value
2023-04-07 15:25:13 -04:00
/// </summary>
2023-04-19 12:26:54 -04:00
[JsonProperty("dirname", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("dirname")]
public string? DirName { get; set; }
2023-04-07 15:25:13 -04:00
/// <summary>
2023-04-19 12:26:54 -04:00
/// Rom info value
2023-04-07 15:25:13 -04:00
/// </summary>
2023-04-19 12:26:54 -04:00
[JsonProperty("rominfo", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("rominfo")]
public string? RomInfo { get; set; }
2023-04-07 15:25:13 -04:00
/// <summary>
2023-04-19 12:26:54 -04:00
/// Category value
2023-04-07 15:25:13 -04:00
/// </summary>
2023-04-19 12:26:54 -04:00
[JsonProperty("category", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("category")]
public string? Category { get; set; }
2023-04-07 15:25:13 -04:00
/// <summary>
/// NFO name value
/// </summary>
[JsonProperty("nfoname", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("nfoname")]
public string? NfoName { get; set; }
2023-04-07 15:25:13 -04:00
/// <summary>
/// NFO size value
/// </summary>
[JsonProperty("nfosize", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("nfosize")]
public long? NfoSize { get; set; }
/// <summary>
/// NFO CRC value
/// </summary>
[JsonProperty("nfocrc", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("nfocrc")]
public string? NfoCrc { get; set; }
2023-04-07 15:25:13 -04:00
/// <summary>
/// Archive name value
/// </summary>
[JsonProperty("archivename", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("archivename")]
public string? ArchiveName { get; set; }
2023-04-07 15:25:13 -04:00
2023-04-19 12:26:54 -04:00
/// <summary>
/// Original format value
/// </summary>
[JsonProperty("originalformat", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("originalformat")]
public string? OriginalFormat { get; set; }
2023-04-19 12:26:54 -04:00
2023-04-07 15:25:13 -04:00
/// <summary>
/// Date value
/// </summary>
[JsonProperty("date", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("date")]
public string? Date { get; set; }
2023-04-07 15:25:13 -04:00
/// <summary>
/// Grpup value
/// </summary>
[JsonProperty("group", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("group")]
public string? Group { get; set; }
2023-04-07 15:25:13 -04:00
/// <summary>
2023-04-19 12:26:54 -04:00
/// Comment value
2023-04-07 15:25:13 -04:00
/// </summary>
2023-04-19 12:26:54 -04:00
[JsonProperty("comment", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("comment")]
public string? Comment { get; set; }
2023-04-07 15:25:13 -04:00
/// <summary>
/// Tool value
/// </summary>
[JsonProperty("tool", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tool")]
public string? Tool { get; set; }
2023-04-07 15:25:13 -04:00
/// <summary>
2023-04-19 12:26:54 -04:00
/// Region value
2023-04-07 15:25:13 -04:00
/// </summary>
2023-04-19 12:26:54 -04:00
[JsonProperty("region", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("region")]
public string? Region { get; set; }
2023-04-07 15:25:13 -04:00
/// <summary>
2023-04-19 12:26:54 -04:00
/// Origin value
2023-04-07 15:25:13 -04:00
/// </summary>
2023-04-19 12:26:54 -04:00
[JsonProperty("origin", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("origin")]
public string? Origin { get; set; }
2023-04-07 15:25:13 -04:00
#endregion
#region Constructors
/// <summary>
2023-04-19 12:26:54 -04:00
/// Create a default, empty ReleaseDetails object
2023-04-07 15:25:13 -04:00
/// </summary>
2023-04-19 12:26:54 -04:00
public ReleaseDetails()
2023-04-07 15:25:13 -04:00
{
2024-03-10 20:45:54 -04:00
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType);
2023-04-07 15:25:13 -04:00
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
2024-03-10 16:49:07 -04:00
var releaseDetails = new ReleaseDetails()
2023-04-07 15:25:13 -04:00
{
Id = this.Id,
DirName = this.DirName,
2023-04-19 12:26:54 -04:00
RomInfo = this.RomInfo,
Category = this.Category,
2023-04-07 15:25:13 -04:00
NfoName = this.NfoName,
NfoSize = this.NfoSize,
NfoCrc = this.NfoCrc,
ArchiveName = this.ArchiveName,
2023-04-19 12:26:54 -04:00
OriginalFormat = this.OriginalFormat,
2023-04-07 15:25:13 -04:00
Date = this.Date,
Group = this.Group,
2023-04-19 12:26:54 -04:00
Comment = this.Comment,
2023-04-07 15:25:13 -04:00
Tool = this.Tool,
2023-04-19 12:26:54 -04:00
Region = this.Region,
Origin = this.Origin,
2023-04-07 15:25:13 -04:00
};
2024-03-10 16:49:07 -04:00
releaseDetails.SetFieldValue<DupeType>(DatItem.DupeTypeKey, GetFieldValue<DupeType>(DatItem.DupeTypeKey));
releaseDetails.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey));
releaseDetails.SetFieldValue<bool?>(DatItem.RemoveKey, GetBoolFieldValue(DatItem.RemoveKey));
2024-03-10 16:49:07 -04:00
releaseDetails.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey));
releaseDetails.SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, GetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey));
return releaseDetails;
2023-04-07 15:25:13 -04:00
}
#endregion
#region Comparision Methods
/// <inheritdoc/>
public override bool Equals(DatItem? other)
2023-04-07 15:25:13 -04:00
{
// If we don't have a Details, return false
2024-03-10 16:49:07 -04:00
if (GetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey) != other?.GetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey))
2023-04-07 15:25:13 -04:00
return false;
// Otherwise, treat it as a Details
ReleaseDetails? newOther = other as ReleaseDetails;
2023-04-07 15:25:13 -04:00
// If the Details information matches
return (Id == newOther!.Id
2023-04-07 15:25:13 -04:00
&& DirName == newOther.DirName
2023-04-19 12:26:54 -04:00
&& RomInfo == newOther.RomInfo
&& Category == newOther.Category
2023-04-07 15:25:13 -04:00
&& NfoName == newOther.NfoName
&& NfoSize == newOther.NfoSize
&& NfoCrc == newOther.NfoCrc
&& ArchiveName == newOther.ArchiveName
2023-04-19 12:26:54 -04:00
&& OriginalFormat == newOther.OriginalFormat
2023-04-07 15:25:13 -04:00
&& Date == newOther.Date
&& Group == newOther.Group
2023-04-19 12:26:54 -04:00
&& Comment == newOther.Comment
2023-04-07 15:25:13 -04:00
&& Tool == newOther.Tool
2023-04-19 12:26:54 -04:00
&& Region == newOther.Region
&& Origin == newOther.Origin);
2023-04-07 15:25:13 -04:00
}
#endregion
}
}