| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 | 
							- //---------------------------------------------------------------------------
 
- #ifndef TerminalManagerH
 
- #define TerminalManagerH
 
- //---------------------------------------------------------------------------
 
- #include <Terminal.h>
 
- #include <Queue.h>
 
- #include <FileOperationProgress.h>
 
- #include <WinInterface.h>
 
- #include <Vcl.AppEvnts.hpp>
 
- #include <deque>
 
- //---------------------------------------------------------------------------
 
- class TCustomScpExplorerForm;
 
- class TTerminalQueue;
 
- class TAuthenticateForm;
 
- struct ITaskbarList3;
 
- class TThumbnailDownloadQueueItem;
 
- //---------------------------------------------------------------------------
 
- enum TTerminalPendingAction { tpNull, tpNone, tpReconnect, tpFree };
 
- //---------------------------------------------------------------------------
 
- struct TRemoteThumbnailNeeded
 
- {
 
-   int Index;
 
-   TRemoteFile * File;
 
-   TSize ThumbnailSize;
 
- };
 
- //---------------------------------------------------------------------------
 
- struct TRemoteThumbnailData
 
- {
 
-   UnicodeString FileName;
 
-   TBitmap * Thumbnail;
 
-   TSize ThumbnailSize;
 
- };
 
- //---------------------------------------------------------------------------
 
- typedef std::map<int, TRemoteThumbnailData> TRemoteThumbnailsMap;
 
- typedef std::deque<TRemoteThumbnailNeeded> TRemoteThumbnailsQueue;
 
- //---------------------------------------------------------------------------
 
- class TManagedTerminal : public TTerminal
 
- {
 
- public:
 
-   __fastcall TManagedTerminal(TSessionData * SessionData, TConfiguration * Configuration);
 
-   virtual __fastcall ~TManagedTerminal();
 
-   void StartLoadingDirectory();
 
-   void DisableThumbnails();
 
-   void ThumbnailVisible(int Index, const UnicodeString & FileName, bool Visible);
 
-   void PopThumbnailQueue();
 
-   bool LocalBrowser;
 
-   TSessionData * StateData;
 
-   TObject * LocalExplorerState;
 
-   TObject * RemoteExplorerState;
 
-   TObject * OtherLocalExplorerState;
 
-   TDateTime ReopenStart;
 
-   TDateTime DirectoryLoaded;
 
-   TTerminalThread * TerminalThread;
 
-   TDateTime QueueOperationStart;
 
-   // To distinguish sessions that were explicitly disconnected and
 
-   // should not be reconnected when their tab is activated.
 
-   bool Disconnected;
 
-   bool DisconnectedTemporarily;
 
-   // Sessions that should not close when they fail to connect
 
-   // (i.e. those that were ever connected or were opened as a part of a workspace)
 
-   bool Permanent;
 
-   std::unique_ptr<TCriticalSection> ThumbnailsSection;
 
-   bool ThumbnailsEnabled;
 
-   TThumbnailDownloadQueueItem * ThumbnailDownloadQueueItem;
 
-   UnicodeString InactiveTerminationMessage;
 
-   TDateTime NextInactiveReconnect;
 
-   TDateTime LastInactiveSave;
 
-   UnicodeString OrigRemoteDirectory;
 
-   TRemoteThumbnailsMap Thumbnails;
 
-   TRemoteThumbnailsQueue ThumbnailsQueue;
 
-   int ThumbnailVisibleResult;
 
- private:
 
-   void ReleaseThumbnails();
 
- };
 
- //---------------------------------------------------------------------------
 
- class TTerminalManager : public TTerminalList
 
