mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-21 09:58:13 +00:00
UPD: Optimize verify checksum operation
This commit is contained in:
parent
44f38d82ac
commit
24c8539069
3 changed files with 66 additions and 24 deletions
|
|
@ -43,7 +43,7 @@ type
|
|||
var Special: boolean; var FG, BG: TColor);
|
||||
private
|
||||
procedure AddHeader(const aText: String; aCount: Integer; aColor: TColor);
|
||||
procedure ProcessResult(const aResult: TDynamicStringArray;
|
||||
procedure ProcessResult(const aResult: TStringList;
|
||||
const aText: String; aColor: TColor);
|
||||
protected
|
||||
procedure CMThemeChanged(var Message: TLMessage); message CM_THEMECHANGED;
|
||||
|
|
@ -69,15 +69,15 @@ begin
|
|||
seCheckSumVerify.Lines.BeginUpdate;
|
||||
try
|
||||
seCheckSumVerify.Lines.AddObject(rsCheckSumVerifyGeneral, TObject(PtrInt(clWindowText)));
|
||||
aTotalCount:= Length(VerifyResult.Success) + Length(VerifyResult.ReadError) +
|
||||
Length(VerifyResult.Broken) + Length(VerifyResult.Missing);
|
||||
aTotalCount:= VerifyResult.Success.Count + VerifyResult.ReadError.Count +
|
||||
VerifyResult.Broken.Count + VerifyResult.Missing.Count;
|
||||
|
||||
// Add header information
|
||||
AddHeader(rsCheckSumVerifyTotal, aTotalCount, clWindowText);
|
||||
AddHeader(rsCheckSumVerifySuccess, Length(VerifyResult.Success), Ord(lmtSuccess));
|
||||
AddHeader(rsCheckSumVerifyMissing, Length(VerifyResult.Missing), Ord(lmtError));
|
||||
AddHeader(rsCheckSumVerifyBroken, Length(VerifyResult.Broken), Ord(lmtError));
|
||||
AddHeader(rsCheckSumVerifyReadError, Length(VerifyResult.ReadError), Ord(lmtError));
|
||||
AddHeader(rsCheckSumVerifySuccess, VerifyResult.Success.Count, Ord(lmtSuccess));
|
||||
AddHeader(rsCheckSumVerifyMissing, VerifyResult.Missing.Count, Ord(lmtError));
|
||||
AddHeader(rsCheckSumVerifyBroken, VerifyResult.Broken.Count, Ord(lmtError));
|
||||
AddHeader(rsCheckSumVerifyReadError, VerifyResult.ReadError.Count, Ord(lmtError));
|
||||
|
||||
// Add broken files
|
||||
ProcessResult(VerifyResult.Broken, rsCheckSumVerifyBroken, Ord(lmtError));
|
||||
|
|
@ -135,16 +135,16 @@ begin
|
|||
seCheckSumVerify.Lines.AddObject(#32 + aText + #32 + IntToStr(aCount), TObject(PtrInt(aColor)));
|
||||
end;
|
||||
|
||||
procedure TfrmCheckSumVerify.ProcessResult(const aResult: TDynamicStringArray;
|
||||
procedure TfrmCheckSumVerify.ProcessResult(const aResult: TStringList;
|
||||
const aText: String; aColor: TColor);
|
||||
var
|
||||
I: Integer;
|
||||
begin
|
||||
if Length(aResult) > 0 then
|
||||
if aResult.Count > 0 then
|
||||
begin
|
||||
seCheckSumVerify.Lines.Add(EmptyStr);
|
||||
seCheckSumVerify.Lines.AddObject(aText, TObject(PtrInt(aColor)));
|
||||
for I:= Low(aResult) to High(aResult) do
|
||||
for I:= 0 to aResult.Count - 1 do
|
||||
begin
|
||||
seCheckSumVerify.Lines.AddObject(#32 + aResult[I], TObject(PtrInt(aColor)));
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -272,7 +272,7 @@ begin
|
|||
except
|
||||
on EFileNotFound do
|
||||
begin
|
||||
AddString(FResult.Missing, FileName);
|
||||
FResult.Missing.Add(FileName);
|
||||
end
|
||||
else
|
||||
begin
|
||||
|
|
@ -484,13 +484,13 @@ begin
|
|||
sFileName:= ExtractDirLevel(FFullFilesTree.Path, aFile.Path) + aFile.Name;
|
||||
|
||||
if (CheckSumCalc(aFile, sCheckSum) = False) then
|
||||
AddString(FResult.ReadError, sFileName)
|
||||
FResult.ReadError.Add(sFileName)
|
||||
else
|
||||
begin
|
||||
if (CompareText(sCheckSum, ExpectedChecksum) = 0) then
|
||||
AddString(FResult.Success, sFileName)
|
||||
FResult.Success.Add(sFileName)
|
||||
else
|
||||
AddString(FResult.Broken, sFileName);
|
||||
FResult.Broken.Add(sFileName);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
|
|||
|
|
@ -17,11 +17,17 @@ type
|
|||
|
||||
TCalcCheckSumOperationMode = (checksum_calc, checksum_verify);
|
||||
|
||||
TVerifyChecksumResult = record
|
||||
Success: TDynamicStringArray;
|
||||
Broken: TDynamicStringArray;
|
||||
Missing: TDynamicStringArray;
|
||||
ReadError: TDynamicStringArray;
|
||||
{ TVerifyChecksumResult }
|
||||
|
||||
TVerifyChecksumResult = class
|
||||
public
|
||||
Broken: TStringList;
|
||||
Success: TStringList;
|
||||
Missing: TStringList;
|
||||
ReadError: TStringList;
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
end;
|
||||
|
||||
TFileSourceCalcChecksumOperationStatistics = record
|
||||
|
|
@ -56,6 +62,7 @@ type
|
|||
FAlgorithm: THashAlgorithm;
|
||||
FOneFile, FSeparateFolder: Boolean;
|
||||
FOpenFileAfterOperationCompleted: Boolean;
|
||||
procedure SetMode(AValue: TCalcCheckSumOperationMode);
|
||||
|
||||
protected
|
||||
FResult: TVerifyChecksumResult;
|
||||
|
|
@ -83,7 +90,7 @@ type
|
|||
function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override;
|
||||
function RetrieveStatistics: TFileSourceCalcChecksumOperationStatistics;
|
||||
|
||||
property Mode: TCalcCheckSumOperationMode read FMode write FMode;
|
||||
property Mode: TCalcCheckSumOperationMode read FMode write SetMode;
|
||||
property Algorithm: THashAlgorithm read FAlgorithm write FAlgorithm;
|
||||
property OneFile: Boolean read FOneFile write FOneFile;
|
||||
property SeparateFolder: Boolean read FSeparateFolder write FSeparateFolder;
|
||||
|
|
@ -97,6 +104,27 @@ implementation
|
|||
uses
|
||||
uDCUtils, uLng, uShowForm;
|
||||
|
||||
{ TVerifyChecksumResult }
|
||||
|
||||
constructor TVerifyChecksumResult.Create;
|
||||
begin
|
||||
Broken:= TStringList.Create;
|
||||
Success:= TStringList.Create;
|
||||
Missing:= TStringList.Create;
|
||||
ReadError:= TStringList.Create;
|
||||
end;
|
||||
|
||||
destructor TVerifyChecksumResult.Destroy;
|
||||
begin
|
||||
inherited Destroy;
|
||||
Broken.Free;
|
||||
Success.Free;
|
||||
Missing.Free;
|
||||
ReadError.Free;
|
||||
end;
|
||||
|
||||
{ TFileSourceCalcChecksumOperation }
|
||||
|
||||
constructor TFileSourceCalcChecksumOperation.Create(
|
||||
aTargetFileSource: IFileSource;
|
||||
var theFiles: TFiles;
|
||||
|
|
@ -135,10 +163,9 @@ destructor TFileSourceCalcChecksumOperation.Destroy;
|
|||
begin
|
||||
inherited Destroy;
|
||||
|
||||
if Assigned(FStatisticsLock) then
|
||||
FreeAndNil(FStatisticsLock);
|
||||
if Assigned(FFiles) then
|
||||
FreeAndNil(FFiles);
|
||||
FreeAndNil(FStatisticsLock);
|
||||
FreeAndNil(FResult);
|
||||
FreeAndNil(FFiles);
|
||||
end;
|
||||
|
||||
function TFileSourceCalcChecksumOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String;
|
||||
|
|
@ -173,6 +200,21 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure TFileSourceCalcChecksumOperation.SetMode(
|
||||
AValue: TCalcCheckSumOperationMode);
|
||||
begin
|
||||
if FMode <> AValue then
|
||||
begin
|
||||
if (AValue = checksum_calc) then
|
||||
FreeAndNil(FResult)
|
||||
else if (AValue = checksum_verify) then
|
||||
begin
|
||||
FResult:= TVerifyChecksumResult.Create;
|
||||
end;
|
||||
FMode:= AValue;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TFileSourceCalcChecksumOperation.GetID: TFileSourceOperationType;
|
||||
begin
|
||||
Result := fsoCalcChecksum;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue