Browse Source

Bug fix: When initial remote directory specified in the "open" command does not exist, the error was silently ignored

Caused by Bug 1616
Additionally, logging of ignored error from Bug 1616 was not happening.

Source commit: 99c0f9b8346bee2f12cdb5df69f53c22b651e2fc
Martin Prikryl 3 years ago
parent
commit
e9631d04a6
3 changed files with 15 additions and 2 deletions
  1. 8 0
      source/core/SessionData.cpp
  2. 2 0
      source/core/SessionData.h
  3. 5 2
      source/core/Terminal.cpp

+ 8 - 0
source/core/SessionData.cpp

@@ -236,6 +236,7 @@ void __fastcall TSessionData::DefaultSettings()
   RemoteDirectory = L"";
   SynchronizeBrowsing = false;
   UpdateDirectories = true;
+  RequireDirectories = false;
   CacheDirectories = true;
   CacheDirectoryChanges = true;
   PreserveDirectoryChanges = true;
@@ -359,6 +360,7 @@ void __fastcall TSessionData::NonPersistant()
   PROPERTY(LocalDirectory); \
   PROPERTY(OtherLocalDirectory); \
   PROPERTY(RemoteDirectory); \
+  PROPERTY(RequireDirectories); \
   PROPERTY(Color); \
   PROPERTY(SynchronizeBrowsing); \
   PROPERTY(Note);
@@ -2202,6 +2204,10 @@ bool __fastcall TSessionData::ParseUrl(UnicodeString Url, TOptions * Options,
     }
     else
     {
+      // When ad-hoc URL is used, always display error when the directories are not valid,
+      // no matter if they are part of the URL or raw settings.
+      RequireDirectories = true;
+
       // This happens when pasting URL on Login dialog
       if (StoredSessions != NULL)
       {
@@ -2361,6 +2367,8 @@ bool __fastcall TSessionData::ParseUrl(UnicodeString Url, TOptions * Options,
         ARemoteDirectory = UnixExtractFilePath(ARemoteDirectory);
       }
       RemoteDirectory = DecodeUrlChars(ARemoteDirectory);
+      // Is already true for ad-hoc URL, but we want to error even for "storedsite/path/"-style URL.
+      RequireDirectories = true;
     }
 
     DefaultsOnly = false;

+ 2 - 0
source/core/SessionData.h

@@ -143,6 +143,7 @@ private:
   bool FSpecial;
   bool FSynchronizeBrowsing;
   bool FUpdateDirectories;
+  bool FRequireDirectories;
   bool FCacheDirectories;
   bool FCacheDirectoryChanges;
   bool FPreserveDirectoryChanges;
@@ -595,6 +596,7 @@ public:
   __property UnicodeString RemoteDirectory  = { read=FRemoteDirectory, write=SetRemoteDirectory };
   __property bool SynchronizeBrowsing = { read=FSynchronizeBrowsing, write=SetSynchronizeBrowsing };
   __property bool UpdateDirectories = { read=FUpdateDirectories, write=SetUpdateDirectories };
+  __property bool RequireDirectories = { read=FRequireDirectories, write=FRequireDirectories };
   __property bool CacheDirectories = { read=FCacheDirectories, write=SetCacheDirectories };
   __property bool CacheDirectoryChanges = { read=FCacheDirectoryChanges, write=SetCacheDirectoryChanges };
   __property bool PreserveDirectoryChanges = { read=FPreserveDirectoryChanges, write=SetPreserveDirectoryChanges };

+ 5 - 2
source/core/Terminal.cpp

@@ -3224,11 +3224,14 @@ void __fastcall TTerminal::DoStartup()
         }
         catch (...)
         {
-          if (!Active)
+          if (!Active || SessionData->RequireDirectories)
           {
-            LogEvent(L"Configured initial remote directory cannot be opened, staying in the home directory.");
             throw;
           }
+          else
+          {
+            LogEvent(L"Configured initial remote directory cannot be opened, staying in the home directory.");
+          }
         }
         ExceptionOnFail = false;
       }