FIX: Compiling WFX plugins

This commit is contained in:
Alexander Koblov 2010-01-19 20:33:16 +00:00
commit 055b98cdb9
5 changed files with 58 additions and 31 deletions

View file

@ -1,9 +1,9 @@
unit WfxPlugin; {Plugin definitions version 1.5}
unit WfxPlugin; { Plugin definitions version 2.0 }
interface
uses
SysUtils {$IFDEF MSWINDOWS}, Windows{$ENDIF}, uTypes;
SysUtils {$IFDEF MSWINDOWS}, Windows{$ENDIF};
{ ids for FsGetFile }
@ -186,7 +186,7 @@ type
TInt64Rec = packed record
case Boolean of
True : (Value : Int64);
False : (Low,High : DWORD);
False : (Low, High : DWORD);
end;
BOOL = LongBool;
@ -195,14 +195,27 @@ type
HWND = THandle;
type
{$IFDEF MSWINDOWS}
FILETIME = Windows.FILETIME;
{$ELSE}
FILETIME = packed record
dwLowDateTime : DWORD;
dwHighDateTime : DWORD;
end;
{$ENDIF}
TFileTime = FILETIME; // for compatibility with all plugins
PFileTime = ^FILETIME;
TWfxFileTime = FILETIME;
PWfxFileTime = ^FILETIME;
{$IFDEF MSWINDOWS}
WIN32_FIND_DATAA = Windows.WIN32_FIND_DATA;
{$ELSE}
WIN32_FIND_DATAA = record
WIN32_FIND_DATAA = packed record
dwFileAttributes : DWORD;
ftCreationTime : TWinFileTime;
ftLastAccessTime : TWinFileTime;
ftLastWriteTime : TWinFileTime;
ftCreationTime : TFILETIME;
ftLastAccessTime : TFILETIME;
ftLastWriteTime : TFILETIME;
nFileSizeHigh : DWORD;
nFileSizeLow : DWORD;
dwReserved0 : DWORD;
@ -216,11 +229,11 @@ type
{$IFDEF MSWINDOWS}
WIN32_FIND_DATAW = Windows.WIN32_FIND_DATAW;
{$ELSE}
WIN32_FIND_DATAW = record
WIN32_FIND_DATAW = packed record
dwFileAttributes : DWORD;
ftCreationTime : TWinFileTime;
ftLastAccessTime : TWinFileTime;
ftLastWriteTime : TWinFileTime;
ftCreationTime : TFILETIME;
ftLastAccessTime : TFILETIME;
ftLastWriteTime : TFILETIME;
nFileSizeHigh : DWORD;
nFileSizeLow : DWORD;
dwReserved0 : DWORD;
@ -237,7 +250,7 @@ type
SizeLow,SizeHigh:longint;
LastWriteTime: TWinFileTime;
LastWriteTime:TFileTime;
Attr:longint;

View file

@ -171,7 +171,7 @@ begin
if (aTemplateProperty as TFileModificationDateTimeProperty).Value <>
(aFile.Properties[fpModificationTime] as TFileModificationDateTimeProperty).Value then
begin
ftTime := DateTimeToFileTime((aTemplateProperty as TFileModificationDateTimeProperty).Value);
ftTime := DateTimeToWfxFileTime((aTemplateProperty as TFileModificationDateTimeProperty).Value);
with FWfxPluginFileSource.WfxModule do
Result := WfxSetTime(aFile.FullPath, nil, nil, @ftTime);
end;
@ -180,7 +180,7 @@ begin
if (aTemplateProperty as TFileCreationDateTimeProperty).Value <>
(aFile.Properties[fpCreationTime] as TFileCreationDateTimeProperty).Value then
begin
ftTime := DateTimeToFileTime((aTemplateProperty as TFileCreationDateTimeProperty).Value);
ftTime := DateTimeToWfxFileTime((aTemplateProperty as TFileCreationDateTimeProperty).Value);
with FWfxPluginFileSource.WfxModule do
Result := WfxSetTime(aFile.FullPath, @ftTime, nil, nil);
end;
@ -189,7 +189,7 @@ begin
if (aTemplateProperty as TFileLastAccessDateTimeProperty).Value <>
(aFile.Properties[fpLastAccessTime] as TFileLastAccessDateTimeProperty).Value then
begin
ftTime := DateTimeToFileTime((aTemplateProperty as TFileLastAccessDateTimeProperty).Value);
ftTime := DateTimeToWfxFileTime((aTemplateProperty as TFileLastAccessDateTimeProperty).Value);
with FWfxPluginFileSource.WfxModule do
Result := WfxSetTime(aFile.FullPath, nil, @ftTime, nil);
end;

