Wire up Logiqx TruRip/EmuArc fields

This commit is contained in:
Matt Nadareski
2020-08-20 22:42:04 -07:00
parent d90e9ee8a1
commit bcd765b375
8 changed files with 726 additions and 54 deletions

View File

@@ -451,7 +451,8 @@ namespace SabreTools.Library.DatFiles
switch (jtr.Value) switch (jtr.Value)
{ {
// Common #region Common
case "name": case "name":
machine.Name = jtr.ReadAsString(); machine.Name = jtr.ReadAsString();
break; break;
@@ -504,7 +505,10 @@ namespace SabreTools.Library.DatFiles
ReadItems(sr, jtr, filename, indexId, machine); ReadItems(sr, jtr, filename, indexId, machine);
break; break;
// AttractMode #endregion
#region AttractMode
case "players": case "players":
machine.Players = jtr.ReadAsString(); machine.Players = jtr.ReadAsString();
break; break;
@@ -527,7 +531,10 @@ namespace SabreTools.Library.DatFiles
machine.Buttons = jtr.ReadAsString(); machine.Buttons = jtr.ReadAsString();
break; break;
// ListXML #endregion
#region ListXML
case "sourcefile": case "sourcefile":
machine.SourceFile = jtr.ReadAsString(); machine.SourceFile = jtr.ReadAsString();
break; break;
@@ -571,7 +578,10 @@ namespace SabreTools.Library.DatFiles
break; break;
// Logiqx #endregion
#region Logiqx
case "board": case "board":
machine.Board = jtr.ReadAsString(); machine.Board = jtr.ReadAsString();
break; break;
@@ -579,11 +589,48 @@ namespace SabreTools.Library.DatFiles
machine.RebuildTo = jtr.ReadAsString(); machine.RebuildTo = jtr.ReadAsString();
break; break;
// SoftwareList #endregion
#region Logiqx EmuArc
case "titleid":
machine.TitleID = jtr.ReadAsString();
break;
case "developer":
machine.Developer = jtr.ReadAsString();
break;
case "genre":
machine.Genre = jtr.ReadAsString();
break;
case "subgenre":
machine.Subgenre = jtr.ReadAsString();
break;
case "ratings":
machine.Ratings = jtr.ReadAsString();
break;
case "score":
machine.Score = jtr.ReadAsString();
break;
case "enabled":
machine.Enabled = jtr.ReadAsString();
break;
case "hascrc":
machine.HasCrc = jtr.ReadAsString().AsYesNo();
break;
case "relatedto":
machine.RelatedTo = jtr.ReadAsString();
break;
#endregion
#region SoftwareList
case "supported": case "supported":
machine.Supported = jtr.ReadAsString().AsYesNo(); machine.Supported = jtr.ReadAsString().AsYesNo();
break; break;
#endregion
default: default:
break; break;
} }
@@ -1382,7 +1429,8 @@ namespace SabreTools.Library.DatFiles
// Build the state based on excluded fields // Build the state based on excluded fields
jtw.WriteStartObject(); jtw.WriteStartObject();
// Common #region Common
jtw.WritePropertyName("name"); jtw.WritePropertyName("name");
jtw.WriteValue(datItem.GetField(Field.MachineName, Header.ExcludeFields)); jtw.WriteValue(datItem.GetField(Field.MachineName, Header.ExcludeFields));
@@ -1450,7 +1498,10 @@ namespace SabreTools.Library.DatFiles
} }
} }
// AttractMode #endregion
#region AttractMode
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Players, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Players, Header.ExcludeFields)))
{ {
jtw.WritePropertyName("players"); jtw.WritePropertyName("players");
@@ -1487,7 +1538,10 @@ namespace SabreTools.Library.DatFiles
jtw.WriteValue(datItem.Machine.Buttons); jtw.WriteValue(datItem.Machine.Buttons);
} }
// ListXML #endregion
#region ListXML
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SourceFile, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SourceFile, Header.ExcludeFields)))
{ {
jtw.WritePropertyName("sourcefile"); jtw.WritePropertyName("sourcefile");
@@ -1543,7 +1597,10 @@ namespace SabreTools.Library.DatFiles
jtw.WriteEndArray(); jtw.WriteEndArray();
} }
// Logiqx #endregion
#region Logiqx
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Board, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Board, Header.ExcludeFields)))
{ {
jtw.WritePropertyName("board"); jtw.WritePropertyName("board");
@@ -1555,7 +1612,68 @@ namespace SabreTools.Library.DatFiles
jtw.WriteValue(datItem.Machine.RebuildTo); jtw.WriteValue(datItem.Machine.RebuildTo);
} }
// SoftwareList #endregion
#region Logiqx EmuArc
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.TitleID, Header.ExcludeFields)))
{
jtw.WritePropertyName("titleid");
jtw.WriteValue(datItem.Machine.TitleID);
}
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Developer, Header.ExcludeFields)))
{
jtw.WritePropertyName("developer");
jtw.WriteValue(datItem.Machine.Developer);
}
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Genre, Header.ExcludeFields)))
{
jtw.WritePropertyName("genre");
jtw.WriteValue(datItem.Machine.Genre);
}
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Subgenre, Header.ExcludeFields)))
{
jtw.WritePropertyName("subgenre");
jtw.WriteValue(datItem.Machine.Subgenre);
}
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Ratings, Header.ExcludeFields)))
{
jtw.WritePropertyName("ratings");
jtw.WriteValue(datItem.Machine.Ratings);
}
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Score, Header.ExcludeFields)))
{
jtw.WritePropertyName("score");
jtw.WriteValue(datItem.Machine.Score);
}
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Enabled, Header.ExcludeFields)))
{
jtw.WritePropertyName("enabled");
jtw.WriteValue(datItem.Machine.Enabled);
}
if (!Header.ExcludeFields.Contains(Field.HasCrc) && datItem.Machine.HasCrc != null)
{
if (datItem.Machine.HasCrc == true)
{
jtw.WritePropertyName("hascrc");
jtw.WriteValue("yes");
}
else if (datItem.Machine.HasCrc == false)
{
jtw.WritePropertyName("hascrc");
jtw.WriteValue("no");
}
}
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.RelatedTo, Header.ExcludeFields)))
{
jtw.WritePropertyName("relatedto");
jtw.WriteValue(datItem.Machine.RelatedTo);
}
#endregion
#region SoftwareList
if (!Header.ExcludeFields.Contains(Field.Supported) && datItem.Machine.Supported != null) if (!Header.ExcludeFields.Contains(Field.Supported) && datItem.Machine.Supported != null)
{ {
if (datItem.Machine.Supported == true) if (datItem.Machine.Supported == true)
@@ -1570,6 +1688,8 @@ namespace SabreTools.Library.DatFiles
} }
} }
#endregion
jtw.WritePropertyName("items"); jtw.WritePropertyName("items");
jtw.WriteStartArray(); jtw.WriteStartArray();

