using System;
using System.Collections.Generic;
using SabreTools.Core;
using SabreTools.DatItems;
using SabreTools.DatItems.Formats;
namespace SabreTools.DatFiles.Formats
{
///
/// Represents parsing and writing of an Everdrive SMDB file
///
internal partial class EverdriveSMDB : DatFile
{
///
protected override ItemType[] GetSupportedTypes()
{
return
[
ItemType.Rom
];
}
///
protected override List? GetMissingRequiredFields(DatItem datItem)
{
var missingFields = new List();
// Check item name
if (string.IsNullOrEmpty(datItem.GetName()))
missingFields.Add(Models.Metadata.Rom.NameKey);
switch (datItem)
{
case Rom rom:
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)))
missingFields.Add(Models.Metadata.Rom.SHA256Key);
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)))
missingFields.Add(Models.Metadata.Rom.SHA1Key);
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)))
missingFields.Add(Models.Metadata.Rom.MD5Key);
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)))
missingFields.Add(Models.Metadata.Rom.CRCKey);
break;
}
return missingFields;
}
///
public override bool WriteToFile(string outfile, bool ignoreblanks = false, bool throwOnError = false)
{
try
{
logger.User($"Writing to '{outfile}'...");
//var metadataFile = CreateMetadataFile(ignoreblanks);
// Serialize the input file
var metadata = ConvertMetadata(ignoreblanks);
var metadataFile = new Serialization.CrossModel.EverdriveSMDB().Deserialize(metadata);
if (!(new Serialization.Files.EverdriveSMDB().Serialize(metadataFile, outfile)))
{
logger.Warning($"File '{outfile}' could not be written! See the log for more details.");
return false;
}
}
catch (Exception ex) when (!throwOnError)
{
logger.Error(ex);
return false;
}
logger.User($"'{outfile}' written!{Environment.NewLine}");
return true;
}
}
}