mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-21 09:58:13 +00:00
FIX: Delete folder from trash
This commit is contained in:
parent
1e183face9
commit
ec782edbeb
3 changed files with 76 additions and 11 deletions
58
src/filesources/gio/trash/utrashdeleteoperation.pas
Normal file
58
src/filesources/gio/trash/utrashdeleteoperation.pas
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
unit uTrashDeleteOperation;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils,
|
||||
uGioDeleteOperation,
|
||||
uFileSource,
|
||||
uFile;
|
||||
|
||||
type
|
||||
|
||||
{ TTrashDeleteOperation }
|
||||
|
||||
TTrashDeleteOperation = class(TGioDeleteOperation)
|
||||
public
|
||||
procedure Initialize; override;
|
||||
procedure Finalize; override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
procedure TTrashDeleteOperation.Initialize;
|
||||
var
|
||||
I: Integer;
|
||||
aFile: TFile;
|
||||
begin
|
||||
// Get initialized statistics; then we change only what is needed.
|
||||
FStatistics := RetrieveStatistics;
|
||||
|
||||
FFullFilesTreeToDelete:= FilesToDelete;
|
||||
|
||||
for I := 0 to FFullFilesTreeToDelete.Count - 1 do
|
||||
begin
|
||||
aFile := FFullFilesTreeToDelete[I];
|
||||
|
||||
with FStatistics do
|
||||
begin
|
||||
if aFile.IsDirectory and (not aFile.IsLinkToDirectory) then
|
||||
Inc(TotalFiles)
|
||||
else begin
|
||||
Inc(TotalFiles);
|
||||
Inc(TotalBytes, aFile.Size);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTrashDeleteOperation.Finalize;
|
||||
begin
|
||||
FFullFilesTreeToDelete:= nil;
|
||||
inherited Finalize;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
|
@ -5,8 +5,8 @@ unit uTrashFileSource;
|
|||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Menus, uGLib2, uGio2, uFile, uGioFileSource,
|
||||
uFileSourceProperty, uFileSource, uFileProperty, uFileSourceOperationTypes;
|
||||
Classes, SysUtils, Menus, uGLib2, uGio2, uFile, uFileSource, uGioFileSource,
|
||||
uFileSourceProperty, uFileProperty, uFileSourceOperationTypes, uFileSourceOperation;
|
||||
|
||||
type
|
||||
|
||||
|
|
@ -33,12 +33,15 @@ type
|
|||
function GetDefaultView(out DefaultView: TFileSourceFields): Boolean; override;
|
||||
function QueryContextMenu(AFiles: TFiles; var AMenu: TPopupMenu): Boolean; override;
|
||||
procedure RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes; AVariantProperties: array of String); override;
|
||||
|
||||
function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
UITypes, Dialogs, DCStrUtils, uGObject2, uLng, uGio, uFileProcs, uGioFileSourceUtil;
|
||||
UITypes, Dialogs, DCStrUtils, uGObject2, uLng, uGio, uFileProcs,
|
||||
uGioFileSourceUtil, uTrashDeleteOperation;
|
||||
|
||||
const
|
||||
G_FILE_ATTRIBUTE_TRASH_ORIG_PATH = 'trash::orig-path';
|
||||
|
|
@ -210,5 +213,14 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
function TTrashFileSource.CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation;
|
||||
var
|
||||
TargetFileSource: IFileSource;
|
||||
begin
|
||||
TargetFileSource := Self;
|
||||
FilesToDelete.Path:= FCurrentAddress + FilesToDelete.Path;
|
||||
Result := TTrashDeleteOperation.Create(TargetFileSource, FilesToDelete);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ type
|
|||
|
||||
TGioDeleteOperation = class(TFileSourceDeleteOperation)
|
||||
|
||||
private
|
||||
protected
|
||||
FWfxPluginFileSource: IGioFileSource;
|
||||
FFullFilesTreeToDelete: TFiles; // source files including all files/dirs in subdirectories
|
||||
FStatistics: TFileSourceDeleteOperationStatistics; // local copy of statistics
|
||||
|
|
@ -41,13 +41,12 @@ type
|
|||
|
||||
procedure Initialize; override;
|
||||
procedure MainExecute; override;
|
||||
procedure Finalize; override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
DCOSUtils, uLng, uGlib2, uGio2, uGObject2, uGio, uGioFileSourceUtil;
|
||||
DCOSUtils, uLng, uGio2, uGObject2, uGio, uGioFileSourceUtil;
|
||||
|
||||
constructor TGioDeleteOperation.Create(aTargetFileSource: IFileSource;
|
||||
var theFilesToDelete: TFiles);
|
||||
|
|
@ -64,6 +63,7 @@ end;
|
|||
destructor TGioDeleteOperation.Destroy;
|
||||
begin
|
||||
inherited Destroy;
|
||||
FFullFilesTreeToDelete.Free;
|
||||
end;
|
||||
|
||||
procedure TGioDeleteOperation.Initialize;
|
||||
|
|
@ -103,11 +103,6 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure TGioDeleteOperation.Finalize;
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
function TGioDeleteOperation.ProcessFile(aFile: TFile): Boolean;
|
||||
var
|
||||
AGFile: PGFile;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue