diff --git a/SabreTools.Library/DatFiles/Logiqx.cs b/SabreTools.Library/DatFiles/Logiqx.cs index d0e6668e..2fde3cde 100644 --- a/SabreTools.Library/DatFiles/Logiqx.cs +++ b/SabreTools.Library/DatFiles/Logiqx.cs @@ -26,7 +26,7 @@ namespace SabreTools.Library.DatFiles /// Represents parsing and writing of a Logiqx-derived DAT /// /// TODO: Separate out reading of other DAT types into their own classes - /// TODO: Add XSD validation for all XML DAT types + /// TODO: Add XSD validation for all XML DAT types (maybe?) internal class Logiqx : DatFile { // Private instance variables specific to Logiqx DATs @@ -1120,7 +1120,7 @@ namespace SabreTools.Library.DatFiles // We want to process the entire subtree of the game case "machine": // New-style Logiqx case "game": // Old-style Logiqx - ReadMachine(xtr.ReadSubtree(), filename, sysid, srcid, keep, clean, remUnicode); + ReadMachine(xtr.ReadSubtree(), filename, sysid, srcid, keep, clean, remUnicode); // Skip the machine now that we've processed it xtr.Skip(); @@ -1186,7 +1186,7 @@ namespace SabreTools.Library.DatFiles content = reader.ReadElementContentAsString(); Description = (String.IsNullOrWhiteSpace(Description) ? content : Description); break; - case "rootdir": // TODO: Is this Logiqx? + case "rootdir": // This is exclusive to TruRip XML content = reader.ReadElementContentAsString(); RootDir = (String.IsNullOrWhiteSpace(RootDir) ? content : RootDir); break; @@ -1222,7 +1222,7 @@ namespace SabreTools.Library.DatFiles content = reader.ReadElementContentAsString(); Comment = (String.IsNullOrWhiteSpace(Comment) ? content : Comment); break; - case "type": // TODO: Is this Logiqx? + case "type": // This is exclusive to TruRip XML content = reader.ReadElementContentAsString(); Type = (String.IsNullOrWhiteSpace(Type) ? content : Type); superdat = superdat || content.Contains("SuperDAT"); @@ -1389,6 +1389,12 @@ namespace SabreTools.Library.DatFiles case "manufacturer": machine.Manufacturer = reader.ReadElementContentAsString(); break; + case "trurip": // This is special metadata unique to TruRip + ReadTruRip(reader.ReadSubtree(), machine); + + // Skip the trurip node now that we've processed it + reader.Skip(); + break; case "release": containsItems = true; @@ -1545,6 +1551,94 @@ namespace SabreTools.Library.DatFiles } } + /// + /// Read TruRip information + /// + /// True if full pathnames are to be kept, false otherwise (default) + /// Machine information to pass to contained items + private void ReadTruRip(XmlReader reader, Machine machine) + { + // If we have an empty trurip, skip it + if (reader == null) + { + return; + } + + // Otherwise, add what is possible + reader.MoveToContent(); + + while (!reader.EOF) + { + // We only want elements + if (reader.NodeType != XmlNodeType.Element) + { + reader.Read(); + continue; + } + + // Get the information from the trurip + string content = ""; + switch (reader.Name) + { + case "titleid": + content = reader.ReadElementContentAsString(); + // string titleid = content; + break; + case "publisher": + machine.Publisher = reader.ReadElementContentAsString(); + break; + case "developer": // Manufacturer is as close as this gets + machine.Manufacturer = reader.ReadElementContentAsString(); + break; + case "year": + machine.Year = reader.ReadElementContentAsString(); + break; + case "genre": + content = reader.ReadElementContentAsString(); + // string genre = content; + break; + case "subgenre": + content = reader.ReadElementContentAsString(); + // string subgenre = content; + break; + case "ratings": + content = reader.ReadElementContentAsString(); + // string ratings = content; + break; + case "score": + content = reader.ReadElementContentAsString(); + // string score = content; + break; + case "players": + content = reader.ReadElementContentAsString(); + // string players = content; + break; + case "enabled": + content = reader.ReadElementContentAsString(); + // string enabled = content; + break; + case "crc": + content = reader.ReadElementContentAsString(); + // string crc = Utilities.GetYesNo(content); + break; + case "source": + content = reader.ReadElementContentAsString(); + // string source = content; + break; + case "cloneof": + machine.CloneOf = reader.ReadElementContentAsString(); + break; + case "relatedto": + content = reader.ReadElementContentAsString(); + // string relatedto = content; + break; + default: + reader.Read(); + break; + } + } + } + /// /// Create and open an output file for writing direct from a dictionary ///