Selaa lähdekoodia

Bug 1784: Allow opening the local or remote file from synchronization checklist in Windows Explorer or WinSCP, respectively

https://winscp.net/tracker/1784

Building on 084a35d7, with the use of 9015d810.

Source commit: 01c3de1f728f2499b80f14b4a489e461b9f24843
Martin Prikryl 6 vuotta sitten
vanhempi
sitoutus
ff6259d9fb

+ 11 - 3
source/forms/CustomScpExplorer.cpp

@@ -36,6 +36,7 @@
 #include <DateUtils.hpp>
 #include <TB2Common.hpp>
 #include <DirectoryMonitor.hpp>
+#include <System.IOUtils.hpp>
 //---------------------------------------------------------------------------
 #pragma package(smart_init)
 #pragma link "CustomDirView"
@@ -5730,12 +5731,19 @@ void __fastcall TCustomScpExplorerForm::DoSynchronizeMove(
   }
 }
 //---------------------------------------------------------------------------
-void __fastcall TCustomScpExplorerForm::DoSynchronizeBrowse(TOperationSide Side, const TSynchronizeChecklist::TItem * Item)
+void __fastcall TCustomScpExplorerForm::DoSynchronizeBrowse(TOperationSide Side, TSynchronizeChecklist::TAction Action, const TSynchronizeChecklist::TItem * Item)
 {
   UnicodeString LocalPath = ExcludeTrailingBackslash(Item->Local.Directory);
   if (Side == osLocal)
   {
-    OpenFolderInExplorer(LocalPath);
+    if (Action == TSynchronizeChecklist::saDownloadNew)
+    {
+      OpenFolderInExplorer(LocalPath);
+    }
+    else
+    {
+      OpenFileInExplorer(TPath::Combine(LocalPath, Item->GetFileName()));
+    }
   }
   else if (DebugAlwaysTrue(Side == osRemote))
   {
@@ -5748,7 +5756,7 @@ void __fastcall TCustomScpExplorerForm::DoSynchronizeBrowse(TOperationSide Side,
     }
 
     UnicodeString SessionName = SaveHiddenDuplicateSession(SessionData.get());
-    ExecuteNewInstance(SessionName);
+    ExecuteNewInstance(SessionName, FORMAT(L"%s=%s", (TProgramParams::FormatSwitch(BROWSE_SWITCH), Item->GetFileName())));
   }
 }
 //---------------------------------------------------------------------------

+ 1 - 1
source/forms/CustomScpExplorer.h

@@ -660,7 +660,7 @@ protected:
     TSynchronizeChecklist * Checklist, const TSynchronizeChecklist::TItemList & Items, void * Token);
   void __fastcall DoSynchronizeMove(
     TOperationSide Side, const UnicodeString & FileName, const UnicodeString & NewFileName, TRemoteFile * RemoteFile);
-  void __fastcall DoSynchronizeBrowse(TOperationSide Side, const TSynchronizeChecklist::TItem * Item);
+  void __fastcall DoSynchronizeBrowse(TOperationSide Side, TSynchronizeChecklist::TAction Action, const TSynchronizeChecklist::TItem * Item);
   void __fastcall FullSynchronize(
     TSynchronizeParams & Params, TProcessedSynchronizationChecklistItem OnProcessedItem,
     TUpdatedSynchronizationChecklistItems OnUpdatedSynchronizationChecklistItems);

+ 2 - 1
source/forms/SynchronizeChecklist.cpp

@@ -1318,7 +1318,8 @@ void __fastcall TSynchronizeChecklistDialog::UncheckDirectoryActionExecute(TObje
 void __fastcall TSynchronizeChecklistDialog::DoBrowse(TOperationSide Side)
 {
   const TSynchronizeChecklist::TItem * ChecklistItem = GetChecklistItem(ListView->Selected);
-  FOnSynchronizeBrowse(Side, ChecklistItem);
+  TSynchronizeChecklist::TAction Action = GetChecklistItemAction(ChecklistItem);
+  FOnSynchronizeBrowse(Side, Action, ChecklistItem);
 }
 //---------------------------------------------------------------------------
 void __fastcall TSynchronizeChecklistDialog::BrowseLocalActionExecute(TObject *)

+ 2 - 1
source/windows/WinInterface.h

@@ -367,7 +367,8 @@ typedef void __fastcall (__closure *TSynchronizeChecklistCalculateSize)
   (TSynchronizeChecklist * Checklist, const TSynchronizeChecklist::TItemList & Items, void * Token);
 typedef void __fastcall (__closure *TSynchronizeMoveEvent)(
   TOperationSide Side, const UnicodeString & FileName, const UnicodeString & NewFileName, TRemoteFile * RemoteFile);
-typedef void __fastcall (__closure *TSynchronizeBrowseEvent)(TOperationSide Side, const TSynchronizeChecklist::TItem * Item);
+typedef void __fastcall (__closure *TSynchronizeBrowseEvent)(
+  TOperationSide Side, TSynchronizeChecklist::TAction Action, const TSynchronizeChecklist::TItem * Item);
 bool __fastcall DoSynchronizeChecklistDialog(TSynchronizeChecklist * Checklist,
   TSynchronizeMode Mode, int Params,
   const UnicodeString LocalDirectory, const UnicodeString RemoteDirectory,