Просмотр исходного кода

Bug 2011: Use Documents folder when the last used local directory in Explorer interface does not exist anymore

https://winscp.net/tracker/2011
(cherry picked from commit 6f7bfc25c2201c45e8609a23230d5052234eb7c7)

# Conflicts:
#	source/forms/CustomScpExplorer.h
#	source/forms/ScpCommander.h

Source commit: 34187d79c111047365d54103ddaffa7ed82f8d26
Martin Prikryl 4 лет назад
Родитель
Сommit
6afcf21ba4

+ 1 - 1
source/forms/CustomScpExplorer.h

@@ -653,7 +653,6 @@ protected:
   bool __fastcall SessionTabSwitched();
   void __fastcall RestoreApp();
   void __fastcall GoToQueue();
-  virtual UnicodeString __fastcall DefaultDownloadTargetDirectory() = 0;
   void __fastcall LockFiles(TStrings * FileList, bool Lock);
   void __fastcall SaveInternalEditor(
     const UnicodeString FileName, TEditedFileData * Data, TObject * Token,
@@ -745,6 +744,7 @@ public:
   void __fastcall SuspendWindowLock();
   void __fastcall ResumeWindowLock();
   bool __fastcall HasActiveTerminal();
+  virtual UnicodeString __fastcall DefaultDownloadTargetDirectory() = 0;
 
   void __fastcall NewSession(const UnicodeString & SessionUrl = L"");
   void __fastcall DuplicateSession();

+ 1 - 1
source/forms/ScpCommander.h

@@ -598,7 +598,6 @@ protected:
   virtual bool __fastcall EligibleForImageDisplayMode(TTBCustomItem * Item);
   virtual bool __fastcall UpdateToolbarDisplayMode();
   virtual void __fastcall QueueLabelUpdateStatus();
-  virtual UnicodeString __fastcall DefaultDownloadTargetDirectory();
   virtual void __fastcall StartingDisconnected();
   virtual void __fastcall UpdateImages();
   virtual void __fastcall FileColorsChanged();
@@ -628,6 +627,7 @@ public:
   virtual void __fastcall CopyFilesToClipboard(TOperationSide Side, bool OnFocused);
   virtual void __fastcall PasteFromClipBoard();
   virtual void __fastcall BrowseFile();
+  virtual UnicodeString __fastcall DefaultDownloadTargetDirectory();
 
   __property double LeftPanelWidth = { read = GetLeftPanelWidth, write = SetLeftPanelWidth };
 };

+ 6 - 1
source/forms/ScpExplorer.cpp

@@ -135,7 +135,12 @@ void __fastcall TScpExplorerForm::StoreParams()
 //---------------------------------------------------------------------------
 UnicodeString __fastcall TScpExplorerForm::DefaultDownloadTargetDirectory()
 {
-  return WinConfiguration->ScpExplorer.LastLocalTargetDirectory;
+  UnicodeString Result = WinConfiguration->ScpExplorer.LastLocalTargetDirectory;
+  if (!DirectoryExists(Result))
+  {
+    Result = GetPersonalFolder();
+  }
+  return Result;
 }
 //---------------------------------------------------------------------------
 void __fastcall TScpExplorerForm::CopyParamDialogAfter(

+ 1 - 1
source/forms/ScpExplorer.h

@@ -360,7 +360,6 @@ protected:
   UnicodeString __fastcall RemotePathComboBoxText();
   virtual void __fastcall ToolbarItemResize(TTBXCustomDropDownItem * Item, int Width);
   virtual bool __fastcall UpdateToolbarDisplayMode();
-  virtual UnicodeString __fastcall DefaultDownloadTargetDirectory();
   virtual void __fastcall UpdateImages();
 
 public:
@@ -371,6 +370,7 @@ public:
   virtual void __fastcall SynchronizeDirectories();
   virtual void __fastcall ChangePath(TOperationSide Side);
   virtual void __fastcall GoToAddress();
+  virtual UnicodeString __fastcall DefaultDownloadTargetDirectory();
 };
 //---------------------------------------------------------------------------
 #endif

+ 5 - 5
source/windows/WinMain.cpp

@@ -199,8 +199,8 @@ void __fastcall Edit(TCustomScpExplorerForm * ScpExplorer, TStrings * FileList)
   Abort();
 }
 //---------------------------------------------------------------------------
-void __fastcall SynchronizeDirectories(TTerminal * Terminal,
-  TStrings * CommandParams,
+void __fastcall SynchronizeDirectories(
+  TTerminal * Terminal, TCustomScpExplorerForm * ScpExplorer, TStrings * CommandParams,
   UnicodeString & LocalDirectory, UnicodeString & RemoteDirectory)
 {
   if (CommandParams->Count >= 1)
@@ -213,7 +213,7 @@ void __fastcall SynchronizeDirectories(TTerminal * Terminal,
   }
   else
   {
-    LocalDirectory = WinConfiguration->ScpExplorer.LastLocalTargetDirectory;
+    LocalDirectory = ScpExplorer->DefaultDownloadTargetDirectory();
   }
 
   if (CommandParams->Count >= 2)
@@ -232,7 +232,7 @@ void __fastcall FullSynchronize(
   UnicodeString LocalDirectory;
   UnicodeString RemoteDirectory;
 
-  SynchronizeDirectories(Terminal, CommandParams, LocalDirectory, RemoteDirectory);
+  SynchronizeDirectories(Terminal, ScpExplorer, CommandParams, LocalDirectory, RemoteDirectory);
 
   bool SaveMode = true;
   // bit ugly
@@ -262,7 +262,7 @@ void __fastcall Synchronize(
   UnicodeString LocalDirectory;
   UnicodeString RemoteDirectory;
 
-  SynchronizeDirectories(Terminal, CommandParams, LocalDirectory, RemoteDirectory);
+  SynchronizeDirectories(Terminal, ScpExplorer, CommandParams, LocalDirectory, RemoteDirectory);
 
   // Undocumented syntax for "Start in New Window"
   if (CommandParams->Count >= 4)