From 9410363d99a1a341c7e2b27eb78a8c43a5389115 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Fri, 7 Apr 2023 15:25:13 -0400 Subject: [PATCH] Add skeleton Details item --- SabreTools.Core/Enums.cs | 1 + SabreTools.DatItems/Formats/Details.cs | 238 +++++++++++++++++++++++++ 2 files changed, 239 insertions(+) create mode 100644 SabreTools.DatItems/Formats/Details.cs diff --git a/SabreTools.Core/Enums.cs b/SabreTools.Core/Enums.cs index 7f87d5cf..267417d1 100644 --- a/SabreTools.Core/Enums.cs +++ b/SabreTools.Core/Enums.cs @@ -274,6 +274,7 @@ namespace SabreTools.Core Configuration, Control, DataArea, + Details, Device, DeviceReference, DipSwitch, diff --git a/SabreTools.DatItems/Formats/Details.cs b/SabreTools.DatItems/Formats/Details.cs new file mode 100644 index 00000000..2fb4e701 --- /dev/null +++ b/SabreTools.DatItems/Formats/Details.cs @@ -0,0 +1,238 @@ +using System.Xml.Serialization; +using Newtonsoft.Json; +using SabreTools.Core; + +// TODO: Add item mappings for all fields +namespace SabreTools.DatItems.Formats +{ + /// + /// Represents a single details item + /// + [JsonObject("details"), XmlRoot("details")] + public class Details : DatItem + { + #region Fields + + /// + /// Id value + /// + /// TODO: Is this required? + [JsonProperty("id", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("id")] + public string Id { get; set; } + + /// + /// Section value + /// + [JsonProperty("section", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("section")] + public string Section { get; set; } + + /// + /// Dumping date value + /// + [JsonProperty("d_date", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("d_date")] + public string DDate { get; set; } + + /// + /// Directory name value + /// + [JsonProperty("dirname", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("dirname")] + public string DirName { get; set; } + + /// + /// NFO name value + /// + [JsonProperty("nfoname", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("nfoname")] + public string NfoName { get; set; } + + /// + /// NFO size value + /// + [JsonProperty("nfosize", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("nfosize")] + public long? NfoSize { get; set; } + + [JsonIgnore] + public bool NfoSizeSpecified { get { return NfoSize != null; } } + + /// + /// NFO CRC value + /// + [JsonProperty("nfocrc", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("nfocrc")] + public string NfoCrc { get; set; } + + /// + /// Archive name value + /// + [JsonProperty("archivename", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("archivename")] + public string ArchiveName { get; set; } + + /// + /// Date value + /// + [JsonProperty("date", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("date")] + public string Date { get; set; } + + /// + /// Grpup value + /// + [JsonProperty("group", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("group")] + public string Group { get; set; } + + /// + /// Region value + /// + [JsonProperty("region", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("region")] + public string Region { get; set; } + + /// + /// Media title value + /// + [JsonProperty("media_title", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("media_title")] + public string MediaTitle { get; set; } + + /// + /// Dumper value + /// + [JsonProperty("dumper", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("dumper")] + public string Dumper { get; set; } + + /// + /// Project value + /// + [JsonProperty("project", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("project")] + public string Project { get; set; } + + /// + /// Original format value + /// + [JsonProperty("originalformat", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("originalformat")] + public string OriginalFormat { get; set; } + + /// + /// Tool value + /// + [JsonProperty("tool", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tool")] + public string Tool { get; set; } + + /// + /// Comment 1 value + /// + [JsonProperty("comment1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("comment1")] + public string Comment1 { get; set; } + + /// + /// Link 2 value + /// + [JsonProperty("comment2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("comment2")] + public string Comment2 { get; set; } + + /// + /// Link 1 value + /// + [JsonProperty("link1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("link1")] + public string Link1 { get; set; } + + /// + /// Link 2 value + /// + [JsonProperty("link2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("link2")] + public string Link2 { get; set; } + + /// + /// Link 3 value + /// + [JsonProperty("link3", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("link3")] + public string Link3 { get; set; } + + #endregion + + #region Constructors + + /// + /// Create a default, empty Details object + /// + public Details() + { + ItemType = ItemType.Serials; + } + + #endregion + + #region Cloning Methods + + /// + public override object Clone() + { + return new Details() + { + 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, + DDate = this.DDate, + DirName = this.DirName, + NfoName = this.NfoName, + NfoSize = this.NfoSize, + NfoCrc = this.NfoCrc, + ArchiveName = this.ArchiveName, + Date = this.Date, + Group = this.Group, + Region = this.Region, + MediaTitle = this.MediaTitle, + Dumper = this.Dumper, + Project = this.Project, + OriginalFormat = this.OriginalFormat, + Tool = this.Tool, + Comment1 = this.Comment1, + Comment2 = this.Comment2, + Link1 = this.Link1, + Link2 = this.Link2, + Link3 = this.Link3, + }; + } + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem other) + { + // If we don't have a Details, return false + if (ItemType != other.ItemType) + return false; + + // Otherwise, treat it as a Details + Details newOther = other as Details; + + // If the Details information matches + return (Id == newOther.Id + && Section == newOther.Section + && DDate == newOther.DDate + && DirName == newOther.DirName + && NfoName == newOther.NfoName + && NfoSize == newOther.NfoSize + && NfoCrc == newOther.NfoCrc + && ArchiveName == newOther.ArchiveName + && Date == newOther.Date + && Group == newOther.Group + && Region == newOther.Region + && MediaTitle == newOther.MediaTitle + && Dumper == newOther.Dumper + && Project == newOther.Project + && OriginalFormat == newOther.OriginalFormat + && Tool == newOther.Tool + && Comment1 == newOther.Comment1 + && Comment2 == newOther.Comment2 + && Link1 == newOther.Link1 + && Link2 == newOther.Link2 + && Link3 == newOther.Link3); + } + + #endregion + } +}