[PT Run] Open folder using shell instead of explorer.exe (#7292)

* pt run not using explorer.exe for opening path (#4622)

* updated explorer action name (#4622)
This commit is contained in:
Davide Giacometti
2020-10-17 01:30:11 +02:00
committed by GitHub
parent 36dd29c056
commit b80578b1b9
6 changed files with 23 additions and 22 deletions

View File

@@ -6,7 +6,7 @@ using Wox.Plugin;
namespace Microsoft.Plugin.Folder.Sources namespace Microsoft.Plugin.Folder.Sources
{ {
public interface IExplorerAction public interface IShellAction
{ {
bool Execute(string sanitizedPath, IPublicAPI contextApi); bool Execute(string sanitizedPath, IPublicAPI contextApi);

View File

@@ -2,26 +2,25 @@
// The Microsoft Corporation licenses this file to you under the MIT license. // The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information. // See the LICENSE file in the project root for more information.
using System.Globalization;
using Wox.Plugin; using Wox.Plugin;
namespace Microsoft.Plugin.Folder.Sources.Result namespace Microsoft.Plugin.Folder.Sources.Result
{ {
public class CreateOpenCurrentFolderResult : IItemResult public class CreateOpenCurrentFolderResult : IItemResult
{ {
private readonly IExplorerAction _explorerAction; private readonly IShellAction _shellAction;
public string Search { get; set; } public string Search { get; set; }
public CreateOpenCurrentFolderResult(string search) public CreateOpenCurrentFolderResult(string search)
: this(search, new ExplorerAction()) : this(search, new ShellAction())
{ {
} }
public CreateOpenCurrentFolderResult(string search, IExplorerAction explorerAction) public CreateOpenCurrentFolderResult(string search, IShellAction shellAction)
{ {
Search = search; Search = search;
_explorerAction = explorerAction; _shellAction = shellAction;
} }
public Wox.Plugin.Result Create(IPublicAPI contextApi) public Wox.Plugin.Result Create(IPublicAPI contextApi)
@@ -33,7 +32,7 @@ namespace Microsoft.Plugin.Folder.Sources.Result
SubTitle = Properties.Resources.wox_plugin_folder_select_folder_first_result_subtitle, SubTitle = Properties.Resources.wox_plugin_folder_select_folder_first_result_subtitle,
IcoPath = Search, IcoPath = Search,
Score = 500, Score = 500,
Action = c => _explorerAction.ExecuteSanitized(Search, contextApi), Action = c => _shellAction.ExecuteSanitized(Search, contextApi),
}; };
} }
} }

View File

@@ -11,7 +11,7 @@ namespace Microsoft.Plugin.Folder.Sources.Result
{ {
public class FileItemResult : IItemResult public class FileItemResult : IItemResult
{ {
private static readonly IExplorerAction ExplorerAction = new ExplorerAction(); private static readonly IShellAction ShellAction = new ShellAction();
public string FilePath { get; set; } public string FilePath { get; set; }
@@ -27,7 +27,7 @@ namespace Microsoft.Plugin.Folder.Sources.Result
SubTitle = string.Format(CultureInfo.CurrentCulture, Properties.Resources.wox_plugin_folder_select_file_result_subtitle, FilePath), SubTitle = string.Format(CultureInfo.CurrentCulture, Properties.Resources.wox_plugin_folder_select_file_result_subtitle, FilePath),
IcoPath = FilePath, IcoPath = FilePath,
TitleHighlightData = StringMatcher.FuzzySearch(Search, Path.GetFileName(FilePath)).MatchData, TitleHighlightData = StringMatcher.FuzzySearch(Search, Path.GetFileName(FilePath)).MatchData,
Action = c => ExplorerAction.Execute(FilePath, contextApi), Action = c => ShellAction.Execute(FilePath, contextApi),
ContextData = new SearchResult { Type = ResultType.File, FullPath = FilePath }, ContextData = new SearchResult { Type = ResultType.File, FullPath = FilePath },
}; };
return result; return result;

View File

@@ -10,7 +10,7 @@ namespace Microsoft.Plugin.Folder.Sources.Result
{ {
public class FolderItemResult : IItemResult public class FolderItemResult : IItemResult
{ {
private static readonly IExplorerAction ExplorerAction = new ExplorerAction(); private static readonly IShellAction ShellAction = new ShellAction();
public FolderItemResult() public FolderItemResult()
{ {
@@ -41,7 +41,7 @@ namespace Microsoft.Plugin.Folder.Sources.Result
QueryTextDisplay = Path, QueryTextDisplay = Path,
TitleHighlightData = StringMatcher.FuzzySearch(Search, Title).MatchData, TitleHighlightData = StringMatcher.FuzzySearch(Search, Title).MatchData,
ContextData = new SearchResult { Type = ResultType.Folder, FullPath = Path }, ContextData = new SearchResult { Type = ResultType.Folder, FullPath = Path },
Action = c => ExplorerAction.Execute(Path, contextApi), Action = c => ShellAction.Execute(Path, contextApi),
}; };
} }
} }

View File

@@ -7,16 +7,13 @@ using System.Diagnostics;
using System.Globalization; using System.Globalization;
using System.Reflection; using System.Reflection;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Windows;
using Wox.Infrastructure.Logger; using Wox.Infrastructure.Logger;
using Wox.Plugin; using Wox.Plugin;
namespace Microsoft.Plugin.Folder.Sources namespace Microsoft.Plugin.Folder.Sources
{ {
public class ExplorerAction : IExplorerAction public class ShellAction : IShellAction
{ {
private const string FileExplorerProgramName = "explorer";
public bool Execute(string path, IPublicAPI contextApi) public bool Execute(string path, IPublicAPI contextApi)
{ {
if (contextApi == null) if (contextApi == null)
@@ -24,7 +21,7 @@ namespace Microsoft.Plugin.Folder.Sources
throw new ArgumentNullException(nameof(contextApi)); throw new ArgumentNullException(nameof(contextApi));
} }
return OpenFileOrFolder(FileExplorerProgramName, path, contextApi); return OpenFileOrFolder(path, contextApi);
} }
public bool ExecuteSanitized(string search, IPublicAPI contextApi) public bool ExecuteSanitized(string search, IPublicAPI contextApi)
@@ -51,16 +48,21 @@ namespace Microsoft.Plugin.Folder.Sources
} }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "We want to keep the process alive and instead inform the user of the error")] [System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "We want to keep the process alive and instead inform the user of the error")]
private static bool OpenFileOrFolder(string program, string path, IPublicAPI contextApi) private static bool OpenFileOrFolder(string path, IPublicAPI contextApi)
{ {
try try
{ {
Process.Start(program, path); using (var process = new Process())
{
process.StartInfo.FileName = path;
process.StartInfo.UseShellExecute = true;
process.Start();
}
} }
catch (Exception e) catch (Exception e)
{ {
string messageBoxTitle = string.Format(CultureInfo.InvariantCulture, "{0} {1}", Properties.Resources.wox_plugin_folder_select_folder_OpenFileOrFolder_error_message, path); string messageBoxTitle = string.Format(CultureInfo.InvariantCulture, "{0} {1}", Properties.Resources.wox_plugin_folder_select_folder_OpenFileOrFolder_error_message, path);
Log.Exception($"Failed to open {path} in {FileExplorerProgramName}, {e.Message}", e, MethodBase.GetCurrentMethod().DeclaringType); Log.Exception($"Failed to open {path}, {e.Message}", e, MethodBase.GetCurrentMethod().DeclaringType);
contextApi.ShowMsg(messageBoxTitle, e.Message); contextApi.ShowMsg(messageBoxTitle, e.Message);
} }

View File

@@ -12,7 +12,7 @@ namespace Microsoft.Plugin.Folder
{ {
public class UserFolderResult : IItemResult public class UserFolderResult : IItemResult
{ {
private readonly IExplorerAction _explorerAction = new ExplorerAction(); private readonly IShellAction _shellAction = new ShellAction();
public string Search { get; set; } public string Search { get; set; }
@@ -32,7 +32,7 @@ namespace Microsoft.Plugin.Folder
QueryTextDisplay = Path, QueryTextDisplay = Path,
TitleHighlightData = StringMatcher.FuzzySearch(Search, Title).MatchData, TitleHighlightData = StringMatcher.FuzzySearch(Search, Title).MatchData,
ContextData = new SearchResult { Type = ResultType.Folder, FullPath = Path }, ContextData = new SearchResult { Type = ResultType.Folder, FullPath = Path },
Action = c => _explorerAction.Execute(Path, contextApi), Action = c => _shellAction.Execute(Path, contextApi),
}; };
} }
} }