Trurip finally gets integrated, more at 11

This commit is contained in:
Matt Nadareski
2026-04-04 15:17:58 -04:00
parent 12e1086838
commit d08427f1ba
11 changed files with 279 additions and 339 deletions

View File

@@ -159,15 +159,19 @@ namespace SabreTools.Data.Extensions
cloneMachine.Company = selfMachine.Company;
cloneMachine.Control = selfMachine.Control;
cloneMachine.Country = selfMachine.Country;
cloneMachine.CRC = selfMachine.CRC;
cloneMachine.Description = selfMachine.Description;
cloneMachine.Developer = selfMachine.Developer;
cloneMachine.DirName = selfMachine.DirName;
cloneMachine.DisplayCount = selfMachine.DisplayCount;
cloneMachine.DisplayType = selfMachine.DisplayType;
cloneMachine.DuplicateID = selfMachine.DuplicateID;
cloneMachine.Emulator = selfMachine.Emulator;
cloneMachine.Enabled = selfMachine.Enabled;
cloneMachine.Extra = selfMachine.Extra;
cloneMachine.Favorite = selfMachine.Favorite;
cloneMachine.GenMSXID = selfMachine.GenMSXID;
cloneMachine.Genre = selfMachine.Genre;
cloneMachine.Hash = selfMachine.Hash;
cloneMachine.History = selfMachine.History;
cloneMachine.Id = selfMachine.Id;
@@ -186,19 +190,25 @@ namespace SabreTools.Data.Extensions
cloneMachine.PlayedTime = selfMachine.PlayedTime;
cloneMachine.Players = selfMachine.Players;
cloneMachine.Publisher = selfMachine.Publisher;
cloneMachine.Ratings = selfMachine.Ratings;
cloneMachine.RebuildTo = selfMachine.RebuildTo;
cloneMachine.RelatedTo = selfMachine.RelatedTo;
cloneMachine.ReleaseNumber = selfMachine.ReleaseNumber;
cloneMachine.RomOf = selfMachine.RomOf;
cloneMachine.Rotation = selfMachine.Rotation;
cloneMachine.Runnable = selfMachine.Runnable;
cloneMachine.SampleOf = selfMachine.SampleOf;
cloneMachine.SaveType = selfMachine.SaveType;
cloneMachine.Score = selfMachine.Score;
cloneMachine.Source = selfMachine.Source;
cloneMachine.SourceFile = selfMachine.SourceFile;
cloneMachine.SourceRom = selfMachine.SourceRom;
cloneMachine.Status = selfMachine.Status;
cloneMachine.Subgenre = selfMachine.Subgenre;
cloneMachine.Supported = selfMachine.Supported;
cloneMachine.System = selfMachine.System;
cloneMachine.Tags = selfMachine.Tags;
cloneMachine.TitleID = selfMachine.TitleID;
cloneMachine.Url = selfMachine.Url;
cloneMachine.Year = selfMachine.Year;
}

View File

@@ -1,4 +1,3 @@
namespace SabreTools.Data.Models.Metadata
{
/// <summary>
@@ -167,6 +166,38 @@ namespace SabreTools.Data.Models.Metadata
#endregion
#region From Trurip
// public string? CloneOf { get; set; }
public string? CRC { get; set; }
public string? Developer { get; set; }
public string? Enabled { get; set; }
public string? Genre { get; set; }
// public string? Players { get; set; }
// public string? Publisher { get; set; }
public string? Ratings { get; set; }
public string? RelatedTo { get; set; }
public string? Score { get; set; }
public string? Source { get; set; }
public string? Subgenre { get; set; }
public string? TitleID { get; set; }
// public string? Year { get; set; }
#endregion
#region Keys
/// <remarks>string, string[]</remarks>
@@ -175,11 +206,6 @@ namespace SabreTools.Data.Models.Metadata
/// <remarks>string, string[]</remarks>
public const string CommentKey = "comment";
/// TODO: This needs an internal model OR mapping to fields
/// <remarks>Trurip</remarks>
[NoFilter]
public const string TruripKey = "trurip";
#endregion
}
}

View File