View File

@@ -367,7 +367,7 @@ namespace SabreTools.Library.DatFiles
machine.Category = reader.ReadElementContentAsString(); machine.Category = reader.ReadElementContentAsString();
break; break;
case "trurip": // This is special metadata unique to TruRip case "trurip": // This is special metadata unique to EmuArc
ReadTruRip(reader.ReadSubtree(), machine); ReadTruRip(reader.ReadSubtree(), machine);
// Skip the trurip node now that we've processed it // Skip the trurip node now that we've processed it
@@ -556,7 +556,7 @@ namespace SabreTools.Library.DatFiles
} }
/// <summary> /// <summary>
/// Read TruRip information /// Read EmuArc information
/// </summary> /// </summary>
/// <param name="keep">True if full pathnames are to be kept, false otherwise (default)</param> /// <param name="keep">True if full pathnames are to be kept, false otherwise (default)</param>
/// <param name="machine">Machine information to pass to contained items</param> /// <param name="machine">Machine information to pass to contained items</param>
@@ -582,15 +582,15 @@ namespace SabreTools.Library.DatFiles
switch (reader.Name) switch (reader.Name)
{ {
case "titleid": case "titleid":
reader.ReadElementContentAsString(); machine.TitleID = reader.ReadElementContentAsString();
break; break;
case "publisher": case "publisher":
machine.Publisher = reader.ReadElementContentAsString(); machine.Publisher = reader.ReadElementContentAsString();
break; break;
case "developer": // Manufacturer is as close as this gets case "developer":
machine.Manufacturer = reader.ReadElementContentAsString(); machine.Developer = reader.ReadElementContentAsString();
break; break;
case "year": case "year":
@@ -598,31 +598,31 @@ namespace SabreTools.Library.DatFiles
break; break;
case "genre": case "genre":
machine.Category = reader.ReadElementContentAsString(); machine.Genre = reader.ReadElementContentAsString();
break; break;
case "subgenre": case "subgenre":
reader.ReadElementContentAsString(); machine.Subgenre = reader.ReadElementContentAsString();
break; break;
case "ratings": case "ratings":
reader.ReadElementContentAsString(); machine.Ratings = reader.ReadElementContentAsString();
break; break;
case "score": case "score":
reader.ReadElementContentAsString(); machine.Score = reader.ReadElementContentAsString();
break; break;
case "players": case "players":
reader.ReadElementContentAsString(); machine.Players = reader.ReadElementContentAsString();
break; break;
case "enabled": case "enabled":
reader.ReadElementContentAsString(); machine.Enabled = reader.ReadElementContentAsString();
break; break;
case "crc": case "crc":
reader.ReadElementContentAsString().AsYesNo(); machine.HasCrc = reader.ReadElementContentAsString().AsYesNo();
break; break;
case "source": case "source":
@@ -634,7 +634,7 @@ namespace SabreTools.Library.DatFiles
break; break;
case "relatedto": case "relatedto":
reader.ReadElementContentAsString(); machine.RelatedTo = reader.ReadElementContentAsString();
break; break;
default: default:
@@ -1008,6 +1008,58 @@ namespace SabreTools.Library.DatFiles
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Category, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Category, Header.ExcludeFields)))
xtw.WriteElementString("category", datItem.Machine.Category); xtw.WriteElementString("category", datItem.Machine.Category);
if (datItem.Machine.TitleID != null
|| datItem.Machine.Developer != null
|| datItem.Machine.Genre != null
|| datItem.Machine.Subgenre != null
|| datItem.Machine.Ratings != null
|| datItem.Machine.Score != null
|| datItem.Machine.Enabled != null
|| datItem.Machine.HasCrc != null
|| datItem.Machine.RelatedTo != null)
{
xtw.WriteStartElement("trurip");
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.TitleID, Header.ExcludeFields)))
xtw.WriteElementString("titleid", datItem.Machine.TitleID);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Publisher, Header.ExcludeFields)))
xtw.WriteElementString("publisher", datItem.Machine.Publisher);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Developer, Header.ExcludeFields)))
xtw.WriteElementString("developer", datItem.Machine.Developer);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Year, Header.ExcludeFields)))
xtw.WriteElementString("year", datItem.Machine.Year);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Genre, Header.ExcludeFields)))
xtw.WriteElementString("genre", datItem.Machine.Genre);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Subgenre, Header.ExcludeFields)))
xtw.WriteElementString("subgenre", datItem.Machine.Subgenre);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Ratings, Header.ExcludeFields)))
xtw.WriteElementString("ratings", datItem.Machine.Ratings);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Score, Header.ExcludeFields)))
xtw.WriteElementString("score", datItem.Machine.Score);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Players, Header.ExcludeFields)))
xtw.WriteElementString("players", datItem.Machine.Players);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Enabled, Header.ExcludeFields)))
xtw.WriteElementString("enabled", datItem.Machine.Enabled);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.TitleID, Header.ExcludeFields)))
xtw.WriteElementString("titleid", datItem.Machine.TitleID);
if (!Header.ExcludeFields.Contains(Field.HasCrc) && datItem.Machine.HasCrc != null)
{
if (datItem.Machine.HasCrc == true)
xtw.WriteElementString("crc", "yes");
else if (datItem.Machine.HasCrc == false)
xtw.WriteElementString("crc", "no");
}
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SourceFile, Header.ExcludeFields)))
xtw.WriteElementString("source", datItem.Machine.SourceFile);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CloneOf, Header.ExcludeFields)))
xtw.WriteElementString("cloneof", datItem.Machine.CloneOf);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.RelatedTo, Header.ExcludeFields)))
xtw.WriteElementString("relatedto", datItem.Machine.RelatedTo);
// End trurip
xtw.WriteEndElement();
}
xtw.Flush(); xtw.Flush();
} }
catch (Exception ex) catch (Exception ex)

