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); }
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); }
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); }
public FormatBase GetFormatBase() { if (Data.Index < 0) { return(null); } FormatBase.Model fmtModel = Data.items[Data.Index]; return(fmtModel.Data); }
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); }
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); }
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(); }
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); }