Terminal.h 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532
  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 TSynchronizeOptions;
  18. class TSynchronizeChecklist;
  19. struct TCalculateSizeStats;
  20. struct TFileSystemInfo;
  21. typedef TStringList TUsersGroupsList;
  22. typedef void __fastcall (__closure *TReadDirectoryEvent)(System::TObject* Sender, Boolean ReloadOnly);
  23. typedef void __fastcall (__closure *TReadDirectoryProgressEvent)(
  24. System::TObject* Sender, int Progress, bool & Cancel);
  25. typedef void __fastcall (__closure *TProcessFileEvent)
  26. (const AnsiString FileName, const TRemoteFile * File, void * Param);
  27. typedef void __fastcall (__closure *TProcessFileEventEx)
  28. (const AnsiString FileName, const TRemoteFile * File, void * Param, int Index);
  29. typedef int __fastcall (__closure *TFileOperationEvent)
  30. (void * Param1, void * Param2);
  31. typedef void __fastcall (__closure *TSynchronizeDirectory)
  32. (const AnsiString LocalDirectory, const AnsiString RemoteDirectory,
  33. bool & Continue, bool Collect);
  34. typedef void __fastcall (__closure *TDeleteLocalFileEvent)(const AnsiString FileName);
  35. typedef int __fastcall (__closure *TDirectoryModifiedEvent)
  36. (TTerminal * Terminal, const AnsiString Directory, bool SubDirs);
  37. //---------------------------------------------------------------------------
  38. #define SUSPEND_OPERATION(Command) \
  39. { \
  40. TSuspendFileOperationProgress Suspend(OperationProgress); \
  41. Command \
  42. }
  43. #define THROW_SKIP_FILE(EXCEPTION, MESSAGE) \
  44. throw EScpSkipFile(EXCEPTION, MESSAGE)
  45. #define THROW_SKIP_FILE_NULL THROW_SKIP_FILE(NULL, "")
  46. /* TODO : Better user interface (query to user) */
  47. #define FILE_OPERATION_LOOP_CUSTOM(TERMINAL, ALLOW_SKIP, MESSAGE, OPERATION) { \
  48. bool DoRepeat; \
  49. do { \
  50. DoRepeat = false; \
  51. try { \
  52. OPERATION; \
  53. } \
  54. catch (EAbort & E) \
  55. { \
  56. throw; \
  57. } \
  58. catch (EScpSkipFile & E) \
  59. { \
  60. throw; \
  61. } \
  62. catch (EFatal & E) \
  63. { \
  64. throw; \
  65. } \
  66. catch (Exception & E) \
  67. { \
  68. TERMINAL->FileOperationLoopQuery(E, OperationProgress, MESSAGE, ALLOW_SKIP); \
  69. DoRepeat = true; \
  70. } \
  71. } while (DoRepeat); }
  72. #define FILE_OPERATION_LOOP(MESSAGE, OPERATION) \
  73. FILE_OPERATION_LOOP_EX(True, MESSAGE, OPERATION)
  74. //---------------------------------------------------------------------------
  75. enum TFSCapability { fcUserGroupListing, fcModeChanging, fcGroupChanging,
  76. fcOwnerChanging, fcAnyCommand, fcHardLink, fcSymbolicLink, fcResolveSymlink,
  77. fcTextMode, fcRename, fcNativeTextMode, fcNewerOnlyUpload, fcRemoteCopy,
  78. fcTimestampChanging, fcRemoteMove, fcLoadingAdditionalProperties,
  79. fcCheckingSpaceAvailable, fcIgnorePermErrors, fcCount };
  80. enum TCurrentFSProtocol { cfsUnknown, cfsSCP, cfsSFTP };
  81. //---------------------------------------------------------------------------
  82. const cpDelete = 0x01;
  83. const cpTemporary = 0x04;
  84. const cpNoConfirmation = 0x08;
  85. const cpNewerOnly = 0x10;
  86. //---------------------------------------------------------------------------
  87. const ccApplyToDirectories = 0x01;
  88. const ccRecursive = 0x02;
  89. const ccUser = 0x100;
  90. //---------------------------------------------------------------------------
  91. const csIgnoreErrors = 0x01;
  92. //---------------------------------------------------------------------------
  93. class TTerminal : public TSecureShell
  94. {
  95. public:
  96. // TScript::SynchronizeProc relies on the order
  97. enum TSynchronizeMode { smRemote, smLocal, smBoth };
  98. static const spDelete = 0x01; // cannot be combined with spTimestamp and spBySize
  99. static const spNoConfirmation = 0x02; // has no effect for spTimestamp
  100. static const spExistingOnly = 0x04; // is implicit for spTimestamp
  101. static const spNoRecurse = 0x08;
  102. static const spUseCache = 0x10; // cannot be combined with spTimestamp
  103. static const spDelayProgress = 0x20; // cannot be combined with spTimestamp
  104. static const spPreviewChanges = 0x40; // not used by core
  105. static const spSubDirs = 0x80; // cannot be combined with spTimestamp
  106. static const spTimestamp = 0x100;
  107. static const spNotByTime = 0x200; // cannot be combined with spTimestamp and smBoth
  108. static const spBySize = 0x400; // cannot be combined with smBoth, has opposite meaning for spTimestamp
  109. // for TranslateLockedPath()
  110. friend class TRemoteFile;
  111. // for ReactOnCommand()
  112. friend class TSCPFileSystem;
  113. friend class TSFTPFileSystem;
  114. private:
  115. AnsiString FCurrentDirectory;
  116. AnsiString FLockDirectory;
  117. Integer FExceptionOnFail;
  118. TRemoteDirectory * FFiles;
  119. int FInTransaction;
  120. TNotifyEvent FOnChangeDirectory;
  121. TReadDirectoryEvent FOnReadDirectory;
  122. TDirectoryModifiedEvent FOnDirectoryModified;
  123. TNotifyEvent FOnStartReadDirectory;
  124. TReadDirectoryProgressEvent FOnReadDirectoryProgress;
  125. TDeleteLocalFileEvent FOnDeleteLocalFile;
  126. TUsersGroupsList * FGroups;
  127. TUsersGroupsList * FUsers;
  128. bool FUsersGroupsLookedup;
  129. TFileOperationProgressEvent FOnProgress;
  130. TFileOperationFinished FOnFinished;
  131. TFileOperationProgressType * FOperationProgress;
  132. bool FUseBusyCursor;
  133. TRemoteDirectoryCache * FDirectoryCache;
  134. TRemoteDirectoryChangesCache * FDirectoryChangesCache;
  135. TCustomFileSystem * FFileSystem;
  136. TStrings * FAdditionalInfo;
  137. AnsiString FLastDirectoryChange;
  138. TCurrentFSProtocol FFSProtocol;
  139. TTerminal * FCommandSession;
  140. bool FAutoReadDirectory;
  141. bool FReadingCurrentDirectory;
  142. bool * FClosedOnCompletion;
  143. void __fastcall CommandError(Exception * E, const AnsiString Msg);
  144. int __fastcall CommandError(Exception * E, const AnsiString Msg, int Answers);
  145. AnsiString __fastcall PeekCurrentDirectory();
  146. AnsiString __fastcall GetCurrentDirectory();
  147. bool __fastcall GetExceptionOnFail() const;
  148. AnsiString __fastcall GetProtocolName();
  149. TUsersGroupsList * __fastcall GetGroups();
  150. TUsersGroupsList * __fastcall GetUsers();
  151. void __fastcall SetCurrentDirectory(AnsiString value);
  152. void __fastcall SetExceptionOnFail(bool value);
  153. void __fastcall ReactOnCommand(int /*TFSCommand*/ Cmd);
  154. AnsiString __fastcall GetUserName() const;
  155. bool __fastcall GetAreCachesEmpty() const;
  156. void __fastcall ClearCachedFileList(const AnsiString Path, bool SubDirs);
  157. void __fastcall AddCachedFileList(TRemoteFileList * FileList);
  158. bool __fastcall GetCommandSessionOpened();
  159. TTerminal * __fastcall GetCommandSession();
  160. bool __fastcall GetResolvingSymlinks();
  161. protected:
  162. bool FReadCurrentDirectoryPending;
  163. bool FReadDirectoryPending;
  164. virtual void __fastcall KeepAlive();
  165. void __fastcall DoStartReadDirectory();
  166. void __fastcall DoReadDirectoryProgress(int Progress, bool & Cancel);
  167. void __fastcall DoReadDirectory(bool ReloadOnly);
  168. void __fastcall DoDirectoryModified(const AnsiString Path, bool SubDirs);
  169. void __fastcall DoCreateDirectory(const AnsiString DirName,
  170. const TRemoteProperties * Properties);
  171. void __fastcall DoDeleteFile(const AnsiString FileName,
  172. const TRemoteFile * File, void * Param);
  173. void __fastcall DoCustomCommandOnFile(AnsiString FileName,
  174. const TRemoteFile * File, AnsiString Command, int Params, TLogAddLineEvent OutputEvent);
  175. void __fastcall DoRenameFile(const AnsiString FileName,
  176. const AnsiString NewName, bool Move);
  177. void __fastcall DoCopyFile(const AnsiString FileName, const AnsiString NewName);
  178. void __fastcall DoChangeFileProperties(const AnsiString FileName,
  179. const TRemoteFile * File, const TRemoteProperties * Properties);
  180. void __fastcall DoChangeDirectory();
  181. void __fastcall EnsureNonExistence(const AnsiString FileName);
  182. void __fastcall LookupUsersGroups();
  183. void __fastcall FileModified(const TRemoteFile * File,
  184. const AnsiString FileName, bool ClearDirectoryChange = false);
  185. int __fastcall FileOperationLoop(TFileOperationEvent CallBackFunc,
  186. TFileOperationProgressType * OperationProgress, bool AllowSkip,
  187. const AnsiString Message, void * Param1 = NULL, void * Param2 = NULL);
  188. bool __fastcall GetIsCapable(TFSCapability Capability) const;
  189. bool __fastcall ProcessFiles(TStrings * FileList, TFileOperation Operation,
  190. TProcessFileEvent ProcessFile, void * Param = NULL, TOperationSide Side = osRemote,
  191. bool Ex = false);
  192. bool __fastcall ProcessFilesEx(TStrings * FileList, TFileOperation Operation,
  193. TProcessFileEventEx ProcessFile, void * Param = NULL, TOperationSide Side = osRemote);
  194. void __fastcall ProcessDirectory(const AnsiString DirName,
  195. TProcessFileEvent CallBackFunc, void * Param = NULL, bool UseCache = false);
  196. AnsiString __fastcall TranslateLockedPath(AnsiString Path, bool Lock);
  197. void __fastcall ReadDirectory(TRemoteFileList * FileList);
  198. void __fastcall CustomReadDirectory(TRemoteFileList * FileList);
  199. void __fastcall DoCreateLink(const AnsiString FileName, const AnsiString PointTo, bool Symbolic);
  200. bool __fastcall CreateLocalFile(const AnsiString FileName,
  201. TFileOperationProgressType * OperationProgress, HANDLE * AHandle,
  202. bool NoConfirmation);
  203. void __fastcall OpenLocalFile(const AnsiString FileName, int Access,
  204. int * Attrs, HANDLE * Handle, __int64 * ACTime, __int64 * MTime,
  205. __int64 * ATime, __int64 * Size, bool TryWriteReadOnly = true);
  206. bool __fastcall HandleException(Exception * E);
  207. void __fastcall CalculateFileSize(AnsiString FileName,
  208. const TRemoteFile * File, /*TCalculateSizeParams*/ void * Size);
  209. void __fastcall DoCalculateDirectorySize(const AnsiString FileName,
  210. const TRemoteFile * File, TCalculateSizeParams * Params);
  211. void __fastcall CalculateLocalFileSize(const AnsiString FileName,
  212. const TSearchRec Rec, /*__int64*/ void * Size);
  213. void __fastcall CalculateLocalFilesSize(TStrings * FileList, __int64 & Size,
  214. const TCopyParamType * CopyParam = NULL);
  215. TStrings * __fastcall GetAdditionalInfo();
  216. int __fastcall ConfirmFileOverwrite(const AnsiString FileName,
  217. const TOverwriteFileParams * FileParams, int Answers, const TQueryParams * Params,
  218. TOperationSide Side, TFileOperationProgressType * OperationProgress);
  219. void __fastcall DoSynchronizeCollectDirectory(const AnsiString LocalDirectory,
  220. const AnsiString RemoteDirectory, TSynchronizeMode Mode,
  221. const TCopyParamType * CopyParam, int Params,
  222. TSynchronizeDirectory OnSynchronizeDirectory,
  223. TSynchronizeOptions * Options, int Level, TSynchronizeChecklist * Checklist);
  224. void __fastcall SynchronizeCollectFile(const AnsiString FileName,
  225. const TRemoteFile * File, /*TSynchronizeData*/ void * Param);
  226. void __fastcall SynchronizeRemoteTimestamp(const AnsiString FileName,
  227. const TRemoteFile * File, void * Param);
  228. void __fastcall SynchronizeLocalTimestamp(const AnsiString FileName,
  229. const TRemoteFile * File, void * Param);
  230. void __fastcall DoSynchronizeProgress(const TSynchronizeData & Data, bool Collect);
  231. void __fastcall DeleteLocalFile(AnsiString FileName,
  232. const TRemoteFile * File, void * Param);
  233. void __fastcall RecycleFile(AnsiString FileName, const TRemoteFile * File);
  234. TStrings * __fastcall GetFixedPaths();
  235. void __fastcall DoStartup();
  236. virtual void __fastcall DoOpen();
  237. __property TFileOperationProgressType * OperationProgress = { read=FOperationProgress };
  238. public:
  239. __fastcall TTerminal();
  240. __fastcall ~TTerminal();
  241. virtual void __fastcall Close();
  242. virtual void __fastcall Reopen(int Params);
  243. virtual void __fastcall DirectoryModified(const AnsiString Path, bool SubDirs);
  244. virtual void __fastcall DirectoryLoaded(TRemoteFileList * FileList);
  245. virtual void __fastcall Idle();
  246. bool __fastcall AllowedAnyCommand(const AnsiString Command);
  247. void __fastcall AnyCommand(const AnsiString Command, TLogAddLineEvent OutputEvent);
  248. void __fastcall CloseOnCompletion(const AnsiString Message = "");
  249. AnsiString __fastcall AbsolutePath(AnsiString Path);
  250. void __fastcall BeginTransaction();
  251. void __fastcall ReadCurrentDirectory();
  252. void __fastcall ReadDirectory(bool ReloadOnly, bool ForceCache = false);
  253. TRemoteFileList * ReadDirectoryListing(AnsiString Directory, bool UseCache);
  254. void __fastcall ReadFile(const AnsiString FileName, TRemoteFile *& File);
  255. void __fastcall ReadSymlink(TRemoteFile * SymlinkFile, TRemoteFile *& File);
  256. bool __fastcall CopyToLocal(TStrings * FilesToCopy,
  257. const AnsiString TargetDir, const TCopyParamType * CopyParam, int Params);
  258. bool __fastcall CopyToRemote(TStrings * FilesToCopy,
  259. const AnsiString TargetDir, const TCopyParamType * CopyParam, int Params);
  260. void __fastcall CreateDirectory(const AnsiString DirName,
  261. const TRemoteProperties * Properties = NULL);
  262. void __fastcall CreateLink(const AnsiString FileName, const AnsiString PointTo, bool Symbolic);
  263. void __fastcall DeleteFile(AnsiString FileName,
  264. const TRemoteFile * File = NULL, void * Recursive = NULL);
  265. bool __fastcall DeleteFiles(TStrings * FilesToDelete, bool * Recursive = NULL);
  266. bool __fastcall DeleteLocalFiles(TStrings * FileList);
  267. bool __fastcall IsRecycledFile(AnsiString FileName);
  268. void __fastcall CustomCommandOnFile(AnsiString FileName,
  269. const TRemoteFile * File, void * AParams);
  270. void __fastcall CustomCommandOnFiles(AnsiString Command, int Params,
  271. TStrings * Files, TLogAddLineEvent OutputEvent);
  272. void __fastcall ChangeDirectory(const AnsiString Directory);
  273. void __fastcall EndTransaction();
  274. void __fastcall HomeDirectory();
  275. void __fastcall ChangeFileProperties(AnsiString FileName,
  276. const TRemoteFile * File, /*const TRemoteProperties */ void * Properties);
  277. void __fastcall ChangeFilesProperties(TStrings * FileList,
  278. const TRemoteProperties * Properties);
  279. bool __fastcall LoadFilesProperties(TStrings * FileList);
  280. void __fastcall TerminalError(AnsiString Msg);
  281. void __fastcall TerminalError(Exception * E, AnsiString Msg);
  282. void __fastcall ReloadDirectory();
  283. void __fastcall RefreshDirectory();
  284. void __fastcall RenameFile(const AnsiString FileName, const AnsiString NewName);
  285. void __fastcall RenameFile(const TRemoteFile * File, const AnsiString NewName, bool CheckExistence);
  286. void __fastcall MoveFile(const AnsiString FileName, const TRemoteFile * File,
  287. /*const TMoveFileParams*/ void * Param);
  288. bool __fastcall MoveFiles(TStrings * FileList, const AnsiString Target,
  289. const AnsiString FileMask);
  290. void __fastcall CopyFile(const AnsiString FileName, const TRemoteFile * File,
  291. /*const TMoveFileParams*/ void * Param);
  292. bool __fastcall CopyFiles(TStrings * FileList, const AnsiString Target,
  293. const AnsiString FileMask);
  294. void __fastcall CalculateFilesSize(TStrings * FileList, __int64 & Size,
  295. int Params, const TCopyParamType * CopyParam = NULL, TCalculateSizeStats * Stats = NULL);
  296. void __fastcall ClearCaches();
  297. TSynchronizeChecklist * __fastcall SynchronizeCollect(const AnsiString LocalDirectory,
  298. const AnsiString RemoteDirectory, TSynchronizeMode Mode,
  299. const TCopyParamType * CopyParam, int Params,
  300. TSynchronizeDirectory OnSynchronizeDirectory, TSynchronizeOptions * Options);
  301. void __fastcall SynchronizeApply(TSynchronizeChecklist * Checklist,
  302. const AnsiString LocalDirectory, const AnsiString RemoteDirectory,
  303. const TCopyParamType * CopyParam, int Params,
  304. TSynchronizeDirectory OnSynchronizeDirectory);
  305. void __fastcall SpaceAvailable(const AnsiString Path, TSpaceAvailable & ASpaceAvailable);
  306. void __fastcall FileSystemInfo(TFileSystemInfo & AFileSystemInfo);
  307. bool __fastcall DirectoryFileList(const AnsiString Path,
  308. TRemoteFileList *& FileList, bool CanLoad);
  309. void __fastcall MakeLocalFileList(const AnsiString FileName,
  310. const TSearchRec Rec, void * Param);
  311. AnsiString __fastcall FileUrl(const AnsiString FileName);
  312. bool __fastcall FileOperationLoopQuery(Exception & E,
  313. TFileOperationProgressType * OperationProgress, const AnsiString Message,
  314. bool AllowSkip, AnsiString SpecialRetry = "");
  315. TUsableCopyParamAttrs __fastcall UsableCopyParamAttrs(int Params);
  316. bool __fastcall QueryReopen(Exception * E, int Params,
  317. TFileOperationProgressType * OperationProgress);
  318. static bool __fastcall IsAbsolutePath(const AnsiString Path);
  319. static AnsiString __fastcall ExpandFileName(AnsiString Path,
  320. const AnsiString BasePath);
  321. __property AnsiString CurrentDirectory = { read = GetCurrentDirectory, write = SetCurrentDirectory };
  322. __property bool ExceptionOnFail = { read = GetExceptionOnFail, write = SetExceptionOnFail };
  323. __property TRemoteDirectory * Files = { read = FFiles };
  324. __property TNotifyEvent OnChangeDirectory = { read = FOnChangeDirectory, write = FOnChangeDirectory };
  325. __property TReadDirectoryEvent OnReadDirectory = { read = FOnReadDirectory, write = FOnReadDirectory };
  326. __property TDirectoryModifiedEvent OnDirectoryModified = { read = FOnDirectoryModified, write = FOnDirectoryModified };
  327. __property TNotifyEvent OnStartReadDirectory = { read = FOnStartReadDirectory, write = FOnStartReadDirectory };
  328. __property TReadDirectoryProgressEvent OnReadDirectoryProgress = { read = FOnReadDirectoryProgress, write = FOnReadDirectoryProgress };
  329. __property TDeleteLocalFileEvent OnDeleteLocalFile = { read = FOnDeleteLocalFile, write = FOnDeleteLocalFile };
  330. __property TUsersGroupsList * Groups = { read = GetGroups };
  331. __property TUsersGroupsList * Users = { read = GetUsers };
  332. __property TFileOperationProgressEvent OnProgress = { read=FOnProgress, write=FOnProgress };
  333. __property TFileOperationFinished OnFinished = { read=FOnFinished, write=FOnFinished };
  334. __property TCurrentFSProtocol FSProtocol = { read = FFSProtocol };
  335. __property AnsiString ProtocolName = { read = GetProtocolName };
  336. __property bool UseBusyCursor = { read = FUseBusyCursor, write = FUseBusyCursor };
  337. __property AnsiString UserName = { read=GetUserName };
  338. __property bool IsCapable[TFSCapability Capability] = { read = GetIsCapable };
  339. __property TStrings * AdditionalInfo = { read = GetAdditionalInfo };
  340. __property bool AreCachesEmpty = { read = GetAreCachesEmpty };
  341. __property bool CommandSessionOpened = { read = GetCommandSessionOpened };
  342. __property TTerminal * CommandSession = { read = GetCommandSession };
  343. __property bool AutoReadDirectory = { read = FAutoReadDirectory, write = FAutoReadDirectory };
  344. __property TStrings * FixedPaths = { read = GetFixedPaths };
  345. __property bool ResolvingSymlinks = { read = GetResolvingSymlinks };
  346. };
  347. //---------------------------------------------------------------------------
  348. class TSecondaryTerminal : public TTerminal
  349. {
  350. public:
  351. __fastcall TSecondaryTerminal(TTerminal * MainTerminal);
  352. protected:
  353. virtual void __fastcall DirectoryLoaded(TRemoteFileList * FileList);
  354. virtual void __fastcall DirectoryModified(const AnsiString Path,
  355. bool SubDirs);
  356. virtual bool __fastcall DoPromptUser(AnsiString Prompt, TPromptKind Kind,
  357. AnsiString & Response);
  358. virtual void __fastcall SetSessionData(TSessionData * value);
  359. private:
  360. bool FMasterPasswordTried;
  361. TTerminal * FMainTerminal;
  362. };
  363. //---------------------------------------------------------------------------
  364. class TTerminalList : public TObjectList
  365. {
  366. public:
  367. __fastcall TTerminalList(TConfiguration * AConfiguration);
  368. __fastcall ~TTerminalList();
  369. virtual TTerminal * __fastcall NewTerminal(TSessionData * Data);
  370. virtual void __fastcall FreeTerminal(TTerminal * Terminal);
  371. void __fastcall FreeAndNullTerminal(TTerminal * & Terminal);
  372. virtual void __fastcall Idle();
  373. __property TTerminal * Terminals[int Index] = { read=GetTerminal };
  374. __property int ActiveCount = { read = GetActiveCount };
  375. private:
  376. TConfiguration * FConfiguration;
  377. TTerminal * __fastcall GetTerminal(int Index);
  378. int __fastcall GetActiveCount();
  379. };
  380. //---------------------------------------------------------------------------
  381. struct TCustomCommandParams
  382. {
  383. AnsiString Command;
  384. int Params;
  385. TLogAddLineEvent OutputEvent;
  386. };
  387. //---------------------------------------------------------------------------
  388. struct TCalculateSizeStats
  389. {
  390. TCalculateSizeStats();
  391. int Files;
  392. int Directories;
  393. int SymLinks;
  394. };
  395. //---------------------------------------------------------------------------
  396. struct TCalculateSizeParams
  397. {
  398. __int64 Size;
  399. int Params;
  400. const TCopyParamType * CopyParam;
  401. TCalculateSizeStats * Stats;
  402. };
  403. //---------------------------------------------------------------------------
  404. struct TOverwriteFileParams
  405. {
  406. __int64 SourceSize;
  407. __int64 DestSize;
  408. TDateTime SourceTimestamp;
  409. TDateTime DestTimestamp;
  410. };
  411. //---------------------------------------------------------------------------
  412. struct TMakeLocalFileListParams
  413. {
  414. TStrings * FileList;
  415. bool IncludeDirs;
  416. bool Recursive;
  417. };
  418. //---------------------------------------------------------------------------
  419. struct TSynchronizeOptions
  420. {
  421. TSynchronizeOptions();
  422. ~TSynchronizeOptions();
  423. TStringList * Filter;
  424. };
  425. //---------------------------------------------------------------------------
  426. class TSynchronizeChecklist
  427. {
  428. friend class TTerminal;
  429. public:
  430. enum TAction { saNone, saUploadNew, saDownloadNew, saUploadUpdate,
  431. saDownloadUpdate, saDeleteRemote, saDeleteLocal };
  432. static const int ActionCount = saDeleteLocal;
  433. class TItem
  434. {
  435. friend class TTerminal;
  436. public:
  437. struct TFileInfo
  438. {
  439. AnsiString Directory;
  440. TDateTime Modification;
  441. TModificationFmt ModificationFmt;
  442. __int64 Size;
  443. };
  444. TAction Action;
  445. AnsiString FileName;
  446. bool IsDirectory;
  447. TFileInfo Local;
  448. TFileInfo Remote;
  449. int ImageIndex;
  450. bool Checked;
  451. ~TItem();
  452. private:
  453. TRemoteFile * FRemoteFile;
  454. FILETIME FLocalLastWriteTime;
  455. TItem();
  456. };
  457. ~TSynchronizeChecklist();
  458. __property int Count = { read = GetCount };
  459. __property const TItem * Item[int Index] = { read = GetItem };
  460. protected:
  461. TSynchronizeChecklist();
  462. void Sort();
  463. void Add(TItem * Item);
  464. int GetCount() const;
  465. const TItem * GetItem(int Index) const;
  466. private:
  467. TList * FList;
  468. static int __fastcall Compare(void * Item1, void * Item2);
  469. };
  470. //---------------------------------------------------------------------------
  471. struct TSpaceAvailable
  472. {
  473. TSpaceAvailable();
  474. __int64 BytesOnDevice;
  475. __int64 UnusedBytesOnDevice;
  476. __int64 BytesAvailableToUser;
  477. __int64 UnusedBytesAvailableToUser;
  478. unsigned long BytesPerAllocationUnit;
  479. };
  480. //---------------------------------------------------------------------------
  481. struct TFileSystemInfo
  482. {
  483. int SshVersion;
  484. AnsiString SshImplementation;
  485. TCipher CSCipher;
  486. TCipher SCCipher;
  487. TCompressionType CSCompression;
  488. TCompressionType SCCompression;
  489. AnsiString ProtocolName;
  490. AnsiString HostKeyFingerprint;
  491. AnsiString AdditionalInfo;
  492. bool IsCapable[fcCount];
  493. };
  494. //---------------------------------------------------------------------------
  495. #endif