View file

@ -6,6 +6,7 @@ interface
uses
Classes, SysUtils, LCLProc, uLog, uGlobs,
WfxPlugin,
uFile,
uFileSource,
uFileSourceOperation,
@ -82,11 +83,14 @@ type
function WfxRenameFile(aFileSource: IWfxPluginFileSource; const aFile: TFile; const NewFileName: UTF8String): Boolean;
function WfxFileTimeToDateTime(FileTime : TWfxFileTime) : TDateTime; inline;
function DateTimeToWfxFileTime(DateTime : TDateTime) : TWfxFileTime; inline;
implementation
uses
uFileProcs, uDCUtils, uLng, WfxPlugin, uWfxModule, uFileSystemUtil, uFileProperty,
uDateTimeUtils;
uFileProcs, uDCUtils, uLng, uWfxModule, uFileSystemUtil, uFileProperty,
uDateTimeUtils, uTypes;
function WfxRenameFile(aFileSource: IWfxPluginFileSource; const aFile: TFile; const NewFileName: UTF8String): Boolean;
var
@ -100,13 +104,23 @@ begin
iTemp.Value := (aFile.Properties[fpSize] as TFileSizeProperty).Value;
SizeLow := iTemp.Low;
SizeHigh := iTemp.High;
LastWriteTime := DateTimeToWinFileTime((aFile.Properties[fpModificationTime] as TFileModificationDateTimeProperty).Value);
LastWriteTime := DateTimeToWfxFileTime((aFile.Properties[fpModificationTime] as TFileModificationDateTimeProperty).Value);
Attr := LongInt((aFile.Properties[fpAttributes] as TFileAttributesProperty).Value);
end;
Result := (WfxCopyMove(aFile.Path + aFile.Name, NewFileName, FS_COPYFLAGS_MOVE, @RemoteInfo, True, True) = FS_FILE_OK);
end;
end;
function WfxFileTimeToDateTime(FileTime: TWfxFileTime): TDateTime;
begin
Result:= WinFileTimeToDateTime(TWinFileTime(FileTime));
end;
function DateTimeToWfxFileTime(DateTime: TDateTime): TWfxFileTime;
begin
Result:= TWfxFileTime(DateTimeToWinFileTime(DateTime));
end;
{ TWfxPluginOperationHelper }
procedure TWfxPluginOperationHelper.ShowError(sMessage: String);
@ -183,7 +197,7 @@ begin
iTemp.Value := (aFile.Properties[fpSize] as TFileSizeProperty).Value;
SizeLow := iTemp.Low;
SizeHigh := iTemp.High;
LastWriteTime := DateTimeToFileTime((aFile.Properties[fpModificationTime] as TFileModificationDateTimeProperty).Value);
LastWriteTime := DateTimeToWfxFileTime((aFile.Properties[fpModificationTime] as TFileModificationDateTimeProperty).Value);
Attr := LongInt((aFile.Properties[fpAttributes] as TFileAttributesProperty).Value);
end;
Result := WfxCopyMove(aFile.Path + aFile.Name, AbsoluteTargetFileName, iFlags, @RemoteInfo, FInternal, FMode = wpohmCopyMoveIn);

View file

