private void TagCheckNumber(string key, bool optional = false) { string value = Data.GetTagValue(key); if (value == null) { if (!optional) { IssueModel.Add(key + " tag is missing.", Severity.Warning, IssueTags.BadTag | IssueTags.StrictErr); } } else if (value.Length == 0 || !Char.IsDigit(value[0])) { IssueModel.Add(key + " tag is not a number.", Severity.Warning, IssueTags.BadTag | IssueTags.StrictErr); } }
public void ValidateRip(IList <FlacFormat> flacs, bool checkTags) { Data.IsLosslessRip = true; Severity baddest = Severity.NoIssue; PerformValidations(); if (baddest < Data.Issues.MaxSeverity) { baddest = Data.Issues.MaxSeverity; } if (baddest >= Severity.Error) { Data.RpIssue = IssueModel.Add($"{Data.Subname} to FLAC rip check failed.", baddest, IssueTags.Failure); } else if (baddest >= Severity.Warning) { Data.RpIssue = IssueModel.Add($"{Data.Subname} to FLAC rip check successful with warnings.", baddest, IssueTags.Success); } else { Data.RpIssue = IssueModel.Add($"{Data.Subname} to FLAC rip check successful!", Severity.Advisory, IssueTags.Success); } return; void PerformValidations() { if (flacs.Count != TracksModel.GetCount() || flacs.Count == 0) { Data.TkIssue = IssueModel.Add($"Folder contains {flacs.Count} .flac files, {Data.Subname} log contains {TracksModel.GetCount()} tracks."); baddest = Severity.Error; return; } int errCount = 0, warnCount = 0; string errs = string.Empty, warns = string.Empty; for (int fx = 0; fx < flacs.Count; ++fx) { FlacFormat flac = flacs[fx]; if (baddest < flac.Issues.MaxSeverity) { baddest = flac.Issues.MaxSeverity; } var level = flac.Issues.MaxLevelWhereAny(IssueTags.BadTag); if (level >= Severity.Error) { if (warnCount < 2) { errs = warnCount == 1 ? "s" + errs + ", " : errs + " "; ++errCount; } else { errs += ", "; } errs = errs + flac.GetTagValue("TRACKNUMBER"); } else if (level == Severity.Warning) { if (warnCount < 2) { warns = warnCount == 1 ? "s" + warns + ", " : warns + " "; ++warnCount; } else { warns += ", "; } warns = warns + flac.GetTagValue("TRACKNUMBER"); } } if (warns.Length > 0) { IssueModel.Add($"Tag issues on track{warns}.", Severity.Warning); } if (errs.Length > 0) { IssueModel.Add($"Tag issues on track{errs}.", Severity.Error); } baddest = flacs.Max(tk => tk.Issues.MaxSeverity); if (flacs.Count != flacs.Where(tk => tk.ActualAudioBlockCRC16 != null).Count()) { IssueModel.Add("FLAC intrinsic CRC checks not performed.", Severity.Warning, IssueTags.StrictErr); } TracksModel.MatchFlacs(flacs); if (TracksModel.Data.RipMismatchCount != 0) { Data.MhIssue = IssueModel.Add("Log CRC-32 match to FLAC PCM CRC-32 failed.", Severity.Error, IssueTags.Failure); } else { Data.MhIssue = IssueModel.Add("Log/FLAC CRC-32s match for all tracks.", Severity.Trivia); if (checkTags) { CheckFlacRipTags(flacs); } } } }