mirror of
https://github.com/SabreTools/MPF.git
synced 2026-07-02 17:24:48 +00:00
Better audio-only check (#847)
* Better IsAudio() * null deref * Don't set fields if empty * Update Changelist * Requested changes * fix build * fix build again * string literal * C# is dumb * Revert to original * revert further * remove extra comma
This commit is contained in:
@@ -51,6 +51,7 @@
|
||||
- Simplify WriteOutputData path handling
|
||||
- Serialize JSON a slightly different way
|
||||
- Add newlines to pkg info printing
|
||||
- Better audio-only check
|
||||
|
||||
### 3.3.0 (2025-01-03)
|
||||
|
||||
|
||||
@@ -640,6 +640,36 @@ namespace MPF.Processors
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if a Cuesheet consists of only Audio tracks, false otherwise
|
||||
/// </summary>
|
||||
internal static bool IsAudio(string? cue)
|
||||
{
|
||||
// Ignore invalid inputs
|
||||
if (string.IsNullOrEmpty(cue))
|
||||
return false;
|
||||
|
||||
bool tracksExist = false;
|
||||
foreach (string cueLine in cue!.Split(new[] { "\r\n", "\n", "\r" }, StringSplitOptions.None))
|
||||
{
|
||||
string line = cueLine.Trim();
|
||||
if (line.Length == 0)
|
||||
continue;
|
||||
|
||||
string[] tokens = line.Split(new[] { " ", "\t" }, StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
if (tokens.Length < 3 || !tokens[0].Equals("TRACK", StringComparison.OrdinalIgnoreCase))
|
||||
continue;
|
||||
|
||||
tracksExist = true;
|
||||
string trackType = tokens[2].ToUpperInvariant();
|
||||
if (trackType != "AUDIO" && trackType != "CDG")
|
||||
return false;
|
||||
}
|
||||
|
||||
return tracksExist;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,24 +71,22 @@ namespace MPF.Processors
|
||||
}
|
||||
|
||||
// Attempt to get multisession data
|
||||
string cdMultiSessionInfo = GetMultisessionInformation($"{basePath}.log") ?? string.Empty;
|
||||
string? cdMultiSessionInfo = GetMultisessionInformation($"{basePath}.log");
|
||||
if (!string.IsNullOrEmpty(cdMultiSessionInfo))
|
||||
info.CommonDiscInfo.CommentsSpecialFields![SiteCode.Multisession] = cdMultiSessionInfo;
|
||||
info.CommonDiscInfo.CommentsSpecialFields![SiteCode.Multisession] = cdMultiSessionInfo!;
|
||||
|
||||
// Attempt to get the universal hash, if it's an audio disc
|
||||
if (System.IsAudio())
|
||||
// Attempt to get extra metadata if it's an audio disc
|
||||
if (IsAudio(info.TracksAndWriteOffsets.Cuesheet))
|
||||
{
|
||||
string universalHash = GetUniversalHash($"{basePath}.log") ?? string.Empty;
|
||||
info.CommonDiscInfo.CommentsSpecialFields![SiteCode.UniversalHash] = universalHash;
|
||||
}
|
||||
|
||||
// Attempt to get the non-zero data start, if it's an audio disc
|
||||
if (System.IsAudio())
|
||||
{
|
||||
string ringNonZeroDataStart = GetRingNonZeroDataStart($"{basePath}.log") ?? string.Empty;
|
||||
info.CommonDiscInfo.CommentsSpecialFields![SiteCode.RingNonZeroDataStart] = ringNonZeroDataStart;
|
||||
string ringPerfectAudioOffset = GetRingPerfectAudioOffset($"{basePath}.log") ?? string.Empty;
|
||||
info.CommonDiscInfo.CommentsSpecialFields![SiteCode.RingPerfectAudioOffset] = ringPerfectAudioOffset;
|
||||
string? universalHash = GetUniversalHash($"{basePath}.log");
|
||||
if (!string.IsNullOrEmpty(universalHash))
|
||||
info.CommonDiscInfo.CommentsSpecialFields![SiteCode.UniversalHash] = universalHash!;
|
||||
string? ringNonZeroDataStart = GetRingNonZeroDataStart($"{basePath}.log");
|
||||
if (!string.IsNullOrEmpty(ringNonZeroDataStart))
|
||||
info.CommonDiscInfo.CommentsSpecialFields![SiteCode.RingNonZeroDataStart] = ringNonZeroDataStart!;
|
||||
string? ringPerfectAudioOffset = GetRingPerfectAudioOffset($"{basePath}.log");
|
||||
if (!string.IsNullOrEmpty(ringPerfectAudioOffset))
|
||||
info.CommonDiscInfo.CommentsSpecialFields![SiteCode.RingPerfectAudioOffset] = ringPerfectAudioOffset!;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user