Terminal.h 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445
  1. //---------------------------------------------------------------------------
  2. #ifndef TerminalH
  3. #define TerminalH
  4. #include <Classes.hpp>
  5. #include "FileOperationProgress.h"
  6. #include "FileMasks.h"
  7. #include "SecureShell.h"
  8. //---------------------------------------------------------------------------
  9. class TCopyParamType;
  10. class TFileOperationProgressType;
  11. class TRemoteDirectory;
  12. class TRemoteFile;
  13. class TCustomFileSystem;
  14. struct TCalculateSizeParams;
  15. struct TOverwriteFileParams;
  16. struct TSynchronizeData;
  17. struct TSynchronizeStats;
  18. typedef TStringList TUsersGroupsList;
  19. typedef void __fastcall (__closure *TReadDirectoryEvent)(System::TObject* Sender, Boolean ReloadOnly);
  20. typedef void __fastcall (__closure *TReadDirectoryProgressEvent)(
  21. System::TObject* Sender, int Progress);
  22. typedef void __fastcall (__closure *TProcessFileEvent)
  23. (const AnsiString FileName, const TRemoteFile * File, void * Param);
  24. typedef void __fastcall (__closure *TProcessFileEventEx)
  25. (const AnsiString FileName, const TRemoteFile * File, void * Param, int Index);
  26. typedef int __fastcall (__closure *TFileOperationEvent)
  27. (void * Param1, void * Param2);
  28. typedef void __fastcall (__closure *TSynchronizeDirectory)
  29. (const AnsiString LocalDirectory, const AnsiString RemoteDirectory, bool & Continue);
  30. typedef void __fastcall (__closure *TDeleteLocalFileEvent)(const AnsiString FileName);
  31. typedef int __fastcall (__closure *TDirectoryModifiedEvent)
  32. (TTerminal * Terminal, const AnsiString Directory, bool SubDirs);
  33. //---------------------------------------------------------------------------
  34. #define SUSPEND_OPERATION(Command) \
  35. { \
  36. TSuspendFileOperationProgress Suspend(OperationProgress); \
  37. Command \
  38. }
  39. #define THROW_SKIP_FILE(EXCEPTION, MESSAGE) \
  40. throw EScpSkipFile(EXCEPTION, MESSAGE)
  41. #define THROW_SKIP_FILE_NULL THROW_SKIP_FILE(NULL, "")
  42. /* TODO : Better user interface (query to user) */
  43. #define FILE_OPERATION_LOOP_CUSTOM(TERMINAL, ALLOW_SKIP, MESSAGE, OPERATION) { \
  44. bool DoRepeat; \
  45. do { \
  46. DoRepeat = false; \
  47. try { \
  48. OPERATION; \
  49. } \
  50. catch (EAbort & E) \
  51. { \
  52. throw; \
  53. } \
  54. catch (EScpSkipFile & E) \
  55. { \
  56. throw; \
  57. } \
  58. catch (EFatal & E) \
  59. { \
  60. throw; \
  61. } \
  62. catch (Exception & E) \
  63. { \
  64. TERMINAL->DoHandleExtendedException(&E); \
  65. int Answer; \
  66. if ((ALLOW_SKIP) && OperationProgress->SkipToAll) \
  67. Answer = qaSkip; \
  68. else \
  69. { \
  70. int Answers = qaRetry | qaAbort | ((ALLOW_SKIP) ? (qaSkip | qaAll) : 0); \
  71. TQueryParams Params(qpAllowContinueOnError | (!(ALLOW_SKIP) ? qpFatalAbort : 0)); \
  72. TQueryButtonAlias Aliases[1]; \
  73. if (FLAGSET(Answers, qaAll)) \
  74. { \
  75. Aliases[0].Button = qaAll; \
  76. Aliases[0].Alias = LoadStr(SKIP_ALL_BUTTON); \
  77. Params.Aliases = Aliases; \
  78. Params.AliasesCount = LENOF(Aliases); \
  79. } \
  80. SUSPEND_OPERATION ( \
  81. Answer = TERMINAL->DoQueryUser(MESSAGE, &E, Answers, &Params, qtError); \
  82. ); \
  83. if (Answer == qaAll) \
  84. { \
  85. OperationProgress->SkipToAll = true; \
  86. Answer = qaSkip; \
  87. } \
  88. } \
  89. DoRepeat = (Answer == qaRetry); \
  90. if (Answer == qaAbort) OperationProgress->Cancel = csCancel; \
  91. if (!DoRepeat && ALLOW_SKIP) THROW_SKIP_FILE(&E, MESSAGE); \
  92. else \
  93. if (!DoRepeat && !ALLOW_SKIP) throw; \
  94. } \
  95. } while (DoRepeat); }
  96. #define FILE_OPERATION_LOOP(MESSAGE, OPERATION) \
  97. FILE_OPERATION_LOOP_EX(True, MESSAGE, OPERATION)
  98. //---------------------------------------------------------------------------
  99. enum TFSCapability { fcUserGroupListing, fcModeChanging, fcGroupChanging,
  100. fcOwnerChanging, fcAnyCommand, fcHardLink, fcSymbolicLink, fcResolveSymlink,
  101. fcTextMode, fcRename, fcNativeTextMode, fcNewerOnlyUpload, fcRemoteCopy,
  102. fcTimestampChanging, fcRemoteMove };
  103. enum TCurrentFSProtocol { cfsUnknown, cfsSCP, cfsSFTP };
  104. //---------------------------------------------------------------------------
  105. const cpDelete = 0x01;
  106. const cpTemporary = 0x04;
  107. const cpNoConfirmation = 0x08;
  108. const cpNewerOnly = 0x10;
  109. //---------------------------------------------------------------------------
  110. const ccApplyToDirectories = 0x01;
  111. const ccRecursive = 0x02;
  112. const ccUser = 0x100;
  113. //---------------------------------------------------------------------------
  114. const csIgnoreErrors = 0x01;
  115. //---------------------------------------------------------------------------
  116. class TTerminal : public TSecureShell
  117. {
  118. public:
  119. // TScript::SynchronizeProc relies on the order
  120. enum TSynchronizeMode { smRemote, smLocal, smBoth };
  121. static const spDelete = 0x01; // cannot be combined with spTimestamp and spBySize
  122. static const spNoConfirmation = 0x02; // has no effect for spTimestamp
  123. static const spExistingOnly = 0x04; // is implicit for spTimestamp
  124. static const spNoRecurse = 0x08;
  125. static const spUseCache = 0x10; // cannot be combined with spTimestamp
  126. static const spDelayProgress = 0x20; // cannot be combined with spTimestamp
  127. static const spPreviewChanges = 0x40; // has no effect for spTimestamp
  128. static const spSubDirs = 0x80; // cannot be combined with spTimestamp
  129. static const spTimestamp = 0x100;
  130. static const spNotByTime = 0x200; // cannot be combined with spTimestamp and smBoth
  131. static const spBySize = 0x400; // cannot be combined with spTimestamp and smBoth
  132. // for TranslateLockedPath()
  133. friend class TRemoteFile;
  134. // for ReactOnCommand()
  135. friend class TSCPFileSystem;
  136. friend class TSFTPFileSystem;
  137. private:
  138. AnsiString FCurrentDirectory;
  139. AnsiString FLockDirectory;
  140. Integer FExceptionOnFail;
  141. TRemoteDirectory * FFiles;
  142. int FInTransaction;
  143. TNotifyEvent FOnChangeDirectory;
  144. TReadDirectoryEvent FOnReadDirectory;
  145. TDirectoryModifiedEvent FOnDirectoryModified;
  146. TNotifyEvent FOnStartReadDirectory;
  147. TReadDirectoryProgressEvent FOnReadDirectoryProgress;
  148. TDeleteLocalFileEvent FOnDeleteLocalFile;
  149. TUsersGroupsList * FGroups;
  150. TUsersGroupsList * FUsers;
  151. bool FUsersGroupsLookedup;
  152. TFileOperationProgressEvent FOnProgress;
  153. TFileOperationFinished FOnFinished;
  154. TFileOperationProgressType * FOperationProgress;
  155. bool FUseBusyCursor;
  156. TRemoteDirectoryCache * FDirectoryCache;
  157. TRemoteDirectoryChangesCache * FDirectoryChangesCache;
  158. TCustomFileSystem * FFileSystem;
  159. TStrings * FAdditionalInfo;
  160. AnsiString FLastDirectoryChange;
  161. TCurrentFSProtocol FFSProtocol;
  162. TTerminal * FCommandSession;
  163. bool FAutoReadDirectory;
  164. bool FReadingCurrentDirectory;
  165. bool * FClosedOnCompletion;
  166. void __fastcall CommandError(Exception * E, const AnsiString Msg);
  167. int __fastcall CommandError(Exception * E, const AnsiString Msg, int Answers);
  168. AnsiString __fastcall PeekCurrentDirectory();
  169. AnsiString __fastcall GetCurrentDirectory();
  170. bool __fastcall GetExceptionOnFail() const;
  171. AnsiString __fastcall GetProtocolName();
  172. TUsersGroupsList * __fastcall GetGroups();
  173. TUsersGroupsList * __fastcall GetUsers();
  174. void __fastcall SetCurrentDirectory(AnsiString value);
  175. void __fastcall SetExceptionOnFail(bool value);
  176. void __fastcall ReactOnCommand(int /*TFSCommand*/ Cmd);
  177. AnsiString __fastcall GetUserName() const;
  178. bool __fastcall GetAreCachesEmpty() const;
  179. void __fastcall ClearCachedFileList(const AnsiString Path, bool SubDirs);
  180. void __fastcall AddCachedFileList(TRemoteFileList * FileList);
  181. bool __fastcall GetCommandSessionOpened();
  182. TTerminal * __fastcall GetCommandSession();
  183. protected:
  184. bool FReadCurrentDirectoryPending;
  185. bool FReadDirectoryPending;
  186. virtual void __fastcall KeepAlive();
  187. void __fastcall DoStartReadDirectory();
  188. void __fastcall DoReadDirectoryProgress(int Progress);
  189. void __fastcall DoReadDirectory(bool ReloadOnly);
  190. void __fastcall DoDirectoryModified(const AnsiString Path, bool SubDirs);
  191. void __fastcall DoCreateDirectory(const AnsiString DirName,
  192. const TRemoteProperties * Properties);
  193. void __fastcall DoDeleteFile(const AnsiString FileName,
  194. const TRemoteFile * File, void * Param);
  195. void __fastcall DoCustomCommandOnFile(AnsiString FileName,
  196. const TRemoteFile * File, AnsiString Command, int Params, TLogAddLineEvent OutputEvent);
  197. void __fastcall DoRenameFile(const AnsiString FileName,
  198. const AnsiString NewName, bool Move);
  199. void __fastcall DoCopyFile(const AnsiString FileName, const AnsiString NewName);
  200. void __fastcall DoChangeFileProperties(const AnsiString FileName,
  201. const TRemoteFile * File, const TRemoteProperties * Properties);
  202. void __fastcall DoChangeDirectory();
  203. void __fastcall EnsureNonExistence(const AnsiString FileName);
  204. void __fastcall LookupUsersGroups();
  205. void __fastcall FileModified(const TRemoteFile * File, const AnsiString FileName);
  206. int __fastcall FileOperationLoop(TFileOperationEvent CallBackFunc,
  207. TFileOperationProgressType * OperationProgress, bool AllowSkip,
  208. const AnsiString Message, void * Param1 = NULL, void * Param2 = NULL);
  209. bool __fastcall GetIsCapable(TFSCapability Capability) const;
  210. bool __fastcall ProcessFiles(TStrings * FileList, TFileOperation Operation,
  211. TProcessFileEvent ProcessFile, void * Param = NULL, TOperationSide Side = osRemote,
  212. bool Ex = false);
  213. bool __fastcall ProcessFilesEx(TStrings * FileList, TFileOperation Operation,
  214. TProcessFileEventEx ProcessFile, void * Param = NULL, TOperationSide Side = osRemote);
  215. void __fastcall ProcessDirectory(const AnsiString DirName,
  216. TProcessFileEvent CallBackFunc, void * Param = NULL, bool UseCache = false);
  217. AnsiString __fastcall TranslateLockedPath(AnsiString Path, bool Lock);
  218. void __fastcall ReadDirectory(TRemoteFileList * FileList);
  219. void __fastcall CustomReadDirectory(TRemoteFileList * FileList);
  220. void __fastcall DoCreateLink(const AnsiString FileName, const AnsiString PointTo, bool Symbolic);
  221. bool __fastcall CreateLocalFile(const AnsiString FileName,
  222. TFileOperationProgressType * OperationProgress, HANDLE * AHandle);
  223. void __fastcall OpenLocalFile(const AnsiString FileName, int Access,
  224. int * Attrs, HANDLE * Handle, __int64 * ACTime, __int64 * MTime,
  225. __int64 * ATime, __int64 * Size, bool TryWriteReadOnly = true);
  226. bool __fastcall HandleException(Exception * E);
  227. void __fastcall CalculateFileSize(AnsiString FileName,
  228. const TRemoteFile * File, /*TCalculateSizeParams*/ void * Size);
  229. void __fastcall DoCalculateDirectorySize(const AnsiString FileName,
  230. const TRemoteFile * File, TCalculateSizeParams * Params);
  231. void __fastcall CalculateLocalFileSize(const AnsiString FileName,
  232. const TSearchRec Rec, /*__int64*/ void * Size);
  233. void __fastcall CalculateLocalFilesSize(TStrings * FileList, __int64 & Size,
  234. const TCopyParamType * CopyParam = NULL);
  235. TStrings * __fastcall GetAdditionalInfo();
  236. int __fastcall ConfirmFileOverwrite(const AnsiString FileName,
  237. const TOverwriteFileParams * FileParams, int Answers, const TQueryParams * Params,
  238. TOperationSide Side, TFileOperationProgressType * OperationProgress);
  239. void __fastcall DoSynchronizeDirectory(const AnsiString LocalDirectory,
  240. const AnsiString RemoteDirectory, TSynchronizeMode Mode,
  241. const TCopyParamType * CopyParam, int Params,
  242. TSynchronizeDirectory OnSynchronizeDirectory, TSynchronizeStats * Stats);
  243. void __fastcall SynchronizeFile(const AnsiString FileName,
  244. const TRemoteFile * File, /*TSynchronizeData*/ void * Param);
  245. void __fastcall SynchronizeRemoteTimestamp(const AnsiString FileName,
  246. const TRemoteFile * File, void * Param);
  247. void __fastcall SynchronizeLocalTimestamp(const AnsiString FileName,
  248. const TRemoteFile * File, void * Param, int Index);
  249. void __fastcall DoSynchronizeProgress(const TSynchronizeData & Data);
  250. void __fastcall DeleteLocalFile(AnsiString FileName,
  251. const TRemoteFile * File, void * Param);
  252. void __fastcall RecycleFile(AnsiString FileName, const TRemoteFile * File);
  253. bool __fastcall IsRecycledFile(AnsiString FileName);
  254. TStrings * __fastcall GetFixedPaths();
  255. __property TFileOperationProgressType * OperationProgress = { read=FOperationProgress };
  256. public:
  257. __fastcall TTerminal();
  258. __fastcall ~TTerminal();
  259. virtual void __fastcall Open();
  260. virtual void __fastcall Close();
  261. virtual void __fastcall DirectoryModified(const AnsiString Path, bool SubDirs);
  262. virtual void __fastcall DirectoryLoaded(TRemoteFileList * FileList);
  263. virtual void __fastcall Idle();
  264. bool __fastcall AllowedAnyCommand(const AnsiString Command);
  265. void __fastcall AnyCommand(const AnsiString Command);
  266. void __fastcall CloseOnCompletion(const AnsiString Message = "");
  267. AnsiString __fastcall AbsolutePath(AnsiString Path);
  268. void __fastcall BeginTransaction();
  269. void __fastcall ReadCurrentDirectory();
  270. void __fastcall ReadDirectory(bool ReloadOnly, bool ForceCache = false);
  271. TRemoteFileList * ReadDirectoryListing(AnsiString Directory, bool UseCache);
  272. void __fastcall ReadFile(const AnsiString FileName, TRemoteFile *& File);
  273. void __fastcall ReadSymlink(TRemoteFile * SymlinkFile, TRemoteFile *& File);
  274. bool __fastcall CopyToLocal(TStrings * FilesToCopy,
  275. const AnsiString TargetDir, const TCopyParamType * CopyParam, int Params);
  276. bool __fastcall CopyToRemote(TStrings * FilesToCopy,
  277. const AnsiString TargetDir, const TCopyParamType * CopyParam, int Params);
  278. void __fastcall CreateDirectory(const AnsiString DirName,
  279. const TRemoteProperties * Properties = NULL);
  280. void __fastcall CreateLink(const AnsiString FileName, const AnsiString PointTo, bool Symbolic);
  281. void __fastcall DeleteFile(AnsiString FileName,
  282. const TRemoteFile * File = NULL, void * Recursive = NULL);
  283. bool __fastcall DeleteFiles(TStrings * FilesToDelete, bool * Recursive = NULL);
  284. bool __fastcall DeleteLocalFiles(TStrings * FileList);
  285. void __fastcall CustomCommandOnFile(AnsiString FileName,
  286. const TRemoteFile * File, void * AParams);
  287. void __fastcall CustomCommandOnFiles(AnsiString Command, int Params,
  288. TStrings * Files, TLogAddLineEvent OutputEvent);
  289. void __fastcall ChangeDirectory(const AnsiString Directory);
  290. void __fastcall DoStartup();
  291. void __fastcall EndTransaction();
  292. void __fastcall HomeDirectory();
  293. void __fastcall ChangeFileProperties(AnsiString FileName,
  294. const TRemoteFile * File, /*const TRemoteProperties */ void * Properties);
  295. void __fastcall ChangeFilesProperties(TStrings * FileList,
  296. const TRemoteProperties * Properties);
  297. void __fastcall TerminalError(AnsiString Msg);
  298. void __fastcall TerminalError(Exception * E, AnsiString Msg);
  299. void __fastcall ReloadDirectory();
  300. void __fastcall RefreshDirectory();
  301. void __fastcall RenameFile(const AnsiString FileName, const AnsiString NewName);
  302. void __fastcall RenameFile(const TRemoteFile * File, const AnsiString NewName, bool CheckExistence);
  303. void __fastcall MoveFile(const AnsiString FileName, const TRemoteFile * File,
  304. /*const TMoveFileParams*/ void * Param);
  305. bool __fastcall MoveFiles(TStrings * FileList, const AnsiString Target,
  306. const AnsiString FileMask);
  307. void __fastcall CopyFile(const AnsiString FileName, const TRemoteFile * File,
  308. /*const TMoveFileParams*/ void * Param);
  309. bool __fastcall CopyFiles(TStrings * FileList, const AnsiString Target,
  310. const AnsiString FileMask);
  311. void __fastcall CalculateFilesSize(TStrings * FileList, __int64 & Size,
  312. int Params, const TCopyParamType * CopyParam = NULL);
  313. void __fastcall ClearCaches();
  314. void __fastcall Synchronize(const AnsiString LocalDirectory,
  315. const AnsiString RemoteDirectory, TSynchronizeMode Mode,
  316. const TCopyParamType * CopyParam, int Params,
  317. TSynchronizeDirectory OnSynchronizeDirectory, TSynchronizeStats * Stats);
  318. bool __fastcall DirectoryFileList(const AnsiString Path,
  319. TRemoteFileList *& FileList, bool CanLoad);
  320. void __fastcall MakeLocalFileList(const AnsiString FileName,
  321. const TSearchRec Rec, void * Param);
  322. AnsiString __fastcall FileUrl(const AnsiString FileName);
  323. static bool __fastcall IsAbsolutePath(const AnsiString Path);
  324. static AnsiString __fastcall ExpandFileName(AnsiString Path,
  325. const AnsiString BasePath);
  326. __property AnsiString CurrentDirectory = { read = GetCurrentDirectory, write = SetCurrentDirectory };
  327. __property bool ExceptionOnFail = { read = GetExceptionOnFail, write = SetExceptionOnFail };
  328. __property TRemoteDirectory * Files = { read = FFiles };
  329. __property TNotifyEvent OnChangeDirectory = { read = FOnChangeDirectory, write = FOnChangeDirectory };
  330. __property TReadDirectoryEvent OnReadDirectory = { read = FOnReadDirectory, write = FOnReadDirectory };
  331. __property TDirectoryModifiedEvent OnDirectoryModified = { read = FOnDirectoryModified, write = FOnDirectoryModified };
  332. __property TNotifyEvent OnStartReadDirectory = { read = FOnStartReadDirectory, write = FOnStartReadDirectory };
  333. __property TReadDirectoryProgressEvent OnReadDirectoryProgress = { read = FOnReadDirectoryProgress, write = FOnReadDirectoryProgress };
  334. __property TDeleteLocalFileEvent OnDeleteLocalFile = { read = FOnDeleteLocalFile, write = FOnDeleteLocalFile };
  335. __property TUsersGroupsList * Groups = { read = GetGroups };
  336. __property TUsersGroupsList * Users = { read = GetUsers };
  337. __property TFileOperationProgressEvent OnProgress = { read=FOnProgress, write=FOnProgress };
  338. __property TFileOperationFinished OnFinished = { read=FOnFinished, write=FOnFinished };
  339. __property TCurrentFSProtocol FSProtocol = { read = FFSProtocol };
  340. __property AnsiString ProtocolName = { read = GetProtocolName };
  341. __property bool UseBusyCursor = { read = FUseBusyCursor, write = FUseBusyCursor };
  342. __property AnsiString UserName = { read=GetUserName };
  343. __property bool IsCapable[TFSCapability Capability] = { read = GetIsCapable };
  344. __property TStrings * AdditionalInfo = { read = GetAdditionalInfo };
  345. __property bool AreCachesEmpty = { read = GetAreCachesEmpty };
  346. __property bool CommandSessionOpened = { read = GetCommandSessionOpened };
  347. __property TTerminal * CommandSession = { read = GetCommandSession };
  348. __property bool AutoReadDirectory = { read = FAutoReadDirectory, write = FAutoReadDirectory };
  349. __property TStrings * FixedPaths = { read = GetFixedPaths };
  350. };
  351. //---------------------------------------------------------------------------
  352. class TSecondaryTerminal : public TTerminal
  353. {
  354. public:
  355. __fastcall TSecondaryTerminal(TTerminal * MainTerminal);
  356. protected:
  357. virtual void __fastcall DirectoryLoaded(TRemoteFileList * FileList);
  358. virtual void __fastcall DirectoryModified(const AnsiString Path,
  359. bool SubDirs);
  360. virtual bool __fastcall DoPromptUser(AnsiString Prompt, TPromptKind Kind,
  361. AnsiString & Response);
  362. virtual void __fastcall SetSessionData(TSessionData * value);
  363. private:
  364. bool FMasterPasswordTried;
  365. TTerminal * FMainTerminal;
  366. };
  367. //---------------------------------------------------------------------------
  368. class TTerminalList : public TObjectList
  369. {
  370. public:
  371. __fastcall TTerminalList(TConfiguration * AConfiguration);
  372. __fastcall ~TTerminalList();
  373. virtual TTerminal * __fastcall NewTerminal(TSessionData * Data);
  374. virtual void __fastcall FreeTerminal(TTerminal * Terminal);
  375. void __fastcall FreeAndNullTerminal(TTerminal * & Terminal);
  376. virtual void __fastcall Idle();
  377. __property TTerminal * Terminals[int Index] = { read=GetTerminal };
  378. __property int ActiveCount = { read = GetActiveCount };
  379. private:
  380. TConfiguration * FConfiguration;
  381. TTerminal * __fastcall GetTerminal(int Index);
  382. int __fastcall GetActiveCount();
  383. };
  384. //---------------------------------------------------------------------------
  385. struct TCustomCommandParams
  386. {
  387. AnsiString Command;
  388. int Params;
  389. TLogAddLineEvent OutputEvent;
  390. };
  391. //---------------------------------------------------------------------------
  392. struct TCalculateSizeParams
  393. {
  394. __int64 Size;
  395. int Params;
  396. const TCopyParamType * CopyParam;
  397. };
  398. //---------------------------------------------------------------------------
  399. struct TOverwriteFileParams
  400. {
  401. __int64 SourceSize;
  402. __int64 DestSize;
  403. TDateTime SourceTimestamp;
  404. TDateTime DestTimestamp;
  405. };
  406. //---------------------------------------------------------------------------
  407. struct TMakeLocalFileListParams
  408. {
  409. TStrings * FileList;
  410. bool IncludeDirs;
  411. bool Recursive;
  412. };
  413. //---------------------------------------------------------------------------
  414. struct TSynchronizeStats
  415. {
  416. TSynchronizeStats();
  417. // currently we do not need any other stats
  418. // (these are for keep remote directory up to date)
  419. int NewDirectories;
  420. int RemovedDirectories;
  421. int ObsoleteDirectories;
  422. };
  423. //---------------------------------------------------------------------------
  424. #endif