diff --git a/SabreTools.Library/DatFiles/DatHeader.cs b/SabreTools.Library/DatFiles/DatHeader.cs index 0f5b72ed..bbe7c5fd 100644 --- a/SabreTools.Library/DatFiles/DatHeader.cs +++ b/SabreTools.Library/DatFiles/DatHeader.cs @@ -239,8 +239,15 @@ namespace SabreTools.Library.DatFiles /// /// OfflineList info list /// + [JsonProperty("infos")] public List> Infos { get; set; } + /// + /// OfflineList can-open extensions + /// + [JsonProperty("canopen")] + public List CanOpen { get; set; } + /// /// Rom title /// diff --git a/SabreTools.Library/DatFiles/Json.cs b/SabreTools.Library/DatFiles/Json.cs index d99d7503..652a5787 100644 --- a/SabreTools.Library/DatFiles/Json.cs +++ b/SabreTools.Library/DatFiles/Json.cs @@ -311,6 +311,16 @@ namespace SabreTools.Library.DatFiles break; + case "canopen": + Header.CanOpen = new List(); + jtr.Read(); // Start Array + while (!sr.EndOfStream && jtr.TokenType != JsonToken.EndArray) + { + Header.CanOpen.Add(jtr.ReadAsString()); + } + + break; + case "romtitle": content = jtr.ReadAsString(); Header.RomTitle = (Header.MameConfig == null ? content : Header.RomTitle); @@ -1165,6 +1175,18 @@ namespace SabreTools.Library.DatFiles jtw.WriteEndArray(); } + if (Header.CanOpen != null) + { + jtw.WritePropertyName("canopen"); + jtw.WriteStartArray(); + foreach (string extension in Header.CanOpen) + { + jtw.WriteValue(extension); + } + + jtw.WriteEndArray(); + } + if (!string.IsNullOrWhiteSpace(Header.RomTitle)) { jtw.WritePropertyName("romtitle"); diff --git a/SabreTools.Library/DatFiles/OfflineList.cs b/SabreTools.Library/DatFiles/OfflineList.cs index fb753bea..0a45e939 100644 --- a/SabreTools.Library/DatFiles/OfflineList.cs +++ b/SabreTools.Library/DatFiles/OfflineList.cs @@ -162,7 +162,6 @@ namespace SabreTools.Library.DatFiles reader.Skip(); break; - // TODO: Use header values case "canopen": ReadCanOpen(reader.ReadSubtree()); @@ -170,7 +169,7 @@ namespace SabreTools.Library.DatFiles reader.Skip(); break; - // TODO: Use header values + // TODO: Use all header values case "newdat": ReadNewDat(reader.ReadSubtree()); @@ -241,7 +240,7 @@ namespace SabreTools.Library.DatFiles private void ReadCanOpen(XmlReader reader) { // Prepare all internal variables - List extensions = new List(); + Header.CanOpen = new List(); // If there's no subtree to the configuration, skip it if (reader == null) @@ -264,7 +263,7 @@ namespace SabreTools.Library.DatFiles switch (reader.Name.ToLowerInvariant()) { case "extension": - extensions.Add(reader.ReadElementContentAsString()); + Header.CanOpen.Add(reader.ReadElementContentAsString()); break; default: @@ -783,9 +782,18 @@ namespace SabreTools.Library.DatFiles xtw.WriteEndElement(); } - xtw.WriteStartElement("canOpen"); - xtw.WriteElementString("extension", ".bin"); - xtw.WriteEndElement(); + if (Header.CanOpen != null) + { + xtw.WriteStartElement("canOpen"); + + foreach (string extension in Header.CanOpen) + { + xtw.WriteElementString("extension", extension); + } + + // End canOpen + xtw.WriteEndElement(); + } xtw.WriteStartElement("newDat"); xtw.WriteElementString("datVersionURL", Header.Url); diff --git a/SabreTools.Library/DatFiles/SeparatedValue.cs b/SabreTools.Library/DatFiles/SeparatedValue.cs index 57a4e01c..b4528601 100644 --- a/SabreTools.Library/DatFiles/SeparatedValue.cs +++ b/SabreTools.Library/DatFiles/SeparatedValue.cs @@ -222,7 +222,19 @@ namespace SabreTools.Library.DatFiles Header.ScreenshotsHeight = (Header.ScreenshotsHeight == null ? value : Header.ScreenshotsHeight); break; - // TODO: Figure out how Header.Infos could be read in + case "DatFile.Infos": + // TODO: Figure out how Header.Infos could be read in + break; + + case "DatFile.CanOpen": + Header.CanOpen = new List(); + var extensions = value.Split(';'); + foreach (var extension in extensions) + { + Header.CanOpen.Add(extension); + } + + break; case "DatFile.RomTitle": Header.RomTitle = (Header.RomTitle == null ? value : Header.RomTitle); @@ -814,6 +826,22 @@ namespace SabreTools.Library.DatFiles case "screenshots-height": return "DatFile.ScreenshotsHeight"; + case "offlineinfos": + case "offline infos": + case "offline-infos": + case "olinfos": + case "ol infos": + case "ol-infos": + case "offlinelistinfos": + case "offlinelist infos": + case "offlinelist-infos": + return "DatFile.Infos"; + + case "canopen": + case "can open": + case "can-open": + return "DatFile.CanOpen"; + case "romtitle": case "rom title": case "rom-title":