View File

@@ -415,6 +415,46 @@ namespace SabreTools.Library.DatFiles
#endregion #endregion
#region Logiqx EmuArc
case "Machine.TitleID":
machine.TitleID = value;
break;
case "Machine.Developer":
machine.Developer = value;
break;
case "Machine.Genre":
machine.Genre = value;
break;
case "Machine.Subgenre":
machine.Subgenre = value;
break;
case "Machine.Ratings":
machine.Ratings = value;
break;
case "Machine.Score":
machine.Score = value;
break;
case "Machine.Enabled":
machine.Enabled = value;
break;
case "Machine.HasCrc":
machine.HasCrc = value.AsYesNo();
break;
case "Machine.RelatedTo":
machine.RelatedTo = value;
break;
#endregion
#region SoftwareList #region SoftwareList
case "Machine.Supported": case "Machine.Supported":
@@ -1089,6 +1129,43 @@ namespace SabreTools.Library.DatFiles
#endregion #endregion
#region Logiqx EmuArc
case "titleid":
case "title id":
case "title-id":
return "Machine.TitleID";
case "developer":
return "Machine.Developer";
case "genre":
return "Machine.Genre";
case "subgenre":
return "Machine.Subgenre";
case "ratings":
return "Machine.Ratings";
case "score":
return "Machine.Score";
case "enabled":
return "Machine.Enabled";
case "hascrc":
case "has crc":
case "has-crc":
return "Machine.HasCrc";
case "relatedto":
case "related to":
case "related-to":
return "Machine.RelatedTo";
#endregion
#region SoftwareList #region SoftwareList
case "supported": case "supported":

