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
+ }
+}