@ -138,7 +138,7 @@ type
{en
Each of CreationTime, LastAccessTime, LastWriteTime may be @nil to leave the value unchanged.
}
function WfxSetTime(RemoteName: UTF8String; pCreationTime, pLastAccessTime, pLastWriteTime: PWinFileTime): Boolean;
function WfxSetTime(RemoteName: UTF8String; pCreationTime, pLastAccessTime, pLastWriteTime: PWfxFileTime): Boolean;
function WfxMkDir(const sBasePath, sDirName: UTF8String): LongInt;
function WfxRemoveDir(const sDirName: UTF8String): Boolean;
function WfxDeleteFile(const sFileName: UTF8String): Boolean;
@ -181,7 +181,7 @@ type
implementation
uses
LCLProc, uLng, FileUtil, uGlobsPaths, uDCUtils, uOSUtils, uDateTimeUtils,
LCLProc, uLng, FileUtil, uGlobsPaths, uDCUtils, uOSUtils, uWfxPluginUtil,
fDialogBox;
const
@ -213,9 +213,9 @@ begin
with Result do
begin
FileAttributes:= FindData.dwFileAttributes;
CreationTime:= WinFileTimeToDateTime(FindData.ftCreationTime);
LastAccessTime:= WinFileTimeToDateTime(FindData.ftLastAccessTime);
LastWriteTime:= WinFileTimeToDateTime(FindData.ftLastWriteTime);
CreationTime:= WfxFileTimeToDateTime(FindData.ftCreationTime);
LastAccessTime:= WfxFileTimeToDateTime(FindData.ftLastAccessTime);
LastWriteTime:= WfxFileTimeToDateTime(FindData.ftLastWriteTime);
FileSize:= (Int64(FindData.nFileSizeHigh) * MAXDWORD) + FindData.nFileSizeLow;
Reserved0:= FindData.dwReserved0;
Reserved1:= FindData.dwReserved1;
@ -229,9 +229,9 @@ begin
with Result do
begin
FileAttributes:= FindData.dwFileAttributes;
CreationTime:= WinFileTimeToDateTime(FindData.ftCreationTime);
LastAccessTime:= WinFileTimeToDateTime(FindData.ftLastAccessTime);
LastWriteTime:= WinFileTimeToDateTime(FindData.ftLastWriteTime);
CreationTime:= WfxFileTimeToDateTime(FindData.ftCreationTime);
LastAccessTime:= WfxFileTimeToDateTime(FindData.ftLastAccessTime);
LastWriteTime:= WfxFileTimeToDateTime(FindData.ftLastWriteTime);
FileSize:= (Int64(FindData.nFileSizeHigh) * MAXDWORD) + FindData.nFileSizeLow;
Reserved0:= FindData.dwReserved0;
Reserved1:= FindData.dwReserved1;
@ -357,7 +357,7 @@ begin
end;
function TWFXModule.WfxSetTime(RemoteName: UTF8String; pCreationTime,
pLastAccessTime, pLastWriteTime: PWinFileTime): Boolean;
pLastAccessTime, pLastWriteTime: PWfxFileTime): Boolean;
begin
Result:= False;
if Assigned(FsSetTimeW) then

View file

@ -5,7 +5,7 @@ unit uWFXprototypes;
interface
uses
WfxPlugin, uTypes;
WfxPlugin;
type
{File system plugins API (version 2.0) for TC}
@ -29,7 +29,7 @@ type
{R} TFsGetDefRootName=procedure (DefRootName:pchar;maxlen:integer); stdcall;
//------------------------------------------------------
{U} TFsSetAttr=function (RemoteName:pchar;NewAttr:integer):boolean; stdcall;
{U} TFsSetTime=Function(RemoteName:pchar;CreationTime,LastAccessTime,LastWriteTime:PWinFileTime):boolean; stdcall;
{U} TFsSetTime=Function(RemoteName:pchar;CreationTime,LastAccessTime,LastWriteTime:PWfxFileTime):boolean; stdcall;
{U} TFsExtractCustomIcon=function(RemoteName:pchar;ExtractFlags:integer;var TheIcon:hicon):integer; stdcall;
{U} TFsRenMovFile= function(OldName,NewName:pchar; Move, OverWrite:boolean; ri:pRemoteInfo):Integer; stdcall;
{U} TFsDisconnect = function (DisconnectRoot:pchar):boolean; stdcall;
@ -62,7 +62,7 @@ type
TFsRemoveDirW = function(RemoteName:pwidechar):bool; stdcall;
TFsDisconnectW = function(DisconnectRoot:pwidechar):bool; stdcall;
TFsSetAttrW = function(RemoteName:pwidechar;NewAttr:integer):bool; stdcall;
TFsSetTimeW = function(RemoteName:pwidechar;CreationTime,LastAccessTime, LastWriteTime:PWinFileTime):bool; stdcall;
TFsSetTimeW = function(RemoteName:pwidechar;CreationTime,LastAccessTime, LastWriteTime:PWfxFileTime):bool; stdcall;
TFsStatusInfoW = procedure(RemoteDir:pwidechar;InfoStartEnd,InfoOperation:integer); stdcall;
TFsExtractCustomIconW = function(RemoteName:pwidechar;ExtractFlags:integer; var TheIcon:hicon):integer; stdcall;
TFsGetPreviewBitmapW = function(RemoteName:pwidechar;width,height:integer; var ReturnedBitmap:hbitmap):integer; stdcall;