View File

@@ -209,6 +209,17 @@ namespace SabreTools.Library.DatItems
Field.Board, Field.Board,
Field.RebuildTo, Field.RebuildTo,
// Logiqx EmuArc
Field.TitleID,
Field.Developer,
Field.Genre,
Field.Subgenre,
Field.Ratings,
Field.Score,
Field.Enabled,
Field.HasCrc,
Field.RelatedTo,
// SoftwareList // SoftwareList
Field.Supported, Field.Supported,
}; };

View File

@@ -28,7 +28,8 @@ namespace SabreTools.Library.DatItems
#region Machine #region Machine
// Common Machine #region Common
MachineName, MachineName,
Comment, Comment,
Description, Description,
@@ -41,7 +42,10 @@ namespace SabreTools.Library.DatItems
SampleOf, SampleOf,
MachineType, MachineType,
// AttractMode Machine #endregion
#region AttractMode
Players, Players,
Rotation, Rotation,
Control, Control,
@@ -50,39 +54,73 @@ namespace SabreTools.Library.DatItems
DisplayType, DisplayType,
Buttons, Buttons,
// ListXML Machine #endregion
#region ListXML
SourceFile, SourceFile,
Runnable, Runnable,
Devices, Devices,
SlotOptions, SlotOptions,
Infos, Infos,
// Logiqx Machine #endregion
#region Logiqx
Board, Board,
RebuildTo, RebuildTo,
// SoftwareList Machine #endregion
#region Logiqx EmuArc
TitleID,
Developer,
Genre,
Subgenre,
Ratings,
Score,
Enabled,
HasCrc,
RelatedTo,
#endregion
#region SoftwareList
Supported, Supported,
#endregion #endregion
#endregion // Machine
#region DatItem #region DatItem
// Common DatItem #region Common
Name, Name,
ItemType, ItemType,
// AttractMode DatItem #endregion
#region AttractMode
AltName, AltName,
AltTitle, AltTitle,
// SoftwareList DatItem #endregion
#region SoftwareList
PartName, PartName,
PartInterface, PartInterface,
Features, Features,
AreaName, AreaName,
AreaSize, AreaSize,
#endregion
// BiosSet // BiosSet
Default, Default,
BiosDescription, BiosDescription,
@@ -114,7 +152,7 @@ namespace SabreTools.Library.DatItems
Offset, Offset,
Inverted, Inverted,
#endregion #endregion // DatItem
} }
/// <summary> /// <summary>

View File

