namespace FileFlows.AudioNodes.Helpers;
///
/// Provides methods for working with audio metadata.
///
public class MetadataHelper
{
///
/// Gets an array of metadata parameters based on the provided AudioTags.
///
/// The audio metadata.
/// An array of metadata parameters.
public static string[] GetMetadataParameters(AudioInfo audioInfo)
{
if (audioInfo == null)
return new string[] { };
var parameters = new List();
AddMetadataParameter(parameters, "TITLE", audioInfo.Title);
AddMetadataParameter(parameters, "ARTIST", audioInfo.Artist);
AddMetadataParameter(parameters, "ALBUM", audioInfo.Album);
AddMetadataParameter(parameters, "GENRE", string.Join(";", audioInfo?.Genres ?? new string[] { }));
if (audioInfo.Date.Year > 1900)
{
if (audioInfo.Date.Month == 1 && audioInfo.Date.Day == 1)
AddMetadataParameter(parameters, "DATE", audioInfo.Date.Year.ToString());
else
AddMetadataParameter(parameters, "DATE", audioInfo.Date.ToString("yyyy-M-d"));
}
if (audioInfo.Track > 0 && audioInfo.TotalTracks > 0)
AddMetadataParameter(parameters, "TRACK", audioInfo.Track + "/" + audioInfo.TotalTracks);
else if(audioInfo.Track > 0)
AddMetadataParameter(parameters, "TRACK", audioInfo.Track.ToString());
if(audioInfo.Disc > 0)
AddMetadataParameter(parameters, "DISC", audioInfo.Disc.ToString());
if(audioInfo.TotalDiscs > 0)
AddMetadataParameter(parameters, "TOTALDISCS", audioInfo.TotalDiscs.ToString());
AddMetadataParameter(parameters, "comment", "Created by FileFlows\nhttps://fileflows.com");
return parameters.ToArray();
}
///
/// Adds a metadata parameter to the list if the value is valid.
///
/// The list of parameters.
/// The metadata key.
/// The metadata value.
private static void AddMetadataParameter(List parameters, string key, string value)
{
if (string.IsNullOrWhiteSpace(value) == false && value != "0")
{
parameters.AddRange(new[] { "-metadata", $"{key}={EscapeForShell(value)}" });
}
}
///
/// Escapes a string for use in a command-line shell.
///
/// The input string to escape.
/// The escaped string.
private static string EscapeForShell(string input)
{
return input.Replace("\"", "\\\"");
}
}