コード例 #1
0
ファイル: TabInfo.cs プロジェクト: kaosborn/Filebert
 public void Add(FormatBase.Model fmtModel)
 {
     if (Data.MaxSeverity < fmtModel.Data.Issues.MaxSeverity)
     {
         Data.MaxSeverity = fmtModel.Data.Issues.MaxSeverity;
     }
     if (fmtModel.Data.Issues.MaxSeverity >= Severity.Error)
     {
         if (Data.ErrorCount == 0)
         {
             Data.firstError = Data.items.Count;
         }
         Data.lastError = Data.items.Count;
         ++Data.ErrorCount;
     }
     if (fmtModel.Data.IsRepairable)
     {
         if (Data.RepairableCount == 0)
         {
             Data.firstRepairable = Data.items.Count;
         }
         Data.lastRepairable = Data.items.Count;
         ++Data.RepairableCount;
     }
     Data.items.Add(fmtModel);
 }
コード例 #2
0
        public void UnitIco_Misnamed()
        {
            var fName1 = @"Targets\Singles\DutchIco.jpeg";

            var dummy = new KaosDiags.Diags.Model(null);

            FormatBase fmt;

            using (Stream s1 = new FileStream(fName1, FileMode.Open))
            {
                FormatBase.Model fmtModel = FormatBase.Model.Create(s1, fName1, 0, 0, null, out FileFormat actual);
                fmt = fmtModel.Data;

                Assert.IsInstanceOfType(fmtModel, typeof(IcoFormat.Model));
                Assert.AreEqual("ico", actual.PrimaryName);

                Assert.IsTrue(fmt.Issues.MaxSeverity == Severity.Warning);
                Assert.AreEqual(1, fmt.Issues.Items.Count);
                Assert.AreEqual(1, fmt.Issues.RepairableCount);

                string err = fmtModel.IssueModel.Repair(index: 0);
                Assert.IsNull(err);
            }

            Assert.IsTrue(fmt.Issues.MaxSeverity == Severity.Warning);
            Assert.AreEqual(1, fmt.Issues.Items.Count);
            Assert.AreEqual(0, fmt.Issues.RepairableCount);
        }
コード例 #3
0
            private FormatBase.Model CheckFile(Stream stream, string path, Hashes hashFlags, out FileFormat trueFormat, out Severity resultCode)
            {
                FormatBase.Model fmtModel = null;
                try
                {
                    fmtModel = FormatBase.Model.Create(stream, path, hashFlags, Data.ValidationFlags, Data.Filter, out trueFormat);
                }
#pragma warning disable 0168
                catch (Exception ex)
#pragma warning restore 0168
                {
#if DEBUG
                    throw;
#else
                    Data.OnMessageSend("Exception: " + ex.Message.TrimEnd(null), Severity.Fatal);
                    ++Data.TotalErrors;
                    trueFormat = null;
                    resultCode = Severity.Fatal;
                    return(null);
#endif
                }

                if (fmtModel == null)
                {
                    if (Data.Scope <= Granularity.Verbose)
                    {
                        if (Data.Scope == Granularity.Verbose && Data.IsDigestForm)
                        {
                            Data.OnMessageSend("; " + Data.CurrentFile, Severity.NoIssue);
                        }
                        Data.OnMessageSend("Unknown extension ignored.", Severity.Trivia);
                    }
                    stream.Dispose();
                    resultCode = Severity.NoIssue;
                    return(null);
                }

                FormatBase fmt = fmtModel.Data;

                ++Data.TotalFiles;
                if (trueFormat != null)
                {
                    ++trueFormat.TrueTotal;
                    if (fmt.IsBadHeader)
                    {
                        ++trueFormat.TotalHeaderErrors;
                    }
                    if (fmt.IsBadData)
                    {
                        ++trueFormat.TotalDataErrors;
                    }
                }

                fmtModel.IssueModel.Escalate(Data.WarnEscalator, Data.ErrEscalator);
                ReportFormat(fmt);
                resultCode = fmt.Issues.MaxSeverity;
                return(fmtModel);
            }
コード例 #4
0
ファイル: TabInfo.cs プロジェクト: kaosborn/Filebert
            public FormatBase GetFormatBase()
            {
                if (Data.Index < 0)
                {
                    return(null);
                }

                FormatBase.Model fmtModel = Data.items[Data.Index];
                return(fmtModel.Data);
            }
コード例 #5
0
            private bool RepairFile(FormatBase.Model formatModel)
            {
                bool result = false;

                if (Data.Response == Interaction.PromptToRepair)
                {
                    for (int ix = 0; ix < formatModel.Data.Issues.Items.Count; ++ix)
                    {
                        Issue issue = formatModel.Data.Issues.Items[ix];
                        if (issue.IsRepairable)
                        {
                            for (;;)
                            {
                                Data.OnMessageSend(String.Empty, Severity.NoIssue);
                                bool?isYes = Data.QuestionAsk(issue.RepairPrompt + "? ");
                                if (isYes != true)
                                {
                                    break;
                                }

                                string errorMessage = formatModel.IssueModel.Repair(ix);
                                if (errorMessage == null)
                                {
                                    Data.OnMessageSend("Repair successful!", Severity.Advisory);
                                    if (formatModel.IssueModel.RepairerEquals(ix, formatModel.RepairWrongExtension))
                                    {
                                        result = true;
                                    }
                                    break;
                                }

                                Data.OnMessageSend("Repair attempt failed: " + errorMessage, Severity.Warning);
                            }
                        }
                        if (issue.IsFinalRepairer)
                        {
                            break;
                        }
                    }

                    Data.OnMessageSend(String.Empty, Severity.NoIssue);
                    formatModel.CloseFile();
                }

                return(result);
            }