@@ -90,6 +90,7 @@ namespace SabreTools.Library.DatItems
/// <summary> /// <summary>
/// Player count /// Player count
/// </summary> /// </summary>
/// <remarks>Also in Logiqx EmuArc</remarks>
[JsonProperty("players")] [JsonProperty("players")]
public string Players { get; set; } = null; public string Players { get; set; } = null;
@@ -184,6 +185,64 @@ namespace SabreTools.Library.DatItems
#endregion #endregion
#region Logiqx EmuArc Fields
/// <summary>
/// Title ID
/// </summary>
[JsonProperty("titleid")]
public string TitleID { get; set; } = null;
/// <summary>
/// Machine developer
/// </summary>
[JsonProperty("developer")]
public string Developer { get; set; } = null;
/// <summary>
/// Game genre
/// </summary>
[JsonProperty("genre")]
public string Genre { get; set; } = null;
/// <summary>
/// Game subgenre
/// </summary>
[JsonProperty("genre")]
public string Subgenre { get; set; } = null;
/// <summary>
/// Game ratings
/// </summary>
[JsonProperty("ratings")]
public string Ratings { get; set; } = null;
/// <summary>
/// Game score
/// </summary>
[JsonProperty("score")]
public string Score { get; set; } = null;
/// <summary>
/// Is the machine enabled
/// </summary>
[JsonProperty("enabled")]
public string Enabled { get; set; } = null; // bool?
/// <summary>
/// Does the game have a CRC check
/// </summary>
[JsonProperty("hascrc")]
public bool? HasCrc { get; set; } = null;
/// <summary>
/// Machine relations
/// </summary>
[JsonProperty("relatedto")]
public string RelatedTo { get; set; } = null;
#endregion
#region SoftwareList Fields #region SoftwareList Fields
/// <summary> /// <summary>
@@ -211,7 +270,8 @@ namespace SabreTools.Library.DatItems
string fieldValue = null; string fieldValue = null;
switch (field) switch (field)
{ {
// Common #region Common
case Field.MachineName: case Field.MachineName:
fieldValue = Name; fieldValue = Name;
break; break;
@@ -246,7 +306,10 @@ namespace SabreTools.Library.DatItems
fieldValue = MachineType.ToString(); fieldValue = MachineType.ToString();
break; break;
// AttractMode #endregion
#region AttractMode
case Field.Players: case Field.Players:
fieldValue = Players; fieldValue = Players;
break; break;
@@ -269,7 +332,10 @@ namespace SabreTools.Library.DatItems
fieldValue = Buttons; fieldValue = Buttons;
break; break;
// ListXML #endregion
#region ListXML
case Field.SourceFile: case Field.SourceFile:
fieldValue = SourceFile; fieldValue = SourceFile;
break; break;
@@ -286,7 +352,10 @@ namespace SabreTools.Library.DatItems
fieldValue = string.Join(";", (Infos ?? new List<KeyValuePair<string, string>>()).Select(i => $"{i.Key}={i.Value}")); fieldValue = string.Join(";", (Infos ?? new List<KeyValuePair<string, string>>()).Select(i => $"{i.Key}={i.Value}"));
break; break;
// Logiqx #endregion
#region Logiqx
case Field.Board: case Field.Board:
fieldValue = Board; fieldValue = Board;
break; break;
@@ -294,11 +363,48 @@ namespace SabreTools.Library.DatItems
fieldValue = RebuildTo; fieldValue = RebuildTo;
break; break;
// SoftwareList #endregion
#region Logiqx EmuArc
case Field.TitleID:
fieldValue = TitleID;
break;
case Field.Developer:
fieldValue = Developer;
break;
case Field.Genre:
fieldValue = Genre;
break;
case Field.Subgenre:
fieldValue = Subgenre;
break;
case Field.Ratings:
fieldValue = Ratings;
break;
case Field.Score:
fieldValue = Score;
break;
case Field.Enabled:
fieldValue = Enabled;
break;
case Field.HasCrc:
fieldValue = HasCrc.ToString();
break;
case Field.RelatedTo:
fieldValue = RelatedTo;
break;
#endregion
#region SoftwareList
case Field.Supported: case Field.Supported:
fieldValue = Supported?.ToString(); fieldValue = Supported?.ToString();
break; break;
#endregion
default: default:
return null; return null;
} }
@@ -329,24 +435,7 @@ namespace SabreTools.Library.DatItems
public Machine(string name, string description) public Machine(string name, string description)
{ {
Name = name; Name = name;
Comment = null;
Description = description; Description = description;
Year = null;
Manufacturer = null;
Publisher = null;
Category = null;
RomOf = null;
CloneOf = null;
SampleOf = null;
Supported = true;
SourceFile = null;
Runnable = null;
Board = null;
RebuildTo = null;
Devices = null;
SlotOptions = null;
Infos = null;
MachineType = MachineType.NULL;
} }
#endregion #endregion
@@ -406,6 +495,20 @@ namespace SabreTools.Library.DatItems
#endregion #endregion
#region Logiqx EmuArc
TitleID = this.TitleID,
Developer = this.Developer,
Genre = this.Genre,
Subgenre = this.Subgenre,
Ratings = this.Ratings,
Score = this.Score,
Enabled = this.Enabled,
HasCrc = this.HasCrc,
RelatedTo = this.RelatedTo,
#endregion
#region SoftwareList #region SoftwareList
Supported = this.Supported, Supported = this.Supported,
@@ -614,6 +717,62 @@ namespace SabreTools.Library.DatItems
#endregion #endregion
#region Logiqx EmuArc
// Filter on title ID
if (filter.TitleID.MatchesPositiveSet(TitleID) == false)
return false;
if (filter.TitleID.MatchesNegativeSet(TitleID) == true)
return false;
// Filter on developer
if (filter.Developer.MatchesPositiveSet(Developer) == false)
return false;
if (filter.Developer.MatchesNegativeSet(Developer) == true)
return false;
// Filter on genre
if (filter.Genre.MatchesPositiveSet(Genre) == false)
return false;
if (filter.Genre.MatchesNegativeSet(Genre) == true)
return false;
// Filter on rebuildto
if (filter.Subgenre.MatchesPositiveSet(Subgenre) == false)
return false;
if (filter.Subgenre.MatchesNegativeSet(Subgenre) == true)
return false;
// Filter on subgenre
if (filter.Ratings.MatchesPositiveSet(Ratings) == false)
return false;
if (filter.Ratings.MatchesNegativeSet(Ratings) == true)
return false;
// Filter on score
if (filter.Score.MatchesPositiveSet(Score) == false)
return false;
if (filter.Score.MatchesNegativeSet(Score) == true)
return false;
// Filter on enabled
if (filter.Enabled.MatchesPositiveSet(Enabled) == false)
return false;
if (filter.Enabled.MatchesNegativeSet(Enabled) == true)
return false;
// Filter on has CRC flag
if (filter.HasCrc.MatchesNeutral(null, HasCrc) == false)
return false;
// Filter on related to
if (filter.RelatedTo.MatchesPositiveSet(RelatedTo) == false)
return false;
if (filter.RelatedTo.MatchesNegativeSet(RelatedTo) == true)
return false;
#endregion
#region SoftwareList #region SoftwareList
// Filter on supported // Filter on supported
@@ -722,6 +881,37 @@ namespace SabreTools.Library.DatItems
#endregion #endregion
#region Logiqx EmuArc
if (fields.Contains(Field.TitleID))
TitleID = null;
if (fields.Contains(Field.Developer))
Developer = null;
if (fields.Contains(Field.Genre))
Genre = null;
if (fields.Contains(Field.Subgenre))
Subgenre = null;
if (fields.Contains(Field.Ratings))
Ratings = null;
if (fields.Contains(Field.Score))
Score = null;
if (fields.Contains(Field.Enabled))
Enabled = null;
if (fields.Contains(Field.HasCrc))
HasCrc = null;
if (fields.Contains(Field.RelatedTo))
RelatedTo = null;
#endregion
#region SoftwareList #region SoftwareList
if (fields.Contains(Field.Supported)) if (fields.Contains(Field.Supported))
@@ -836,6 +1026,37 @@ namespace SabreTools.Library.DatItems
#endregion #endregion
#region Logiqx EmuArc
if (fields.Contains(Field.TitleID))
TitleID = machine.TitleID;
if (fields.Contains(Field.Developer))
Developer = machine.Developer;
if (fields.Contains(Field.Genre))
Genre = machine.Genre;
if (fields.Contains(Field.Subgenre))
Subgenre = machine.Subgenre;
if (fields.Contains(Field.Ratings))
Ratings = machine.Ratings;
if (fields.Contains(Field.Score))
Score = machine.Score;
if (fields.Contains(Field.Enabled))
Enabled = machine.Enabled;
if (fields.Contains(Field.HasCrc))
HasCrc = machine.HasCrc;
if (fields.Contains(Field.RelatedTo))
RelatedTo = machine.RelatedTo;
#endregion
#region SoftwareList #region SoftwareList
if (fields.Contains(Field.Supported)) if (fields.Contains(Field.Supported))

