Files

114 lines
3.9 KiB
C#
Raw Permalink Normal View History

2023-09-09 01:26:45 -04:00
using System;
2024-11-12 15:30:33 -05:00
using System.Collections.Generic;
2025-09-26 13:06:18 -04:00
using SabreTools.Data.Models.RomCenter;
2023-09-09 01:26:45 -04:00
namespace SabreTools.Serialization.CrossModel
{
public partial class RomCenter : BaseMetadataSerializer<MetadataFile>
2023-09-09 01:26:45 -04:00
{
/// <inheritdoc/>
public override MetadataFile? Deserialize(Data.Models.Metadata.MetadataFile? obj)
2023-09-09 01:26:45 -04:00
{
2026-01-25 14:30:18 -05:00
if (obj is null)
2023-09-09 01:26:45 -04:00
return null;
var header = obj.Header;
2026-01-25 14:32:49 -05:00
var metadataFile = header is not null ? ConvertHeaderFromInternalModel(header) : new MetadataFile();
2023-09-09 01:26:45 -04:00
var machines = obj.Machine;
2024-11-12 15:30:33 -05:00
var items = new List<Rom>();
foreach (var machine in machines ?? [])
2023-09-09 01:26:45 -04:00
{
2024-11-12 15:30:33 -05:00
items.AddRange(ConvertMachineFromInternalModel(machine));
2023-09-09 01:26:45 -04:00
}
2024-11-12 15:30:33 -05:00
metadataFile.Games = new Games { Rom = [.. items] };
2023-09-09 01:26:45 -04:00
return metadataFile;
}
/// <summary>
2025-09-26 12:27:10 -04:00
/// Convert from <see cref="Models.Metadata.Header"/> to <see cref="MetadataFile"/>
2023-09-09 01:26:45 -04:00
/// </summary>
2025-09-26 13:06:18 -04:00
private static MetadataFile ConvertHeaderFromInternalModel(Data.Models.Metadata.Header item)
2023-09-09 01:26:45 -04:00
{
var metadataFile = new MetadataFile();
if (item.Author != null
|| item.Version != null
|| item.Email != null
|| item.Homepage != null
|| item.Url != null
|| item.Date != null
|| item.Comment != null)
2023-09-09 01:26:45 -04:00
{
metadataFile.Credits = new Credits
{
Author = item.Author,
Version = item.Version,
Email = item.Email,
Homepage = item.Homepage,
Url = item.Url,
Date = item.Date,
Comment = item.Comment,
2023-09-09 01:26:45 -04:00
};
}
if (item.DatVersion != null
|| item.Plugin != null
2026-04-02 02:18:08 -04:00
|| item.ForceMerging != Data.Models.Metadata.MergingFlag.None)
2023-09-09 01:26:45 -04:00
{
metadataFile.Dat = new Dat
{
Version = item.DatVersion,
Plugin = item.Plugin,
2026-04-02 02:18:08 -04:00
Split = item.ForceMerging == Data.Models.Metadata.MergingFlag.Split ? "yes" : "no",
Merge = item.ForceMerging == Data.Models.Metadata.MergingFlag.Merged ? "yes" : "no",
2023-09-09 01:26:45 -04:00
};
}
2026-04-04 23:13:36 -04:00
if (item.RefName != null || item.EmulatorVersion != null)
2023-09-09 01:26:45 -04:00
{
metadataFile.Emulator = new Emulator
{
RefName = item.RefName,
Version = item.EmulatorVersion,
2023-09-09 01:26:45 -04:00
};
}
return metadataFile;
}
/// <summary>
2025-09-26 12:27:10 -04:00
/// Convert from <see cref="Models.Metadata.Machine"/> to an array of <see cref="Rom"/>
2023-09-09 01:26:45 -04:00
/// </summary>
2025-09-26 13:06:18 -04:00
private static Rom[] ConvertMachineFromInternalModel(Data.Models.Metadata.Machine item)
2023-09-09 01:26:45 -04:00
{
var roms = item.Rom;
2026-01-25 14:30:18 -05:00
if (roms is null)
2023-11-14 14:50:47 -05:00
return [];
2023-09-09 01:26:45 -04:00
2024-11-12 14:10:00 -05:00
return Array.ConvertAll(roms, r => ConvertFromInternalModel(r, item));
2023-09-09 01:26:45 -04:00
}
/// <summary>
2025-09-26 12:27:10 -04:00
/// Convert from <see cref="Models.Metadata.Rom"/> to <see cref="Rom"/>
2023-09-09 01:26:45 -04:00
/// </summary>
2025-09-26 13:06:18 -04:00
private static Rom ConvertFromInternalModel(Data.Models.Metadata.Rom item, Data.Models.Metadata.Machine parent)
2023-09-09 01:26:45 -04:00
{
var row = new Rom
{
2026-04-03 22:17:31 -04:00
ParentName = parent.CloneOf,
2025-09-26 13:06:18 -04:00
//ParentDescription = parent.ReadString(Data.Models.Metadata.Machine.ParentDescriptionKey), // This is unmappable
2026-04-01 13:18:45 -04:00
GameName = parent.Name,
2026-04-02 11:18:49 -04:00
GameDescription = parent.Description,
2026-04-01 13:18:45 -04:00
RomName = item.Name,
RomCRC = item.CRC32,
2026-04-02 23:45:17 -04:00
RomSize = item.Size,
2026-04-03 22:17:31 -04:00
RomOf = parent.RomOf,
2026-04-04 22:31:23 -04:00
MergeName = item.Merge,
2023-09-09 01:26:45 -04:00
};
return row;
}
}
}