@@ -263,8 +263,10 @@ namespace SabreTools.Metadata.DatFiles.Test
Company = "company",
Configuration = [CreateMetadataConfiguration()],
Control = "control",
CRC = "crc",
Country = "country",
Description = "description",
Developer = "developer",
Device = [CreateMetadataDevice()],
DeviceRef = [CreateMetadataDeviceRef()],
DipSwitch = [CreateMetadataDipSwitch()],
@@ -277,10 +279,12 @@ namespace SabreTools.Metadata.DatFiles.Test
Dump = [CreateMetadataDump()],
DuplicateID = "duplicateid",
Emulator = "emulator",
Enabled = "enabled",
Extra = "extra",
Favorite = "favorite",
Feature = [CreateMetadataFeature()],
GenMSXID = "genmsxid",
Genre = "genre",
History = "history",
Id = "id",
Im1CRC = HashType.CRC32.ZeroString,
@@ -304,7 +308,9 @@ namespace SabreTools.Metadata.DatFiles.Test
Port = [CreateMetadataPort()],
Publisher = "publisher",
RamOption = [CreateMetadataRamOption()],
Ratings = "ratings",
RebuildTo = "rebuildto",
RelatedTo = "relatedto",
Release = [CreateMetadataRelease()],
ReleaseNumber = "releasenumber",
Rom = [CreateMetadataRom()],
@@ -314,17 +320,20 @@ namespace SabreTools.Metadata.DatFiles.Test
Sample = [CreateMetadataSample()],
SampleOf = "sampleof",
SaveType = "savetype",
Score = "score",
SharedFeat = [CreateMetadataSharedFeat()],
Slot = [CreateMetadataSlot()],
SoftwareList = [CreateMetadataSoftwareList()],
Sound = CreateMetadataSound(),
Source = "source",
SourceFile = "sourcefile",
SourceRom = "sourcerom",
Status = "status",
Subgenre = "subgenre",
Supported = Data.Models.Metadata.Supported.Yes,
System = "system",
Tags = "tags",
[Data.Models.Metadata.Machine.TruripKey] = CreateMetadataTrurip(),
TitleID = "titleid",
Video = [CreateMetadataVideo()],
Year = "year",
};
@@ -977,27 +986,6 @@ namespace SabreTools.Metadata.DatFiles.Test
};
}
private static Data.Models.Logiqx.Trurip CreateMetadataTrurip()
{
return new Data.Models.Logiqx.Trurip
{
TitleID = "titleid",
Publisher = "publisher",
Developer = "developer",
Year = "year",
Genre = "genre",
Subgenre = "subgenre",
Ratings = "ratings",
Score = "score",
Players = "players",
Enabled = "enabled",
CRC = "yes",
Source = "source",
CloneOf = "cloneof",
RelatedTo = "relatedto",
};
}
private static Data.Models.Metadata.Video CreateMetadataVideo()
{
return new Data.Models.Metadata.Video
@@ -1076,15 +1064,19 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("company", machine.Company);
Assert.Equal("control", machine.Control);
Assert.Equal("country", machine.Country);
Assert.Equal("crc", machine.CRC);
Assert.Equal("description", machine.Description);
Assert.Equal("developer", machine.Developer);
Assert.Equal("dirname", machine.DirName);
Assert.Equal("displaycount", machine.DisplayCount);
Assert.Equal("displaytype", machine.DisplayType);
Assert.Equal("duplicateid", machine.DuplicateID);
Assert.Equal("emulator", machine.Emulator);
Assert.Equal("enabled", machine.Enabled);
Assert.Equal("extra", machine.Extra);
Assert.Equal("favorite", machine.Favorite);
Assert.Equal("genmsxid", machine.GenMSXID);
Assert.Equal("genre", machine.Genre);
Assert.Equal("history", machine.History);
Assert.Equal("id", machine.Id);
Assert.Equal(HashType.CRC32.ZeroString, machine.Im1CRC);
@@ -1102,23 +1094,26 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("playedtime", machine.PlayedTime);
Assert.Equal("players", machine.Players);
Assert.Equal("publisher", machine.Publisher);
Assert.Equal("ratings", machine.Ratings);
Assert.Equal("rebuildto", machine.RebuildTo);
Assert.Equal("relatedto", machine.RelatedTo);
Assert.Equal("releasenumber", machine.ReleaseNumber);
Assert.Equal("romof", machine.RomOf);
Assert.Equal("rotation", machine.Rotation);
Assert.Equal(Data.Models.Metadata.Runnable.Yes, machine.Runnable);
Assert.Equal("sampleof", machine.SampleOf);
Assert.Equal("savetype", machine.SaveType);
Assert.Equal("score", machine.Score);
Assert.Equal("source", machine.Source);
Assert.Equal("sourcefile", machine.SourceFile);
Assert.Equal("sourcerom", machine.SourceRom);
Assert.Equal("status", machine.Status);
Assert.Equal("subgenre", machine.Subgenre);
Assert.Equal(Data.Models.Metadata.Supported.Yes, machine.Supported);
Assert.Equal("system", machine.System);
Assert.Equal("tags", machine.Tags);
Assert.Equal("titleid", machine.TitleID);
Assert.Equal("year", machine.Year);
DatItems.Trurip? trurip = machine.Read<DatItems.Trurip>(Data.Models.Metadata.Machine.TruripKey);
ValidateTrurip(trurip);
}
#pragma warning restore IDE0051
@@ -1653,26 +1648,6 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal(12345, sound.Channels);
}
// TODO: Figure out why so many fields are omitted
private static void ValidateTrurip(DatItems.Trurip? trurip)
{
Assert.NotNull(trurip);
Assert.Equal("titleid", trurip.TitleID);
//Assert.Equal("publisher", trurip.Publisher); // Omitted from conversion
Assert.Equal("developer", trurip.Developer);
// Assert.Equal("year", trurip.Year); // Omitted from conversion
Assert.Equal("genre", trurip.Genre);
Assert.Equal("subgenre", trurip.Subgenre);
Assert.Equal("ratings", trurip.Ratings);
Assert.Equal("score", trurip.Score);
// Assert.Equal("players", trurip.Players); // Omitted from conversion
Assert.Equal("enabled", trurip.Enabled);
Assert.True(trurip.Crc);
// Assert.Equal("source", trurip.Source); // Omitted from conversion
// Assert.Equal("cloneof", trurip.CloneOf); // Omitted from conversion
Assert.Equal("relatedto", trurip.RelatedTo);
}
private static void ValidateVideo(Display? display)
{
Assert.NotNull(display);

View File

@@ -110,7 +110,6 @@ namespace SabreTools.Metadata.DatFiles.Test
private static Machine CreateMachine()
{
Machine item = new Machine(CreateMetadataMachine());
item.Write(Data.Models.Metadata.Machine.TruripKey, CreateTrurip());
return item;
}
@@ -338,27 +337,6 @@ namespace SabreTools.Metadata.DatFiles.Test
return item;
}
private static Trurip CreateTrurip()
{
return new Trurip
{
TitleID = "titleid",
// Publisher = "publisher",
Developer = "developer",
// Year = "year",
Genre = "genre",
Subgenre = "subgenre",
Ratings = "ratings",
Score = "score",
// Players = "players",
Enabled = "enabled",
Crc = true,
// Source = "source",
// CloneOf = "cloneof",
RelatedTo = "relatedto",
};
}
private static Display CreateVideo(Machine machine)
{
Display item = new Display(CreateMetadataVideo());
@@ -430,15 +408,19 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("company", machine.Company);
Assert.Equal("control", machine.Control);
Assert.Equal("country", machine.Country);
Assert.Equal("crc", machine.CRC);
Assert.Equal("description", machine.Description);
Assert.Equal("developer", machine.Developer);
Assert.Equal("dirname", machine.DirName);
Assert.Equal("displaycount", machine.DisplayCount);
Assert.Equal("displaytype", machine.DisplayType);
Assert.Equal("duplicateid", machine.DuplicateID);
Assert.Equal("emulator", machine.Emulator);
Assert.Equal("enabled", machine.Enabled);
Assert.Equal("extra", machine.Extra);
Assert.Equal("favorite", machine.Favorite);
Assert.Equal("genmsxid", machine.GenMSXID);
Assert.Equal("genre", machine.Genre);
Assert.Equal("history", machine.History);
Assert.Equal("id", machine.Id);
Assert.Equal(HashType.CRC32.ZeroString, machine.Im1CRC);
@@ -456,19 +438,25 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("playedtime", machine.PlayedTime);
Assert.Equal("players", machine.Players);
Assert.Equal("publisher", machine.Publisher);
Assert.Equal("ratings", machine.Ratings);
Assert.Equal("rebuildto", machine.RebuildTo);
Assert.Equal("relatedto", machine.RelatedTo);
Assert.Equal("releasenumber", machine.ReleaseNumber);
Assert.Equal("romof", machine.RomOf);
Assert.Equal("rotation", machine.Rotation);
Assert.Equal(Data.Models.Metadata.Runnable.Yes, machine.Runnable);
Assert.Equal("sampleof", machine.SampleOf);
Assert.Equal("savetype", machine.SaveType);
Assert.Equal("score", machine.Score);
Assert.Equal("source", machine.Source);
Assert.Equal("sourcefile", machine.SourceFile);
Assert.Equal("sourcerom", machine.SourceRom);
Assert.Equal("status", machine.Status);
Assert.Equal("subgenre", machine.Subgenre);
Assert.Equal(Data.Models.Metadata.Supported.Yes, machine.Supported);
Assert.Equal("system", machine.System);
Assert.Equal("tags", machine.Tags);
Assert.Equal("titleid", machine.TitleID);
Assert.Equal("year", machine.Year);
Data.Models.Metadata.Adjuster[]? adjusters = machine.Adjuster;
@@ -604,9 +592,6 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.NotNull(sound);
ValidateMetadataSound(sound);
Data.Models.Logiqx.Trurip? trurip = machine.Read<Data.Models.Logiqx.Trurip>(Data.Models.Metadata.Machine.TruripKey);
ValidateMetadataTrurip(trurip);
Data.Models.Metadata.Video[]? videos = machine.Video;
Assert.NotNull(videos);
Data.Models.Metadata.Video video = Assert.Single(videos);
@@ -1223,25 +1208,6 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("tool", sourceDetails.Tool);
}
private static void ValidateMetadataTrurip(Data.Models.Logiqx.Trurip? trurip)
{
Assert.NotNull(trurip);
Assert.Equal("titleid", trurip.TitleID);
Assert.Equal("publisher", trurip.Publisher);
Assert.Equal("developer", trurip.Developer);
Assert.Equal("year", trurip.Year);
Assert.Equal("genre", trurip.Genre);
Assert.Equal("subgenre", trurip.Subgenre);
Assert.Equal("ratings", trurip.Ratings);
Assert.Equal("score", trurip.Score);
Assert.Equal("players", trurip.Players);
Assert.Equal(expected: "enabled", trurip.Enabled);
Assert.Equal("yes", trurip.CRC);
Assert.Equal("sourcefile", trurip.Source);
Assert.Equal("cloneof", trurip.CloneOf);
Assert.Equal("relatedto", trurip.RelatedTo);
}
private static void ValidateMetadataVideo(Data.Models.Metadata.Video? video)
{
Assert.NotNull(video);

View File

@@ -77,22 +77,6 @@ namespace SabreTools.Metadata.DatFiles
// Create a machine to hold everything
var machine = items[0].Machine!.GetInternalClone();
// Handle Trurip object, if it exists
if (machine.ContainsKey(Data.Models.Metadata.Machine.TruripKey))
{
var trurip = machine.Read<Trurip>(Data.Models.Metadata.Machine.TruripKey);
if (trurip is not null)
{
var truripItem = trurip.ConvertToLogiqx();
truripItem.Publisher = machine.Publisher;
truripItem.Year = machine.Year;
truripItem.Players = machine.Players;
truripItem.Source = machine.SourceFile;
truripItem.CloneOf = machine.CloneOf;
machine[Data.Models.Metadata.Machine.TruripKey] = truripItem;
}
}
// Create mapping dictionaries for the Parts, DataAreas, and DiskAreas associated with this machine
Dictionary<Data.Models.Metadata.Part, Data.Models.Metadata.DatItem> partMappings = [];
Dictionary<Data.Models.Metadata.Part, (Data.Models.Metadata.DataArea, Data.Models.Metadata.Rom)> dataAreaMappings = [];
@@ -472,22 +456,6 @@ namespace SabreTools.Metadata.DatFiles
// Create a machine to hold everything
var machine = GetMachineForItemDB(items.First().Key).Value!.GetInternalClone();
// Handle Trurip object, if it exists
if (machine.ContainsKey(Data.Models.Metadata.Machine.TruripKey))
{
var trurip = machine.Read<Trurip>(Data.Models.Metadata.Machine.TruripKey);
if (trurip is not null)
{
var truripItem = trurip.ConvertToLogiqx();
truripItem.Publisher = machine.Publisher;
truripItem.Year = machine.Year;
truripItem.Players = machine.Players;
truripItem.Source = machine.SourceFile;
truripItem.CloneOf = machine.CloneOf;
machine[Data.Models.Metadata.Machine.TruripKey] = truripItem;
}
}
// Create mapping dictionaries for the Parts, DataAreas, and DiskAreas associated with this machine
Dictionary<Data.Models.Metadata.Part, Data.Models.Metadata.DatItem> partMappings = [];
Dictionary<Data.Models.Metadata.Part, (Data.Models.Metadata.DataArea, Data.Models.Metadata.Rom)> dataAreaMappings = [];

View File

@@ -51,6 +51,12 @@ namespace SabreTools.Metadata.DatItems
set => _internal.Control = value;
}
public string? CRC
{
get => _internal.CRC;
set => _internal.CRC = value;
}
public string? Country
{
get => _internal.Country;
@@ -63,6 +69,12 @@ namespace SabreTools.Metadata.DatItems
set => _internal.Description = value;
}
public string? Developer
{
get => _internal.Developer;
set => _internal.Developer = value;
}
public string? DirName
{
get => _internal.DirName;
@@ -93,6 +105,12 @@ namespace SabreTools.Metadata.DatItems
set => _internal.Emulator = value;
}
public string? Enabled
{
get => _internal.Enabled;
set => _internal.Enabled = value;
}
public string? Extra
{
get => _internal.Extra;
@@ -111,6 +129,12 @@ namespace SabreTools.Metadata.DatItems
set => _internal.GenMSXID = value;
}
public string? Genre
{
get => _internal.Genre;
set => _internal.Genre = value;
}
public string? Hash
{
get => _internal.Hash;
@@ -219,12 +243,24 @@ namespace SabreTools.Metadata.DatItems
set => _internal.Publisher = value;
}
public string? Ratings
{
get => _internal.Ratings;
set => _internal.Ratings = value;
}
public string? RebuildTo
{
get => _internal.RebuildTo;
set => _internal.RebuildTo = value;
}
public string? RelatedTo
{
get => _internal.RelatedTo;
set => _internal.RelatedTo = value;
}
public string? ReleaseNumber
{
get => _internal.ReleaseNumber;
@@ -261,6 +297,18 @@ namespace SabreTools.Metadata.DatItems
set => _internal.SaveType = value;
}
public string? Score
{
get => _internal.Score;
set => _internal.Score = value;
}
public string? Source
{
get => _internal.Source;
set => _internal.Source = value;
}
public string? SourceFile
{
get => _internal.SourceFile;
@@ -279,6 +327,12 @@ namespace SabreTools.Metadata.DatItems
set => _internal.Status = value;
}
public string? Subgenre
{
get => _internal.Subgenre;
set => _internal.Subgenre = value;
}
public Data.Models.Metadata.Supported? Supported
{
get => _internal.Supported;
@@ -297,6 +351,12 @@ namespace SabreTools.Metadata.DatItems
set => _internal.Tags = value;
}
public string? TitleID
{
get => _internal.TitleID;
set => _internal.TitleID = value;
}
public string? Url
{
get => _internal.Url;
@@ -321,7 +381,6 @@ namespace SabreTools.Metadata.DatItems
public Machine(Data.Models.Metadata.Machine machine)
{
_internal = machine.DeepClone() as Data.Models.Metadata.Machine ?? [];
Remove(Data.Models.Metadata.Machine.TruripKey);
// Process flag values
if (Im1CRC is not null)
@@ -329,11 +388,6 @@ namespace SabreTools.Metadata.DatItems
if (Im2CRC is not null)
Im2CRC = TextHelper.NormalizeCRC32(Im2CRC);
// Handle Trurip object, if it exists
var truripItem = machine.Read<Data.Models.Logiqx.Trurip>(Data.Models.Metadata.Machine.TruripKey);
if (truripItem is not null)
Write(Data.Models.Metadata.Machine.TruripKey, new Trurip(truripItem));
}
#endregion

View File

@@ -1,146 +0,0 @@
using System;
using System.Xml.Serialization;
using Newtonsoft.Json;
using SabreTools.Data.Extensions;
namespace SabreTools.Metadata.DatItems
{
/// <summary>
/// Represents TruRip/EmuArc-specific values on a machine
/// </summary>
[JsonObject("trurip"), XmlRoot("trurip")]
public sealed class Trurip : ICloneable
{
#region Fields
/// <summary>
/// Title ID
/// </summary>
[JsonProperty("titleid", DefaultValueHandling = DefaultValueHandling.Ignore)]
[XmlElement("titleid")]
public string? TitleID { get; set; } = null;
/// <summary>
/// Machine developer
/// </summary>
[JsonProperty("developer", DefaultValueHandling = DefaultValueHandling.Ignore)]
[XmlElement("developer")]
public string? Developer { get; set; } = null;
/// <summary>
/// Game genre
/// </summary>
[JsonProperty("genre", DefaultValueHandling = DefaultValueHandling.Ignore)]
[XmlElement("genre")]
public string? Genre { get; set; } = null;
/// <summary>
/// Game subgenre
/// </summary>
[JsonProperty("subgenre", DefaultValueHandling = DefaultValueHandling.Ignore)]
[XmlElement("subgenre")]
public string? Subgenre { get; set; } = null;
/// <summary>
/// Game ratings
/// </summary>
[JsonProperty("ratings", DefaultValueHandling = DefaultValueHandling.Ignore)]
[XmlElement("ratings")]
public string? Ratings { get; set; } = null;
/// <summary>
/// Game score
/// </summary>
[JsonProperty("score", DefaultValueHandling = DefaultValueHandling.Ignore)]
[XmlElement("score")]
public string? Score { get; set; } = null;
/// <summary>
/// Is the machine enabled
/// </summary>
[JsonProperty("enabled", DefaultValueHandling = DefaultValueHandling.Ignore)]
[XmlElement("enabled")]
public string? Enabled { get; set; } = null; // bool?
/// <summary>
/// Does the game have a CRC check
/// </summary>
[JsonProperty("hascrc", DefaultValueHandling = DefaultValueHandling.Ignore)]
[XmlElement("hascrc")]
public bool? Crc { get; set; } = null;
[JsonIgnore]
public bool CrcSpecified { get { return Crc is not null; } }
/// <summary>
/// Machine relations
/// </summary>
[JsonProperty("relatedto", DefaultValueHandling = DefaultValueHandling.Ignore)]
[XmlElement("relatedto")]
public string? RelatedTo { get; set; } = null;
#endregion
#region Constructors
public Trurip() { }
public Trurip(Data.Models.Logiqx.Trurip trurip)
{
TitleID = trurip.TitleID;
Developer = trurip.Developer;
Genre = trurip.Genre;
Subgenre = trurip.Subgenre;
Ratings = trurip.Ratings;
Score = trurip.Score;
Enabled = trurip.Enabled;
Crc = trurip.CRC.AsYesNo();
RelatedTo = trurip.RelatedTo;
}
#endregion
#region Cloning methods
/// <summary>
/// Create a clone of the current object
/// </summary>
/// <returns>New object with the same values as the current one</returns>
public object Clone()
{
return new Trurip()
{
TitleID = this.TitleID,
Developer = this.Developer,
Genre = this.Genre,
Subgenre = this.Subgenre,
Ratings = this.Ratings,
Score = this.Score,
Enabled = this.Enabled,
Crc = this.Crc,
RelatedTo = this.RelatedTo,
};
}
/// <summary>
/// Convert to the internal Logiqx model
/// </summary>
public Data.Models.Logiqx.Trurip ConvertToLogiqx()
{
return new Data.Models.Logiqx.Trurip()
{
TitleID = this.TitleID,
Developer = this.Developer,
Genre = this.Genre,
Subgenre = this.Subgenre,
Ratings = this.Ratings,
Score = this.Score,
Enabled = this.Enabled,
CRC = this.Crc.FromYesNo(),
RelatedTo = this.RelatedTo,
};
}
#endregion
}
}

View File

@@ -919,12 +919,18 @@ namespace SabreTools.Metadata.Filter
case Machine item when fieldName == "control":
checkValue = item.Control;
return true;
case Machine item when fieldName == "crc":
checkValue = item.CRC;
return true;
case Machine item when fieldName == "country":
checkValue = item.Country;
return true;
case Machine item when fieldName == "description":
checkValue = item.Description;
return true;
case Machine item when fieldName == "developer":
checkValue = item.Developer;
return true;
case Machine item when fieldName == "dirname":
checkValue = item.DirName;
return true;
@@ -940,6 +946,9 @@ namespace SabreTools.Metadata.Filter
case Machine item when fieldName == "emulator":
checkValue = item.Emulator;
return true;
case Machine item when fieldName == "enabled":
checkValue = item.Enabled;
return true;
case Machine item when fieldName == "extra":
checkValue = item.Extra;
return true;
@@ -949,6 +958,9 @@ namespace SabreTools.Metadata.Filter
case Machine item when fieldName == "genmsxid":
checkValue = item.GenMSXID;
return true;
case Machine item when fieldName == "genre":
checkValue = item.Genre;
return true;
case Machine item when fieldName == "hash":
checkValue = item.Hash;
return true;
@@ -1003,9 +1015,15 @@ namespace SabreTools.Metadata.Filter
case Machine item when fieldName == "publisher":
checkValue = item.Publisher;
return true;
case Machine item when fieldName == "ratings":
checkValue = item.Ratings;
return true;
case Machine item when fieldName == "rebuildto":
checkValue = item.RebuildTo;
return true;
case Machine item when fieldName == "relatedto":
checkValue = item.RelatedTo;
return true;
case Machine item when fieldName == "releasenumber":
checkValue = item.ReleaseNumber;
return true;
@@ -1024,6 +1042,12 @@ namespace SabreTools.Metadata.Filter
case Machine item when fieldName == "savetype":
checkValue = item.SaveType;
return true;
case Machine item when fieldName == "score":
checkValue = item.Score;
return true;
case Machine item when fieldName == "source":
checkValue = item.Source;
return true;
case Machine item when fieldName == "sourcefile":
checkValue = item.SourceFile;
return true;
@@ -1033,6 +1057,9 @@ namespace SabreTools.Metadata.Filter
case Machine item when fieldName == "status":
checkValue = item.Status;
return true;
case Machine item when fieldName == "subgenre":
checkValue = item.Subgenre;
return true;
case Machine item when fieldName == "supported":
checkValue = item.Supported?.AsStringValue();
return true;
@@ -1042,6 +1069,9 @@ namespace SabreTools.Metadata.Filter
case Machine item when fieldName == "tags":
checkValue = item.Tags;
return true;
case Machine item when fieldName == "titleid":
checkValue = item.TitleID;
return true;
case Machine item when fieldName == "url":
checkValue = item.Url;
return true;

View File

@@ -254,10 +254,14 @@ namespace SabreTools.Metadata
return false;
if (selfMachine.Control != otherMachine.Control)
return false;
if (selfMachine.CRC != otherMachine.CRC)
return false;
if (selfMachine.Country != otherMachine.Country)
return false;
if (selfMachine.Description != otherMachine.Description)
return false;
if (selfMachine.Developer != otherMachine.Developer)
return false;
if (selfMachine.DirName != otherMachine.DirName)
return false;
if (selfMachine.DisplayCount != otherMachine.DisplayCount)
@@ -268,12 +272,16 @@ namespace SabreTools.Metadata
return false;
if (selfMachine.Emulator != otherMachine.Emulator)
return false;
if (selfMachine.Enabled != otherMachine.Enabled)
return false;
if (selfMachine.Extra != otherMachine.Extra)
return false;
if (selfMachine.Favorite != otherMachine.Favorite)
return false;
if (selfMachine.GenMSXID != otherMachine.GenMSXID)
return false;
if (selfMachine.Genre != otherMachine.Genre)
return false;
if (selfMachine.Hash != otherMachine.Hash)
return false;
if (selfMachine.History != otherMachine.History)
@@ -308,8 +316,12 @@ namespace SabreTools.Metadata
return false;
if (selfMachine.Publisher != otherMachine.Publisher)
return false;
if (selfMachine.Ratings != otherMachine.Ratings)
return false;
if (selfMachine.RebuildTo != otherMachine.RebuildTo)
return false;
if (selfMachine.RelatedTo != otherMachine.RelatedTo)
return false;
if (selfMachine.ReleaseNumber != otherMachine.ReleaseNumber)
return false;
if (selfMachine.RomOf != otherMachine.RomOf)
@@ -322,18 +334,26 @@ namespace SabreTools.Metadata
return false;
if (selfMachine.SaveType != otherMachine.SaveType)
return false;
if (selfMachine.Score != otherMachine.Score)
return false;
if (selfMachine.Source != otherMachine.Source)
return false;
if (selfMachine.SourceFile != otherMachine.SourceFile)
return false;
if (selfMachine.SourceRom != otherMachine.SourceRom)
return false;
if (selfMachine.Status != otherMachine.Status)
return false;
if (selfMachine.Subgenre != otherMachine.Subgenre)
return false;
if (selfMachine.Supported != otherMachine.Supported)
return false;
if (selfMachine.System != otherMachine.System)
return false;
if (selfMachine.Tags != otherMachine.Tags)
return false;
if (selfMachine.TitleID != otherMachine.TitleID)
return false;
if (selfMachine.Url != otherMachine.Url)
return false;
if (selfMachine.Year != otherMachine.Year)

View File

@@ -57,57 +57,46 @@ namespace SabreTools.Serialization.CrossModel
};
string? headerVal = item.ReadString(Data.Models.Metadata.Header.HeaderKey);
Data.Models.Metadata.MergingFlag forceMerging = item.ForceMerging;
Data.Models.Metadata.NodumpFlag forceNodump = item.ForceNodump;
Data.Models.Metadata.PackingFlag forcePacking = item.ForcePacking;
if (headerVal is not null
|| forceMerging is not Data.Models.Metadata.MergingFlag.None
|| forceNodump is not Data.Models.Metadata.NodumpFlag.None
|| forcePacking is not Data.Models.Metadata.PackingFlag.None)
|| item.ForceMerging is not Data.Models.Metadata.MergingFlag.None
|| item.ForceNodump is not Data.Models.Metadata.NodumpFlag.None
|| item.ForcePacking is not Data.Models.Metadata.PackingFlag.None)
{
header.ClrMamePro = new Data.Models.Logiqx.ClrMamePro();
if (headerVal is not null)
header.ClrMamePro.Header = headerVal;
if (forceMerging is not Data.Models.Metadata.MergingFlag.None)
header.ClrMamePro.ForceMerging = forceMerging;
if (forceNodump is not Data.Models.Metadata.NodumpFlag.None)
header.ClrMamePro.ForceNodump = forceNodump;
if (forcePacking is not Data.Models.Metadata.PackingFlag.None)
header.ClrMamePro.ForcePacking = forcePacking;
if (item.ForceMerging is not Data.Models.Metadata.MergingFlag.None)
header.ClrMamePro.ForceMerging = item.ForceMerging;
if (item.ForceNodump is not Data.Models.Metadata.NodumpFlag.None)
header.ClrMamePro.ForceNodump = item.ForceNodump;
if (item.ForcePacking is not Data.Models.Metadata.PackingFlag.None)
header.ClrMamePro.ForcePacking = item.ForcePacking;
}
string? plugin = item.Plugin;
Data.Models.Metadata.MergingFlag romMode = item.RomMode;
Data.Models.Metadata.MergingFlag biosMode = item.BiosMode;
Data.Models.Metadata.MergingFlag sampleMode = item.SampleMode;
bool? lockRomMode = item.LockRomMode;
bool? lockBiosMode = item.LockBiosMode;
bool? lockSampleMode = item.LockSampleMode;
if (plugin is not null
|| romMode is not Data.Models.Metadata.MergingFlag.None
|| biosMode is not Data.Models.Metadata.MergingFlag.None
|| sampleMode is not Data.Models.Metadata.MergingFlag.None
|| lockRomMode is not null
|| lockBiosMode is not null
|| lockSampleMode is not null)
if (item.Plugin is not null
|| item.RomMode is not Data.Models.Metadata.MergingFlag.None
|| item.BiosMode is not Data.Models.Metadata.MergingFlag.None
|| item.SampleMode is not Data.Models.Metadata.MergingFlag.None
|| item.LockRomMode is not null
|| item.LockBiosMode is not null
|| item.LockSampleMode is not null)
{
header.RomCenter = new Data.Models.Logiqx.RomCenter();
if (plugin is not null)
header.RomCenter.Plugin = plugin;
if (romMode is not Data.Models.Metadata.MergingFlag.None)
header.RomCenter.RomMode = romMode;
if (biosMode is not Data.Models.Metadata.MergingFlag.None)
header.RomCenter.BiosMode = biosMode;
if (sampleMode is not Data.Models.Metadata.MergingFlag.None)
header.RomCenter.SampleMode = sampleMode;
if (lockRomMode is not null)
header.RomCenter.LockRomMode = lockRomMode;
if (lockBiosMode is not null)
header.RomCenter.LockBiosMode = lockBiosMode;
if (lockSampleMode is not null)
header.RomCenter.LockSampleMode = lockSampleMode;
if (item.Plugin is not null)
header.RomCenter.Plugin = item.Plugin;
if (item.RomMode is not Data.Models.Metadata.MergingFlag.None)
header.RomCenter.RomMode = item.RomMode;
if (item.BiosMode is not Data.Models.Metadata.MergingFlag.None)
header.RomCenter.BiosMode = item.BiosMode;
if (item.SampleMode is not Data.Models.Metadata.MergingFlag.None)
header.RomCenter.SampleMode = item.SampleMode;
if (item.LockRomMode is not null)
header.RomCenter.LockRomMode = item.LockRomMode;
if (item.LockBiosMode is not null)
header.RomCenter.LockBiosMode = item.LockBiosMode;
if (item.LockSampleMode is not null)
header.RomCenter.LockSampleMode = item.LockSampleMode;
}
return header;
@@ -140,9 +129,47 @@ namespace SabreTools.Serialization.CrossModel
gameBase.Publisher = item.Publisher;
gameBase.Category = item.ReadStringArray(Data.Models.Metadata.Machine.CategoryKey);
var trurip = item.Read<Trurip>(Data.Models.Metadata.Machine.TruripKey);
if (trurip is not null)
gameBase.Trurip = trurip;
if (item.TitleID is not null
|| item.Developer is not null
|| item.Genre is not null
|| item.Subgenre is not null
|| item.Ratings is not null
|| item.Score is not null
|| item.Enabled is not null
|| item.CRC is not null
|| item.Source is not null
|| item.RelatedTo is not null)
{
gameBase.Trurip = new Trurip();
if (item.TitleID is not null)
gameBase.Trurip.TitleID = item.TitleID;
if (item.Publisher is not null)
gameBase.Trurip.Publisher = item.Publisher;
if (item.Developer is not null)
gameBase.Trurip.Developer = item.Developer;
if (item.Year is not null)
gameBase.Trurip.Year = item.Year;
if (item.Genre is not null)
gameBase.Trurip.Genre = item.Genre;
if (item.Subgenre is not null)
gameBase.Trurip.Subgenre = item.Subgenre;
if (item.Ratings is not null)
gameBase.Trurip.Ratings = item.Ratings;
if (item.Score is not null)
gameBase.Trurip.Score = item.Score;
if (item.Players is not null)
gameBase.Trurip.Players = item.Players;
if (item.Enabled is not null)
gameBase.Trurip.Enabled = item.Enabled;
if (item.CRC is not null)
gameBase.Trurip.CRC = item.CRC;
if (item.Source is not null)
gameBase.Trurip.Source = item.Source;
if (item.CloneOf is not null)
gameBase.Trurip.CloneOf = item.CloneOf;
if (item.RelatedTo is not null)
gameBase.Trurip.RelatedTo = item.RelatedTo;
}
var releases = item.Release;
if (releases is not null && releases.Length > 0)