コード例 #6
0
ファイル: TabInfo.cs プロジェクト: kaosborn/Filebert
 public bool Repair(int issueIndex)
 {
     if (Data.Index >= 0)
     {
         FormatBase.Model fmtModel = Data.items[Data.Index];
         string           err      = fmtModel.IssueModel.Repair(issueIndex);
         if (err == null)
         {
             if (fmtModel.IssueModel.Data.RepairableCount == 0)
             {
                 --Data.RepairableCount;
                 if (Data.RepairableCount == 0)
                 {
                     Data.firstRepairable = 0; Data.lastRepairable = -1;
                 }
                 else
                 if (issueIndex == Data.firstRepairable)
                 {
                     for (int ix = issueIndex + 1; ; ++ix)
                     {
                         if (Data.items[ix].Data.IsRepairable)
                         {
                             Data.firstRepairable = ix; break;
                         }
                     }
                 }
                 else if (issueIndex == Data.lastRepairable)
                 {
                     for (int ix = issueIndex - 1; ; --ix)
                     {
                         if (Data.items[ix].Data.IsRepairable)
                         {
                             Data.lastRepairable = ix; break;
                         }
                     }
                 }
             }
             return(true);
         }
     }
     return(false);
 }
コード例 #7
0
            private void TryRepairs(FormatBase.Model fmtModel, FileFormat trueFormat)
            {
                if (!fmtModel.IssueModel.Data.HasError)
                {
                    int startRepairableCount = fmtModel.IssueModel.Data.RepairableCount;
                    if (startRepairableCount != 0)
                    {
                        if (Data.Response == Interaction.PromptToRepair)
                        {
                            ++Data.TotalRepairable;
                            bool didRename = RepairFile(fmtModel);
                            if (didRename)
                            {
                                System.Diagnostics.Debug.Assert(trueFormat != null);
                                if (trueFormat != null)
                                {
                                    --trueFormat.TotalMisnamed;
                                }
                            }

                            if (fmtModel.IssueModel.Data.RepairableCount == 0)
                            {
                                --Data.TotalRepairable;
                            }
                            Data.TotalRepairs += startRepairableCount - fmtModel.IssueModel.Data.RepairableCount;
                        }
                        else if (Data.Response == Interaction.RepairLater)
                        {
                            // Keep file open.
                            return;
                        }
                    }
                }

                fmtModel.CloseFile();
            }
コード例 #8
0
            private FormatBase.Model CheckFile(Stream stream, string path, out Severity resultCode)
            {
                SetCurrentFile(Path.GetDirectoryName(path), Path.GetFileName(path));

                bool       isKnownExtension;
                FileFormat trueFormat;

                FormatBase.Model fmtModel = null;
                try
                {
                    fmtModel = FormatBase.CreateModel(Data.FileFormats.Items, stream, path, Data.HashFlags, Data.ValidationFlags,
                                                      Data.Filter, out isKnownExtension, out trueFormat);
                }
#pragma warning disable 0168
                catch (Exception ex)
#pragma warning restore 0168
                {
#if DEBUG
                    throw;
#else
                    Data.OnMessageSend("Exception: " + ex.Message.TrimEnd(null), Severity.Fatal);
                    ++Data.TotalErrors;
                    resultCode = Severity.Fatal;
                    return(null);
#endif
                }

                if (!isKnownExtension)
                {
                    if (Data.Scope <= Granularity.Verbose)
                    {
                        Data.OnMessageSend("Ignored.", Severity.Trivia);
                    }
                    resultCode = Severity.NoIssue;
                    return(fmtModel);
                }

                if (fmtModel == null)
                {
                    if (trueFormat != null)
                    {
                        resultCode = Severity.NoIssue;
                    }
                    else
                    {
                        if (Data.Scope <= Granularity.Quiet)
                        {
                            Data.OnMessageSend("Unrecognized contents.", Severity.Error);
                        }
                        ++Data.TotalErrors;
                        resultCode = Severity.Fatal;
                    }
                    return(null);
                }

                ++Data.TotalFiles;
                trueFormat.TrueTotal += 1;

                FormatBase fmt = fmtModel.Data;

                if (fmt.IsBadHeader)
                {
                    ++trueFormat.TotalHeaderErrors;
                }

                if (fmt.IsBadData)
                {
                    ++trueFormat.TotalDataErrors;
                }

                fmtModel.IssueModel.Escalate(Data.WarnEscalator, Data.ErrEscalator);

                ReportFormat(fmt);

                if (!fmt.Issues.HasError)
                {
                    int startRepairableCount = fmt.Issues.RepairableCount;
                    if (startRepairableCount > 0)
                    {
                        ++Data.TotalRepairable;
                        var didRename = RepairFile(fmtModel);
                        if (didRename)
                        {
                            --trueFormat.TotalMisnamed;
                        }
                        if (fmt.Issues.RepairableCount == 0)
                        {
                            --Data.TotalRepairable;
                        }
                        Data.TotalRepairs += startRepairableCount - fmt.Issues.RepairableCount;
                    }
                }

                resultCode = fmt.Issues.MaxSeverity;
                return(fmtModel);
            }