Add try catch to encounter dllnotfound issue and move warning string to resource

This commit is contained in:
Hongtao Zhang 2022-11-28 21:38:17 -06:00
parent acc7d5171b
commit 22bc292aa9
No known key found for this signature in database
GPG key ID: 75F655B91C7AC9BB
5 changed files with 53 additions and 61 deletions

View file

@ -90,6 +90,7 @@
<system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String>
<!-- Everything -->
<system:String x:Key="flowlauncher_plugin_everything_sdk_issue">Everything SDK Loaded Fail</system:String>
<system:String x:Key="flowlauncher_plugin_everything_is_not_running">Warning: Everything service is not running</system:String>
<system:String x:Key="flowlauncher_plugin_everything_query_error">Error while querying Everything</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by">Sort By</system:String>
@ -110,6 +111,7 @@
<system:String x:Key="flowlauncher_plugin_everything_sort_by_descending">&#x2193;</system:String>
<system:String x:Key="flowlauncher_plugin_everything_nonfastsort_warning">Warning: This is not a Fast Sort option, searches may be slow</system:String>
<system:String x:Key="flowlauncher_plugin_everything_click_to_launch_or_install">Click to Launch or Install Everything</system:String>
<system:String x:Key="flowlauncher_plugin_everything_installing_title">Everything Installation</system:String>
<system:String x:Key="flowlauncher_plugin_everything_installing_subtitle">Installing Everything service. Please wait...</system:String>
<system:String x:Key="flowlauncher_plugin_everything_installationsuccess_subtitle">Successfully installed Everything service</system:String>

View file

@ -91,11 +91,17 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything
public static async ValueTask<bool> IsEverythingRunningAsync(CancellationToken token = default)
{
await _semaphore.WaitAsync(token);
EverythingApiDllImport.Everything_GetMajorVersion();
var result = EverythingApiDllImport.Everything_GetLastError() != StateCode.IPCError;
_semaphore.Release();
return result;
try
{
await _semaphore.WaitAsync(token);
EverythingApiDllImport.Everything_GetMajorVersion();
var result = EverythingApiDllImport.Everything_GetLastError() != StateCode.IPCError;
return result;
}
finally
{
_semaphore.Release();
}
}
/// <summary>

View file

@ -24,26 +24,40 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything
private async ValueTask ThrowIfEverythingNotAvailableAsync(CancellationToken token = default)
{
if (!await EverythingApi.IsEverythingRunningAsync(token))
throw new EngineNotAvailableException(
Enum.GetName(Settings.IndexSearchEngineOption.Everything),
"Click to Open or Download Everything",
"Everything is not running.",
async _ =>
try
{
if (!await EverythingApi.IsEverythingRunningAsync(token))
throw new EngineNotAvailableException(
Enum.GetName(Settings.IndexSearchEngineOption.Everything)!,
Main.Context.API.GetTranslation("flowlauncher_plugin_everything_click_to_launch_or_install"),
Main.Context.API.GetTranslation("flowlauncher_plugin_everything_is_not_running"),
ClickToInstallEverything)
{
var installedPath = await EverythingDownloadHelper.PromptDownloadIfNotInstallAsync(Settings.EverythingInstalledPath, Main.Context.API);
if (installedPath == null)
{
Main.Context.API.ShowMsgError("Unable to find Everything.exe");
return false;
}
Settings.EverythingInstalledPath = installedPath;
Process.Start(installedPath, "-startup");
return true;
})
ErrorIcon = Constants.EverythingErrorImagePath
};
}
catch (DllNotFoundException e)
{
throw new EngineNotAvailableException(
Enum.GetName(Settings.IndexSearchEngineOption.Everything)!,
"Please check whether your system is x86 or x64",
Main.Context.API.GetTranslation("flowlauncher_plugin_everything_sdk_issue"))
{
ErrorIcon = Constants.EverythingErrorImagePath
ErrorIcon = Constants.GeneralSearchErrorImagePath
};
}
}
private async ValueTask<bool> ClickToInstallEverything(ActionContext _)
{
var installedPath = await EverythingDownloadHelper.PromptDownloadIfNotInstallAsync(Settings.EverythingInstalledPath, Main.Context.API);
if (installedPath == null)
{
Main.Context.API.ShowMsgError("Unable to find Everything.exe");
return false;
}
Settings.EverythingInstalledPath = installedPath;
Process.Start(installedPath, "-startup");
return true;
}
public async IAsyncEnumerable<SearchResult> SearchAsync(string search, [EnumeratorCancellation] CancellationToken token)

View file

@ -369,6 +369,10 @@ namespace Flow.Launcher.Plugin.Explorer.ViewModels
// update the message to let user know in the settings panel.
return Visibility.Visible;
}
catch (DllNotFoundException)
{
return Visibility.Collapsed;
}
}
}
public string SortOptionWarningMessage
@ -386,6 +390,10 @@ namespace Flow.Launcher.Plugin.Explorer.ViewModels
{
return Context.API.GetTranslation("flowlauncher_plugin_everything_is_not_running");
}
catch (DllNotFoundException)
{
return Context.API.GetTranslation("flowlauncher_plugin_everything_sdk_issue");
}
}
}

View file

@ -1,20 +1,14 @@
using Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks;
using Flow.Launcher.Plugin.Explorer.ViewModels;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Media;
using DataFormats = System.Windows.DataFormats;
using DragDropEffects = System.Windows.DragDropEffects;
using DragEventArgs = System.Windows.DragEventArgs;
using ListView = System.Windows.Controls.ListView;
using MessageBox = System.Windows.MessageBox;
namespace Flow.Launcher.Plugin.Explorer.Views
{
@ -92,38 +86,6 @@ namespace Flow.Launcher.Plugin.Explorer.Views
tbFastSortWarning.Text = viewModel.SortOptionWarningMessage;
}
}
private void SettingExpander_OnExpanded(object sender, RoutedEventArgs e)
{
if (sender is not Expander expander)
return;
var parentContainer = VisualTreeHelper.GetParent(expander);
if (parentContainer is not StackPanel stackPanel)
return;
foreach (UIElement child in stackPanel.Children)
{
if (child != expander)
child.Visibility = Visibility.Collapsed;
}
}
private void SettingExpander_OnCollapsed(object sender, RoutedEventArgs e)
{
if (sender is not Expander expander)
return;
var parentContainer = VisualTreeHelper.GetParent(expander);
if (parentContainer is not StackPanel stackPanel)
return;
foreach (UIElement child in stackPanel.Children)
{
if (child != expander)
child.Visibility = Visibility.Visible;
}
}
private void LbxAccessLinks_OnDrop(object sender, DragEventArgs e)
{
AccessLinkDragDrop("QuickAccessLink", e);
@ -133,4 +95,4 @@ namespace Flow.Launcher.Plugin.Explorer.Views
AccessLinkDragDrop("IndexSearchExcludedPath", e);
}
}
}
}