View File

@@ -126,26 +126,36 @@ namespace SabreTools.Serialization.CrossModel
var machine = new Data.Models.Metadata.Machine
{
Name = machineName,
SourceFile = item.SourceFile,
Board = item.Board,
[Data.Models.Metadata.Machine.CategoryKey] = item.Category,
CloneOf = item.CloneOf ?? item.Trurip?.CloneOf,
CloneOfId = item.CloneOfId,
[Data.Models.Metadata.Machine.CommentKey] = item.Comment,
CRC = item.Trurip?.CRC,
Description = item.Description,
Developer = item.Trurip?.Developer,
Enabled = item.Trurip?.Enabled,
Genre = item.Trurip?.Genre,
Id = item.Id,
IsBios = item.IsBios,
IsDevice = item.IsDevice,
IsMechanical = item.IsMechanical,
CloneOf = item.CloneOf,
RomOf = item.RomOf,
SampleOf = item.SampleOf,
Board = item.Board,
RebuildTo = item.RebuildTo,
Id = item.Id,
CloneOfId = item.CloneOfId,
Runnable = item.Runnable,
[Data.Models.Metadata.Machine.CommentKey] = item.Comment,
Description = item.Description,
Year = item.Year,
Manufacturer = item.Manufacturer,
Publisher = item.Publisher,
[Data.Models.Metadata.Machine.CategoryKey] = item.Category,
[Data.Models.Metadata.Machine.TruripKey] = item.Trurip,
Name = machineName,
Players = item.Trurip?.Players,
Publisher = item.Publisher ?? item.Trurip?.Publisher,
Ratings = item.Trurip?.Ratings,
RebuildTo = item.RebuildTo,
RelatedTo = item.Trurip?.RelatedTo,
RomOf = item.RomOf,
Runnable = item.Runnable,
SampleOf = item.SampleOf,
Score = item.Trurip?.Score,
Source = item.Trurip?.Source,
SourceFile = item.SourceFile,
Subgenre = item.Trurip?.Subgenre,
TitleID = item.Trurip?.TitleID,
Year = item.Year ?? item.Trurip?.Year,
};
if (item.Release is not null && item.Release.Length > 0)