Bläddra i källkod

Bug 150: Resolve local environment variables in initial session local path

https://winscp.net/tracker/150

Source commit: c1f9f2032c2a82e6d23d27c0bfcca0af5a95b488
Martin Prikryl 6 år sedan
förälder
incheckning
f500b385aa

+ 1 - 1
source/core/Script.cpp

@@ -2736,7 +2736,7 @@ void __fastcall TManagementScript::Connect(const UnicodeString Session,
         {
           try
           {
-            DoChangeLocalDirectory(ExpandFileName(Data->LocalDirectory));
+            DoChangeLocalDirectory(Data->LocalDirectoryExpanded);
           }
           catch(Exception & E)
           {

+ 5 - 0
source/core/SessionData.cpp

@@ -3570,6 +3570,11 @@ void __fastcall TSessionData::SetLocalDirectory(UnicodeString value)
   SET_SESSION_PROPERTY(LocalDirectory);
 }
 //---------------------------------------------------------------------
+UnicodeString __fastcall TSessionData::GetLocalDirectoryExpanded()
+{
+  return ExpandFileName(::ExpandEnvironmentVariables(LocalDirectory));
+}
+//---------------------------------------------------------------------
 void __fastcall TSessionData::SetRemoteDirectory(UnicodeString value)
 {
   SET_SESSION_PROPERTY(RemoteDirectory);

+ 2 - 0
source/core/SessionData.h

@@ -288,6 +288,7 @@ private:
   void __fastcall SetFSProtocol(TFSProtocol value);
   UnicodeString __fastcall GetFSProtocolStr();
   void __fastcall SetLocalDirectory(UnicodeString value);
+  UnicodeString __fastcall GetLocalDirectoryExpanded();
   void __fastcall SetRemoteDirectory(UnicodeString value);
   void __fastcall SetSynchronizeBrowsing(bool value);
   void __fastcall SetUpdateDirectories(bool value);
@@ -558,6 +559,7 @@ public:
   __property UnicodeString SessionName  = { read=GetSessionName };
   __property UnicodeString DefaultSessionName  = { read=GetDefaultSessionName };
   __property UnicodeString LocalDirectory  = { read=FLocalDirectory, write=SetLocalDirectory };
+  __property UnicodeString LocalDirectoryExpanded = { read = GetLocalDirectoryExpanded };
   __property UnicodeString RemoteDirectory  = { read=FRemoteDirectory, write=SetRemoteDirectory };
   __property bool SynchronizeBrowsing = { read=FSynchronizeBrowsing, write=SetSynchronizeBrowsing };
   __property bool UpdateDirectories = { read=FUpdateDirectories, write=SetUpdateDirectories };

+ 2 - 2
source/forms/ScpCommander.cpp

@@ -560,7 +560,7 @@ void __fastcall TScpCommanderForm::TerminalChanged(bool Replaced)
     if (WinConfiguration->DefaultDirIsHome &&
         !Terminal->SessionData->UpdateDirectories)
     {
-      LocalDirView->HomeDirectory = ExpandFileName(Terminal->SessionData->LocalDirectory);
+      LocalDirView->HomeDirectory = Terminal->SessionData->LocalDirectoryExpanded;
     }
 
     if (WinConfiguration->PreservePanelState &&
@@ -617,7 +617,7 @@ void __fastcall TScpCommanderForm::ConfigurationChanged()
   if (WinConfiguration->DefaultDirIsHome && Terminal &&
       !Terminal->SessionData->UpdateDirectories)
   {
-    LocalDirView->HomeDirectory = ExpandFileName(Terminal->SessionData->LocalDirectory);
+    LocalDirView->HomeDirectory = Terminal->SessionData->LocalDirectoryExpanded;
   }
   else
   {

+ 1 - 1
source/windows/TerminalManager.cpp

@@ -35,7 +35,7 @@ __fastcall TManagedTerminal::TManagedTerminal(TSessionData * SessionData,
 {
   StateData = new TSessionData(L"");
   StateData->Assign(SessionData);
-  StateData->LocalDirectory = ::ExpandFileName(StateData->LocalDirectory);
+  StateData->LocalDirectory = StateData->LocalDirectoryExpanded;
 }
 //---------------------------------------------------------------------------
 __fastcall TManagedTerminal::~TManagedTerminal()

+ 2 - 2
source/windows/WinMain.cpp

@@ -131,7 +131,7 @@ void __fastcall Download(TTerminal * Terminal, const UnicodeString FileName, int
       Terminal->ExceptionOnFail = false;
     }
     File->FullFileName = FileName;
-    UnicodeString LocalDirectory = ExpandFileName(Terminal->SessionData->LocalDirectory);
+    UnicodeString LocalDirectory = Terminal->SessionData->LocalDirectoryExpanded;
     if (LocalDirectory.IsEmpty())
     {
       LocalDirectory = GetPersonalFolder();
@@ -201,7 +201,7 @@ void __fastcall SynchronizeDirectories(TTerminal * Terminal,
   }
   else if (!Terminal->SessionData->LocalDirectory.IsEmpty())
   {
-    LocalDirectory = ExpandFileName(Terminal->SessionData->LocalDirectory);
+    LocalDirectory = Terminal->SessionData->LocalDirectoryExpanded;
   }
   else
   {