1
0
mirror of https://github.com/winscp/winscp.git synced 2026-10-24 02:28:55 +03:00

Switch /defaults accepts an optional delay in seconds to start the operation

Source commit: 312b3a3d9921c60a25172d756ae72949f1182766
This commit is contained in:
Martin Prikryl
2019-08-21 15:16:42 +00:00
parent 9db8397190
commit f2873a7c27
11 changed files with 74 additions and 44 deletions

View File

@@ -21,10 +21,10 @@
#pragma resource "*.dfm"
#endif
//---------------------------------------------------------------------------
bool __fastcall DoCopyDialog(bool ToRemote,
bool Move, TStrings * FileList, UnicodeString & TargetDirectory,
bool __fastcall DoCopyDialog(
bool ToRemote, bool Move, TStrings * FileList, UnicodeString & TargetDirectory,
TGUICopyParamType * Params, int Options, int CopyParamAttrs, TSessionData * SessionData,
int * OutputOptions)
int * OutputOptions, int AutoSubmit)
{
bool Result;
TCopyDialog *CopyDialog = new TCopyDialog(Application, ToRemote, Move, FileList, Options, CopyParamAttrs, SessionData);
@@ -42,6 +42,10 @@ bool __fastcall DoCopyDialog(bool ToRemote,
}
CopyDialog->Directory = TargetDirectory;
CopyDialog->Params = *Params;
if (AutoSubmit > 0)
{
InitiateDialogTimeout(CopyDialog, AutoSubmit * MSecsPerSec, CopyDialog->OkButton);
}
Result = CopyDialog->Execute();
if (Result)
{

View File

@@ -1125,7 +1125,7 @@ bool __fastcall TCustomScpExplorerForm::CopyParamDialog(
std::unique_ptr<TSessionData> SessionData(SessionDataForCode());
FlashOnBackground(); // Particularly when called from ClipboardFakeCreated
Result = DoCopyDialog(Direction == tdToRemote, Type == ttMove,
FileList, TargetDirectory, &CopyParam, Options, CopyParamAttrs, SessionData.get(), &OutputOptions);
FileList, TargetDirectory, &CopyParam, Options, CopyParamAttrs, SessionData.get(), &OutputOptions, -1);
if (Result)
{
@@ -5267,7 +5267,7 @@ void __fastcall TCustomScpExplorerForm::SynchronizeDirectories()
}
//---------------------------------------------------------------------------
bool __fastcall TCustomScpExplorerForm::DoSynchronizeDirectories(
UnicodeString & LocalDirectory, UnicodeString & RemoteDirectory, bool UseDefaults)
UnicodeString & LocalDirectory, UnicodeString & RemoteDirectory, int UseDefaults)
{
TSynchronizeParamType Params;
Params.LocalDirectory = LocalDirectory;
@@ -5744,7 +5744,7 @@ void __fastcall TCustomScpExplorerForm::FullSynchronizeInNewWindow(
//---------------------------------------------------------------------------
int __fastcall TCustomScpExplorerForm::DoFullSynchronizeDirectories(
UnicodeString & LocalDirectory, UnicodeString & RemoteDirectory,
TSynchronizeMode & Mode, int Params, bool & SaveMode, bool UseDefaults)
TSynchronizeMode & Mode, int Params, bool & SaveMode, int UseDefaults)
{
int Result;
@@ -5755,9 +5755,9 @@ int __fastcall TCustomScpExplorerForm::DoFullSynchronizeDirectories(
TCopyParamType CopyParam = GUIConfiguration->CurrentCopyParam;
TUsableCopyParamAttrs CopyParamAttrs = Terminal->UsableCopyParamAttrs(0);
bool Continue =
UseDefaults ||
(UseDefaults == 0) ||
DoFullSynchronizeDialog(Mode, Params, LocalDirectory, RemoteDirectory,
&CopyParam, SaveSettings, SaveMode, Options, CopyParamAttrs, FullSynchronizeInNewWindow);
&CopyParam, SaveSettings, SaveMode, Options, CopyParamAttrs, FullSynchronizeInNewWindow, UseDefaults);
if (Continue)
{
Configuration->Usage->Inc(L"Synchronizations");

View File

@@ -774,11 +774,11 @@ public:
void __fastcall TerminalReady();
void __fastcall QueueEvent(TManagedTerminal * Terminal, TTerminalQueue * Queue, TQueueEvent Event);
void __fastcall QueueEmptyNoteClicked(TObject * Sender);
bool __fastcall DoSynchronizeDirectories(UnicodeString & LocalDirectory,
UnicodeString & RemoteDirectory, bool UseDefaults);
int __fastcall DoFullSynchronizeDirectories(UnicodeString & LocalDirectory,
UnicodeString & RemoteDirectory, TSynchronizeMode & Mode, int Params, bool & SaveMode,
bool UseDefaults);
bool __fastcall DoSynchronizeDirectories(
UnicodeString & LocalDirectory, UnicodeString & RemoteDirectory, int UseDefaults);
int __fastcall DoFullSynchronizeDirectories(
UnicodeString & LocalDirectory, UnicodeString & RemoteDirectory, TSynchronizeMode & Mode,
int Params, bool & SaveMode, int UseDefaults);
void __fastcall StandaloneEdit(const UnicodeString & FileName);
bool __fastcall CanPasteFromClipBoard();
virtual void __fastcall PasteFromClipBoard();

View File

@@ -27,7 +27,8 @@
bool __fastcall DoFullSynchronizeDialog(TSynchronizeMode & Mode, int & Params,
UnicodeString & LocalDirectory, UnicodeString & RemoteDirectory,
TCopyParamType * CopyParams, bool & SaveSettings, bool & SaveMode, int Options,
const TUsableCopyParamAttrs & CopyParamAttrs, TFullSynchronizeInNewWindow OnFullSynchronizeInNewWindow)
const TUsableCopyParamAttrs & CopyParamAttrs, TFullSynchronizeInNewWindow OnFullSynchronizeInNewWindow,
int AutoSubmit)
{
bool Result;
TFullSynchronizeDialog * Dialog = SafeFormCreate<TFullSynchronizeDialog>();
@@ -41,6 +42,10 @@ bool __fastcall DoFullSynchronizeDialog(TSynchronizeMode & Mode, int & Params,
Dialog->CopyParams = *CopyParams;
Dialog->SaveSettings = SaveSettings;
Dialog->SaveMode = SaveMode;
if (AutoSubmit > 0)
{
InitiateDialogTimeout(Dialog, AutoSubmit * MSecsPerSec, Dialog->OkButton);
}
Result = Dialog->Execute();
if (Result)
{

View File

@@ -1007,7 +1007,7 @@ void __fastcall TScpCommanderForm::SynchronizeDirectories()
{
UnicodeString LocalDirectory = LocalDirView->PathName;
UnicodeString RemoteDirectory = RemoteDirView->PathName;
DoSynchronizeDirectories(LocalDirectory, RemoteDirectory, false);
DoSynchronizeDirectories(LocalDirectory, RemoteDirectory, -1);
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::FullSynchronizeDirectories()

View File

@@ -227,7 +227,7 @@ void __fastcall TScpExplorerForm::SynchronizeDirectories()
{
UnicodeString LocalDirectory = WinConfiguration->ScpExplorer.LastLocalTargetDirectory;
UnicodeString RemoteDirectory = RemoteDirView->PathName;
if (DoSynchronizeDirectories(LocalDirectory, RemoteDirectory, false))
if (DoSynchronizeDirectories(LocalDirectory, RemoteDirectory, -1))
{
WinConfiguration->ScpExplorer.LastLocalTargetDirectory = LocalDirectory;
}

View File

@@ -35,12 +35,12 @@ bool __fastcall DoSynchronizeDialog(TSynchronizeParamType & Params,
TSynchronizeSessionLog OnSynchronizeSessionLog,
TFeedSynchronizeError & OnFeedSynchronizeError,
TSynchronizeInNewWindow OnSynchronizeInNewWindow,
bool Start)
int AutoSubmit)
{
bool Result;
TSynchronizeDialog * Dialog = SafeFormCreate<TSynchronizeDialog>(Application);
Dialog->Init(OnStartStop, OnGetOptions, OnSynchronizeSessionLog, OnFeedSynchronizeError, OnSynchronizeInNewWindow, Start);
Dialog->Init(OnStartStop, OnGetOptions, OnSynchronizeSessionLog, OnFeedSynchronizeError, OnSynchronizeInNewWindow, AutoSubmit);
try
{
@@ -97,7 +97,7 @@ void __fastcall TSynchronizeDialog::Init(TSynchronizeStartStopEvent OnStartStop,
TSynchronizeSessionLog OnSynchronizeSessionLog,
TFeedSynchronizeError & OnFeedSynchronizeError,
TSynchronizeInNewWindow OnSynchronizeInNewWindow,
bool StartImmediately)
int AutoSubmit)
{
FOnStartStop = OnStartStop;
FOnGetOptions = OnGetOptions;
@@ -105,7 +105,19 @@ void __fastcall TSynchronizeDialog::Init(TSynchronizeStartStopEvent OnStartStop,
FOnFeedSynchronizeError = &OnFeedSynchronizeError;
DebugAssert(OnSynchronizeInNewWindow != NULL);
FOnSynchronizeInNewWindow = OnSynchronizeInNewWindow;
FStartImmediately = StartImmediately;
if (AutoSubmit == 0)
{
FStartImmediately = true;
}
else
{
FStartImmediately = false;
if (AutoSubmit > 0)
{
InitiateDialogTimeout(this, AutoSubmit * MSecsPerSec, StartButton);
}
}
}
//---------------------------------------------------------------------------
__fastcall TSynchronizeDialog::~TSynchronizeDialog()

View File

@@ -142,7 +142,7 @@ public:
TGetSynchronizeOptionsEvent OnGetOptions,
TSynchronizeSessionLog OnSynchronizeSessionLog,
TFeedSynchronizeError & OnFeedSynchronizeError, TSynchronizeInNewWindow OnSynchronizeInNewWindow,
bool StartImmediately);
int AutoSubmit);
virtual __fastcall ~TSynchronizeDialog();
bool __fastcall Execute();

View File

@@ -407,7 +407,9 @@ void __fastcall TMessageTimeout::DoTimer(TObject * /*Sender*/)
TForm * Dialog = dynamic_cast<TForm *>(FButton->Parent);
DebugAssert(Dialog != NULL);
Dialog->ModalResult = FButton->ModalResult;
// Needed particularly for "keep up to date" dialog, which does not close on the button click
Enabled = false;
FButton->Click();
}
else
{
@@ -415,6 +417,13 @@ void __fastcall TMessageTimeout::DoTimer(TObject * /*Sender*/)
UpdateButton();
}
}
//---------------------------------------------------------------------------
void InitiateDialogTimeout(TForm * Dialog, unsigned int Timeout, TButton * Button)
{
TMessageTimeout * MessageTimeout = new TMessageTimeout(Application, Timeout, Button);
MessageTimeout->Name = L"MessageTimeout";
Dialog->InsertComponent(MessageTimeout);
}
//---------------------------------------------------------------------
class TPublicControl : public TControl
{
@@ -464,9 +473,7 @@ TForm * __fastcall CreateMoreMessageDialogEx(const UnicodeString Message, TStrin
{
if (Params->Timeout > 0)
{
TMessageTimeout * Timeout = new TMessageTimeout(Application, Params->Timeout, TimeoutButton);
Timeout->Name = L"MessageTimeout";
Dialog->InsertComponent(Timeout);
InitiateDialogTimeout(Dialog.get(), Params->Timeout, TimeoutButton);
}
}

View File

@@ -112,6 +112,8 @@ Tbx::TTBXSeparatorItem * __fastcall AddMenuSeparator(Tb2item::TTBCustomItem * Me
void __fastcall AddMenuLabel(Tb2item::TTBCustomItem * Menu, const UnicodeString & Label);
void __fastcall ClickToolbarItem(Tb2item::TTBCustomItem * Item, bool PositionCursor);
void InitiateDialogTimeout(TForm * Dialog, unsigned int Timeout, TButton * Button);
// windows\WinHelp.cpp
void __fastcall InitializeWinHelp();
void __fastcall FinalizeWinHelp();
@@ -211,10 +213,10 @@ const coAllFiles = 0x1000;
const cooDoNotShowAgain = 0x01;
const cooRemoteTransfer = 0x02;
const cooSaveSettings = 0x04;
bool __fastcall DoCopyDialog(bool ToRemote,
bool Move, TStrings * FileList, UnicodeString & TargetDirectory,
bool __fastcall DoCopyDialog(
bool ToRemote, bool Move, TStrings * FileList, UnicodeString & TargetDirectory,
TGUICopyParamType * Params, int Options, int CopyParamAttrs,
TSessionData * SessionData, int * OutputOptions);
TSessionData * SessionData, int * OutputOptions, int AutoSubmit);
// forms\CreateDirectory.cpp
bool __fastcall DoCreateDirectoryDialog(UnicodeString & Directory,
@@ -336,7 +338,7 @@ bool __fastcall DoSynchronizeDialog(TSynchronizeParamType & Params,
TSynchronizeSessionLog OnSynchronizeSessionLog,
TFeedSynchronizeError & OnFeedSynchronizeError,
TSynchronizeInNewWindow OnSynchronizeInNewWindow,
bool Start);
int AutoSubmit);
// forms\FullSynchronize.cpp
struct TUsableCopyParamAttrs;
@@ -351,7 +353,7 @@ bool __fastcall DoFullSynchronizeDialog(TSynchronizeMode & Mode, int & Params,
UnicodeString & LocalDirectory, UnicodeString & RemoteDirectory,
TCopyParamType * CopyParams, bool & SaveSettings, bool & SaveMode,
int Options, const TUsableCopyParamAttrs & CopyParamAttrs,
TFullSynchronizeInNewWindow OnFullSynchronizeInNewWindow);
TFullSynchronizeInNewWindow OnFullSynchronizeInNewWindow, int AutoSubmit);
// forms\SynchronizeChecklist.cpp
class TSynchronizeChecklist;

View File

@@ -92,7 +92,7 @@ void __fastcall GetLoginData(UnicodeString SessionName, TOptions * Options,
}
}
//---------------------------------------------------------------------------
void __fastcall Upload(TTerminal * Terminal, TStrings * FileList, bool UseDefaults)
void __fastcall Upload(TTerminal * Terminal, TStrings * FileList, int UseDefaults)
{
UnicodeString TargetDirectory;
TGUICopyParamType CopyParam = GUIConfiguration->DefaultCopyParam;
@@ -104,9 +104,9 @@ void __fastcall Upload(TTerminal * Terminal, TStrings * FileList, bool UseDefaul
int Options = coDisableQueue;
int CopyParamAttrs = Terminal->UsableCopyParamAttrs(0).Upload;
if (UseDefaults ||
if ((UseDefaults == 0) ||
DoCopyDialog(true, false, FileList, TargetDirectory, &CopyParam, Options,
CopyParamAttrs, Data.get(), NULL))
CopyParamAttrs, Data.get(), NULL, UseDefaults))
{
// Setting parameter overrides only now, otherwise the dialog would present the parametes as non-default
CopyParam.OnceDoneOperation = odoDisconnect;
@@ -115,8 +115,7 @@ void __fastcall Upload(TTerminal * Terminal, TStrings * FileList, bool UseDefaul
}
}
//---------------------------------------------------------------------------
void __fastcall Download(TTerminal * Terminal, const UnicodeString FileName,
bool UseDefaults)
void __fastcall Download(TTerminal * Terminal, const UnicodeString FileName, int UseDefaults)
{
TRemoteFile * File = NULL;
@@ -156,9 +155,9 @@ void __fastcall Download(TTerminal * Terminal, const UnicodeString FileName,
int Options = coDisableQueue;
int CopyParamAttrs = Terminal->UsableCopyParamAttrs(0).Download;
if (UseDefaults ||
if ((UseDefaults == 0) ||
DoCopyDialog(false, false, FileListFriendly.get(), TargetDirectory, &CopyParam,
Options, CopyParamAttrs, NULL, NULL))
Options, CopyParamAttrs, NULL, NULL, UseDefaults))
{
// Setting parameter overrides only now, otherwise the dialog would present the parametes as non-default
@@ -219,8 +218,8 @@ void __fastcall SynchronizeDirectories(TTerminal * Terminal,
}
}
//---------------------------------------------------------------------------
void __fastcall FullSynchronize(TTerminal * Terminal, TCustomScpExplorerForm * ScpExplorer,
TStrings * CommandParams, bool UseDefaults)
void __fastcall FullSynchronize(
TTerminal * Terminal, TCustomScpExplorerForm * ScpExplorer, TStrings * CommandParams, int UseDefaults)
{
UnicodeString LocalDirectory;
UnicodeString RemoteDirectory;
@@ -249,8 +248,8 @@ void __fastcall FullSynchronize(TTerminal * Terminal, TCustomScpExplorerForm * S
Abort();
}
//---------------------------------------------------------------------------
void __fastcall Synchronize(TTerminal * Terminal, TCustomScpExplorerForm * ScpExplorer,
TStrings * CommandParams, bool UseDefaults)
void __fastcall Synchronize(
TTerminal * Terminal, TCustomScpExplorerForm * ScpExplorer, TStrings * CommandParams, int UseDefaults)
{
UnicodeString LocalDirectory;
UnicodeString RemoteDirectory;
@@ -961,7 +960,7 @@ int __fastcall Execute()
ParamCommand = pcNone;
UnicodeString AutoStartSession;
UnicodeString DownloadFile;
bool UseDefaults = false;
int UseDefaults = -1;
// do not check for temp dirs for service tasks (like RegisterAsUrlHandler)
if (OnlyInstance &&
@@ -978,9 +977,10 @@ int __fastcall Execute()
if (!Params->Empty)
{
if (Params->FindSwitch(DEFAULTS_SWITCH) && CheckSafe(Params))
UnicodeString Value;
if (Params->FindSwitch(DEFAULTS_SWITCH, Value) && CheckSafe(Params))
{
UseDefaults = true;
UseDefaults = StrToIntDef(Value, 0);
}
if (Params->FindSwitch(UPLOAD_SWITCH, CommandParams))