Exemplo n.º 1
0
            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);
                }
            }
Exemplo n.º 2
0
            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);
                        }
                    }
                }
            }