View File

@@ -156,6 +156,55 @@ namespace SabreTools.Library.Filtering
#endregion #endregion
#region Logiqx EmuArc
/// <summary>
/// Include or exclude machine title ID
/// </summary>
public FilterItem<string> TitleID { get; private set; } = new FilterItem<string>();
/// <summary>
/// Include or exclude machine developer
/// </summary>
public FilterItem<string> Developer { get; private set; } = new FilterItem<string>();
/// <summary>
/// Include or exclude machine genre
/// </summary>
public FilterItem<string> Genre { get; private set; } = new FilterItem<string>();
/// <summary>
/// Include or exclude machine subgenre
/// </summary>
public FilterItem<string> Subgenre { get; private set; } = new FilterItem<string>();
/// <summary>
/// Include or exclude machine ratings
/// </summary>
public FilterItem<string> Ratings { get; private set; } = new FilterItem<string>();
/// <summary>
/// Include or exclude machine score
/// </summary>
public FilterItem<string> Score { get; private set; } = new FilterItem<string>();
/// <summary>
/// Include or exclude machine enabled
/// </summary>
public FilterItem<string> Enabled { get; private set; } = new FilterItem<string>();
/// <summary>
/// Include or exclude items with the "crc" tag
/// </summary>
public FilterItem<bool?> HasCrc { get; private set; } = new FilterItem<bool?>() { Neutral = null };
/// <summary>
/// Include or exclude machine related to
/// </summary>
public FilterItem<string> RelatedTo { get; private set; } = new FilterItem<string>();
#endregion
#region SoftwareList #region SoftwareList
/// <summary> /// <summary>
@@ -624,6 +673,73 @@ namespace SabreTools.Library.Filtering
#endregion #endregion
#region Logiqx EmuArc
case Field.TitleID:
if (negate)
TitleID.NegativeSet.Add(value);
else
TitleID.PositiveSet.Add(value);
break;
case Field.Developer:
if (negate)
Developer.NegativeSet.Add(value);
else
Developer.PositiveSet.Add(value);
break;
case Field.Genre:
if (negate)
Genre.NegativeSet.Add(value);
else
Genre.PositiveSet.Add(value);
break;
case Field.Subgenre:
if (negate)
Subgenre.NegativeSet.Add(value);
else
Subgenre.PositiveSet.Add(value);
break;
case Field.Ratings:
if (negate)
Ratings.NegativeSet.Add(value);
else
Ratings.PositiveSet.Add(value);
break;
case Field.Score:
if (negate)
Score.NegativeSet.Add(value);
else
Score.PositiveSet.Add(value);
break;
case Field.Enabled:
if (negate)
Enabled.NegativeSet.Add(value);
else
Enabled.PositiveSet.Add(value);
break;
case Field.HasCrc:
if (negate || value.Equals("false", StringComparison.OrdinalIgnoreCase))
HasCrc.Neutral = false;
else
HasCrc.Neutral = true;
break;
case Field.RelatedTo:
if (negate)
RelatedTo.NegativeSet.Add(value);
else
RelatedTo.PositiveSet.Add(value);
break;
#endregion
#region SoftwareList #region SoftwareList
case Field.Supported: case Field.Supported:

View File

@@ -256,6 +256,43 @@ namespace SabreTools.Library.Tools
#endregion #endregion
#region Logiqx EmuArc
case "titleid":
case "title id":
case "title-id":
return Field.TitleID;
case "developer":
return Field.Developer;
case "genre":
return Field.Genre;
case "subgenre":
return Field.Subgenre;
case "ratings":
return Field.Ratings;
case "score":
return Field.Score;
case "enabled":
return Field.Enabled;
case "hascrc":
case "has crc":
case "has-crc":
return Field.HasCrc;
case "relatedto":
case "related to":
case "related-to":
return Field.RelatedTo;
#endregion
#region SoftwareList #region SoftwareList
case "supported": case "supported":