- {
 
- public:
 
-   static TTerminalManager * __fastcall Instance(bool ForceCreation = true);
 
-   static void __fastcall DestroyInstance();
 
-   __fastcall TTerminalManager();
 
-   __fastcall ~TTerminalManager();
 
-   TManagedTerminal * __fastcall NewManagedTerminal(TSessionData * Data);
 
-   TManagedTerminal * __fastcall NewLocalBrowser(
 
-     const UnicodeString & LocalDirectory = UnicodeString(), const UnicodeString & OtherLocalDirectory = UnicodeString());
 
-   TManagedTerminal * __fastcall NewSessions(TList * DataList);
 
-   virtual void __fastcall FreeTerminal(TTerminal * Terminal);
 
-   void __fastcall Move(TTerminal * Source, TTerminal * Target);
 
-   void __fastcall DisconnectActiveTerminalIfPermanentFreeOtherwise();
 
-   void __fastcall DisconnectActiveTerminal();
 
-   void __fastcall ReconnectActiveTerminal();
 
-   void __fastcall FreeActiveTerminal();
 
-   void __fastcall CycleTerminals(bool Forward);
 
-   bool __fastcall ConnectTerminal(TTerminal * Terminal);
 
-   void __fastcall SetActiveTerminalWithAutoReconnect(TManagedTerminal * value);
 
-   void __fastcall UpdateAppTitle();
 
-   bool __fastcall CanOpenInPutty();
 
-   void __fastcall OpenInPutty();
 
-   void __fastcall NewSession(
 
-     const UnicodeString & SessionUrl, bool ReloadSessions = true, TForm * LinkedForm = NULL, bool ReplaceExisting = false);
 
-   void NewLocalSession(const UnicodeString & LocalDirectory = UnicodeString(), const UnicodeString & OtherLocalDirectory = UnicodeString());
 
-   void __fastcall Idle(bool SkipCurrentTerminal);
 
-   UnicodeString __fastcall GetSessionTitle(TManagedTerminal * Terminal, bool Unique);
 
-   UnicodeString FormatTerminalNoteMessage(TManagedTerminal * Terminal, const UnicodeString & Message);
 
-   UnicodeString __fastcall GetActiveSessionAppTitle();
 
-   UnicodeString __fastcall GetAppProgressTitle();
 
-   UnicodeString __fastcall FormatFormCaptionWithSession(TCustomForm * Form, const UnicodeString & Caption);
 
-   void __fastcall HandleException(Exception * E);
 
-   void __fastcall SaveWorkspace(TList * DataList);
 
-   void __fastcall QueueStatusUpdated();
 
-   bool IsOpenedTerminal(TTerminal * Terminal);
 
-   bool IsReconnectingTerminal(TTerminal * Terminal);
 
-   bool IsAvailableTerminal(TTerminal * Terminal);
 
-   bool IsAvailableTerminalForSite(TTerminal * Terminal, TSessionData * Data);
 
-   TManagedTerminal * __fastcall FindActiveTerminalForSite(TSessionData * Data);
 
-   TTerminalQueue * __fastcall FindQueueForTerminal(TTerminal * Terminal);
 
-   bool __fastcall UploadPublicKey(TTerminal * Terminal, TSessionData * Data, UnicodeString & FileName);
 
-   UnicodeString GetPathForSessionTabName(const UnicodeString & Result);
 
-   bool HookFatalExceptionMessageDialog(TMessageParams & Params);
 
-   void UnhookFatalExceptionMessageDialog();
 
-   bool ScheduleTerminalReconnnect(TTerminal * Terminal);
 
-   TBitmap * ThumbnailNeeded(TManagedTerminal * Terminal, int Index, TRemoteFile * File, const TSize & Size);
 
-   void TerminalLoadedDirectory(TManagedTerminal * ATerminal);
 
-   __property TCustomScpExplorerForm * ScpExplorer = { read = FScpExplorer, write = SetScpExplorer };
 
-   __property TManagedTerminal * ActiveSession = { read = FActiveSession, write = SetActiveSession };
 
-   __property TManagedTerminal * ActiveTerminal = { read = GetActiveTerminal };
 
-   __property TTerminalQueue * ActiveQueue = { read = GetActiveQueue };
 
-   __property int ActiveSessionIndex = { read = GetActiveSessionIndex, write = SetActiveSessionIndex };
 
-   __property TStrings * SessionList = { read = GetSessionList };
 
-   __property TTerminal * LocalTerminal = { read = FLocalTerminal };
 
-   __property TManagedTerminal * Sessions[int Index]  = { read = GetSession };
 
-   __property bool Updating = { read = IsUpdating };
 
-   __property TManagedTerminal * ReconnectingInactiveTerminal = { read = FReconnectingInactiveTerminal };
 
- protected:
 
-   virtual TTerminal * __fastcall CreateTerminal(TSessionData * Data);
 
-   void __fastcall DoConnectTerminal(TTerminal * Terminal, bool Reopen, bool AdHoc);
 
-   virtual TTerminal * __fastcall NewTerminal(TSessionData * Data);
 
- private:
 
-   static TTerminalManager * FInstance;
 
-   TCustomScpExplorerForm * FScpExplorer;
 
-   TManagedTerminal * FActiveSession;
 
-   TManagedTerminal * FTerminalWithFatalExceptionTimer;
 
-   bool FTerminalReconnnecteScheduled;
 
-   TTerminal * FLocalTerminal;
 
-   bool FDestroying;
 
-   TTerminalPendingAction FTerminalPendingAction;
 
-   TStrings * FSessionList;
 
-   TList * FQueues;
 
-   UnicodeString FProgressTitle;
 
-   UnicodeString FForegroundProgressTitle;
 
-   TDateTime FDirectoryReadingStart;
 
-   TAuthenticateForm * FAuthenticateForm;
 
-   TCriticalSection * FQueueSection;
 
-   DWORD FMainThread;
 
-   int FPendingConfigurationChange;
 
-   std::unique_ptr<TCriticalSection> FChangeSection;
 
-   std::vector<std::pair<TTerminalQueue *, TQueueEvent> > FQueueEvents;
 
-   unsigned int FTaskbarButtonCreatedMessage;
 
-   ITaskbarList3 * FTaskbarList;
 
-   int FAuthenticating;
 
-   void * FBusyToken;
 
-   bool FAuthenticationCancelled;
 
-   std::unique_ptr<TApplicationEvents> FApplicationsEvents;
 
-   bool FKeepAuthenticateForm;
 
-   int FUpdating;
 
-   int FMaxSessions;
 
-   TTerminal * FOpeningTerminal;
 
-   TManagedTerminal * FReconnectingInactiveTerminal;
 
-   UnicodeString FReconnectingNote;
 
-   bool __fastcall ConnectActiveTerminalImpl(bool Reopen);
 
-   bool __fastcall ConnectActiveTerminal();
 
-   TTerminalQueue * __fastcall NewQueue(TTerminal * Terminal);
 
-   void __fastcall SetScpExplorer(TCustomScpExplorerForm * value);
 
-   void UpdateScpExplorer();
 
-   void UpdateScpExplorer(TManagedTerminal * Session, TTerminalQueue * Queue);
 
-   void __fastcall DoSetActiveSession(TManagedTerminal * value, bool AutoReconnect, bool LastTerminalClosed);
 
-   void __fastcall SetActiveSession(TManagedTerminal * value);
 
-   TManagedTerminal * GetActiveTerminal();
 
-   void __fastcall UpdateAll();
 
-   void __fastcall ApplicationException(TObject * Sender, Exception * E);
 
-   void __fastcall ApplicationShowHint(UnicodeString & HintStr, bool & CanShow,
 
-     THintInfo & HintInfo);
 
-   void __fastcall ApplicationMessage(TMsg & Msg, bool & Handled);
 
-   void __fastcall ConfigurationChange(TObject * Sender);
 
-   void __fastcall TerminalUpdateStatus(TTerminal * Terminal, bool Active);
 
-   void __fastcall TerminalQueryUser(TObject * Sender,
 
-     const UnicodeString Query, TStrings * MoreMessages, unsigned int Answers,
 
-     const TQueryParams * Params, unsigned int & Answer, TQueryType Type, void * Arg);
 
-   void __fastcall TerminalPromptUser(TTerminal * Terminal,
 
-     TPromptKind Kind, UnicodeString Name, UnicodeString Instructions, TStrings * Prompt,
 
-     TStrings * Results, bool & Result, void * Arg);
 
-   void __fastcall TerminalDisplayBanner(TTerminal * Terminal,
 
-     UnicodeString SessionName, const UnicodeString & Banner, bool & NeverShowAgain,
 
-     int Options, unsigned int & Params);
 
-   void __fastcall TerminalShowExtendedException(TTerminal * Terminal,
 
-     Exception * E, void * Arg);
 
-   void __fastcall TerminalReadDirectoryProgress(TObject * Sender, int Progress,
 
-     int ResolvedLinks, bool & Cancel);
 
-   void __fastcall TerminalInformation(
 
-     TTerminal * Terminal, const UnicodeString & Str, int Phase, const UnicodeString & Additional);
 
-   void __fastcall TerminalCustomCommand(TTerminal * Terminal, const UnicodeString & Command, bool & Handled);
 
-   void __fastcall FreeAll();
 
-   void __fastcall SessionReady();
 
-   TStrings * __fastcall GetSessionList();
 
-   int __fastcall GetActiveSessionIndex();
 
-   TTerminalQueue * __fastcall GetActiveQueue();
 
-   void __fastcall SaveTerminal(TTerminal * Terminal);
 
-   void __fastcall SetActiveSessionIndex(int value);
 
-   void __fastcall OperationFinished(::TFileOperation Operation, TOperationSide Side,
 
-     bool Temp, const UnicodeString & FileName, bool Success, bool NotCancelled,
 
-     TOnceDoneOperation & OnceDoneOperation);
 
-   void __fastcall OperationProgress(TFileOperationProgressType & ProgressData);
 
-   void __fastcall DeleteLocalFile(const UnicodeString FileName, bool Alternative, int & Deleted);
 
-   void __fastcall QueueEvent(TTerminalQueue * Queue, TQueueEvent Event);
 
-   TAuthenticateForm * __fastcall MakeAuthenticateForm(TTerminal * Terminal);
 
-   void __fastcall MasterPasswordPrompt();
 
-   void __fastcall FileNameInputDialogInitializeRenameBaseName(
 
-     TObject * Sender, TInputDialogData * Data);
 
-   void __fastcall InitTaskbarButtonCreatedMessage();
 
-   void __fastcall ReleaseTaskbarList();
 
-   void __fastcall CreateTaskbarList();
 
-   void __fastcall UpdateTaskbarList();
 
-   void __fastcall AuthenticateFormCancel(TObject * Sender);
 
-   void __fastcall DoSessionListChanged();
 
-   TManagedTerminal * __fastcall DoNewSession(TSessionData * Data);
 
-   static void __fastcall TerminalThreadIdle(void * Data, TObject * Sender);
 
-   void __fastcall SetQueueConfiguration(TTerminalQueue * Queue);
 
-   void __fastcall ApplicationModalBegin(TObject * Sender);
 
-   void __fastcall ApplicationModalEnd(TObject * Sender);
 
-   bool __fastcall HandleMouseWheel(WPARAM WParam, LPARAM LParam);
 
-   void __fastcall DoConfigurationChange();
 
-   bool __fastcall ShouldDisplayQueueStatusOnAppTitle();
 
-   void __fastcall SetupTerminal(TTerminal * Terminal);
 
-   void __fastcall CloseAutheticateForm();
 
-   void __fastcall AuthenticatingDone();
 
-   TManagedTerminal * __fastcall CreateManagedTerminal(TSessionData * Data);
 
-   TManagedTerminal * __fastcall GetSession(int Index);
 
-   bool IsUpdating();
 
-   bool SupportedSession(TSessionData * Data);
 
-   void __fastcall TerminalFatalExceptionTimer(unsigned int & Result);
 
-   void NeedThumbnailDownloadQueueItem(TManagedTerminal * ATerminal);
 
-   void StartInactiveTerminalReconnect(TManagedTerminal * Terminal);
 
-   void CheckInactiveTerminalReconnect();
 
-   TTerminalThread * CreateTerminalThread(TTerminal * Terminal);
 
-   void ReconnectingTerminal(TManagedTerminal * ManagedTerminal);
 
-   void ReconnectedTerminal(TManagedTerminal * ManagedTerminal);
 
-   void FreeTerminalCleanup(TTerminal * ATerminal, bool IsActiveSession);
 
- };
 
- //---------------------------------------------------------------------------
 
- class TThumbnailDownloadQueueItem : public TTransferQueueItem
 
- {
 
- public:
 
-   TThumbnailDownloadQueueItem(
 
-     TCustomScpExplorerForm * ScpExplorer, TManagedTerminal * Terminal, const UnicodeString & SourceDir,
 
-     const UnicodeString & TargetDir, const TCopyParamType * CopyParam);
 
-   __fastcall ~TThumbnailDownloadQueueItem();
 
- protected:
 
-   virtual void __fastcall DoTransferExecute(TTerminal * Terminal, TParallelOperation * ParallelOperation);
 
- private:
 
-   TManagedTerminal * FManagedTerminal;
 
-   TCustomScpExplorerForm * FScpExplorer;
 
-   bool Continue();
 
-   bool CheckQueueFront(int Index, const UnicodeString & FileName, TSize ThumbnailSize);
 
- };
 
- //---------------------------------------------------------------------------
 
- #endif
 
 
  |