mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-21 09:58:13 +00:00
FIX: GVFS - Overwrite only older files (fixes #2201)
This commit is contained in:
parent
86ccf0da86
commit
fd6d5a8085
2 changed files with 24 additions and 7 deletions
|
|
@ -60,9 +60,10 @@ begin
|
|||
|
||||
// Load default options.
|
||||
case gOperationOptionFileExists of
|
||||
fsoofeNone : cmbFileExists.ItemIndex := 0;
|
||||
fsoofeOverwrite: cmbFileExists.ItemIndex := 1;
|
||||
fsoofeSkip : cmbFileExists.ItemIndex := 2;
|
||||
fsoofeNone : cmbFileExists.ItemIndex := 0;
|
||||
fsoofeOverwrite : cmbFileExists.ItemIndex := 1;
|
||||
fsoofeOverwriteOlder: cmbFileExists.ItemIndex := 2;
|
||||
fsoofeSkip : cmbFileExists.ItemIndex := 3;
|
||||
end;
|
||||
|
||||
case gOperationOptionDirectoryExists of
|
||||
|
|
@ -99,7 +100,8 @@ begin
|
|||
case cmbFileExists.ItemIndex of
|
||||
0: FileExistsOption := fsoofeNone;
|
||||
1: FileExistsOption := fsoofeOverwrite;
|
||||
2: FileExistsOption := fsoofeSkip;
|
||||
2: FileExistsOption := fsoofeOverwriteOlder;
|
||||
3: FileExistsOption := fsoofeSkip;
|
||||
end;
|
||||
|
||||
case cmbDirectoryExists.ItemIndex of
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ procedure FillAndCount(Files: TFiles; CountDirs: Boolean; out NewFiles: TFiles;
|
|||
implementation
|
||||
|
||||
uses
|
||||
Forms, StrUtils, DCBasicTypes, DCDateTimeUtils, uDCUtils, uFileProperty,
|
||||
Forms, Math, DateUtils, DCBasicTypes, DCDateTimeUtils, uDCUtils, uFileProperty,
|
||||
uShowMsg, uLng, uGObject2, uGio, DCFileAttributes;
|
||||
|
||||
procedure ShowError(AError: PGError);
|
||||
|
|
@ -603,7 +603,7 @@ var
|
|||
|
||||
begin
|
||||
repeat
|
||||
AInfo:= g_file_query_info(aTargetFile, FILE_ATTRIBUTE_STANDARD_TYPE + ',' + FILE_ATTRIBUTE_STANDARD_SIZE +','+ FILE_ATTRIBUTE_TIME_MODIFIED, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nil, nil);
|
||||
AInfo:= g_file_query_info(aTargetFile, FILE_ATTRIBUTE_STANDARD_TYPE + ',' + FILE_ATTRIBUTE_STANDARD_SIZE +','+ FILE_ATTRIBUTE_TIME_MODIFIED + ',' + FILE_ATTRIBUTE_TIME_MODIFIED_USEC, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nil, nil);
|
||||
|
||||
if Assigned(AInfo) then
|
||||
begin
|
||||
|
|
@ -721,8 +721,23 @@ var
|
|||
Message: String;
|
||||
|
||||
function OverwriteOlder: TFileSourceOperationOptionFileExists;
|
||||
var
|
||||
ATime: TDateTime;
|
||||
AFileTime: TFileTimeEx;
|
||||
begin
|
||||
if aFile.ModificationTime > UnixFileTimeToDateTime(g_file_info_get_attribute_uint64(aTargetInfo, FILE_ATTRIBUTE_TIME_MODIFIED)) then
|
||||
ATime:= aFile.ModificationTime;
|
||||
AFileTime.sec:= Int64(g_file_info_get_attribute_uint64(aTargetInfo, FILE_ATTRIBUTE_TIME_MODIFIED));
|
||||
AFileTime.nanosec:= Int64(g_file_info_get_attribute_uint32(aTargetInfo, FILE_ATTRIBUTE_TIME_MODIFIED_USEC)) * 1000;
|
||||
// Some file systems does not support milliseconds, compare only seconds in this case
|
||||
if AFileTime.nanosec = 0 then
|
||||
begin
|
||||
ATime:= RecodeMilliSecond(ATime, 0);
|
||||
end
|
||||
else if (MilliSecondOfTheSecond(ATime) = 0) then
|
||||
begin
|
||||
AFileTime.nanosec:= 0;
|
||||
end;
|
||||
if CompareDateTime(ATime, UnixFileTimeToDateTimeEx(AFileTime)) = GreaterThanValue then
|
||||
Result := fsoofeOverwrite
|
||||
else
|
||||
Result := fsoofeSkip;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue