mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-08 20:27:36 +02:00
[fxcop] Wox.Infrastructure (#7590)
* CA1052: Static holder types should be Static or NotInheritable * CA1041: Provide ObsoleteAttribute message * CA1062: Validate arguments of public methods * CA1304: Specify CultureInfo / CA1305: Specify IFormatProvider / CA1307: Specify StringComparison for clarity * CA1802: Use Literals Where Appropriate * CA1820: Test for empty strings using string length * CA1707: Identifiers should not contain underscores * CA1805: Do not initialize unnecessarily. * CA1822: Mark members as static * CA2227: Collection properties should be read only * CA1054: URI parameters should not be strings * CA1031: Do not catch general exception types * CA1060: Move P/Invokes to NativeMethods class * CA1308: Normalize strings to uppercase * CA2000: Dispose objects before losing scope / CA2234: Pass System.Uri objects instead of strings * CA2234: Pass System.Uri objects instead of strings * CA1044: Properties should not be write only * CA1716: Identifiers should not match keywords * CA2007: Do not directly await a Task * CA2007: Do not directly await a Task (Suppressed) * CA5350: Do Not Use Weak Cryptographic Algorithms (Suppressed) * CA1724: Type names should not match namespaces (renamed Settings.cs to PowerToysRunSettings.cs) * CA1033: Interface methods should be callable by child types (Added sealed modifier to class) * CA1724: Type names should not match namespaces (Renamed Plugin.cs to RunPlugin.cs) * CA1724: Type names should not match namespaces (Renamed Http.cs to HttpClient.cs) * CA5364: Do not use deprecated security protocols (Remove unused code) * Enabled FxCopAnalyzer for Wox.Infrastructure * fixed comment * Addressed comments - Changed Ordinal to InvariantCulture - Added comments - Removed unused obsolete code - Removed unused method (CA2007: Do not directly await a Task) * Addressed comments - fixed justification for CA1031 suppression * Addressed comments - Fixed justification for CA1031 suppression in Wox.Core/Wox.Plugin
This commit is contained in:
@@ -80,7 +80,7 @@ namespace Microsoft.Plugin.Program.Storage
|
|||||||
var support = Environment.OSVersion.Version.Major >= windows10.Major;
|
var support = Environment.OSVersion.Version.Major >= windows10.Major;
|
||||||
|
|
||||||
var applications = support ? Programs.UWP.All() : Array.Empty<UWPApplication>();
|
var applications = support ? Programs.UWP.All() : Array.Empty<UWPApplication>();
|
||||||
Set(applications);
|
SetList(applications);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Save()
|
public void Save()
|
||||||
@@ -91,7 +91,7 @@ namespace Microsoft.Plugin.Program.Storage
|
|||||||
public void Load()
|
public void Load()
|
||||||
{
|
{
|
||||||
var items = _storage.TryLoad(Array.Empty<UWPApplication>());
|
var items = _storage.TryLoad(Array.Empty<UWPApplication>());
|
||||||
Set(items);
|
SetList(items);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ namespace Microsoft.Plugin.Program.Storage
|
|||||||
public void IndexPrograms()
|
public void IndexPrograms()
|
||||||
{
|
{
|
||||||
var applications = Programs.Win32Program.All(_settings);
|
var applications = Programs.Win32Program.All(_settings);
|
||||||
Set(applications);
|
SetList(applications);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Save()
|
public void Save()
|
||||||
@@ -236,7 +236,7 @@ namespace Microsoft.Plugin.Program.Storage
|
|||||||
public void Load()
|
public void Load()
|
||||||
{
|
{
|
||||||
var items = _storage.TryLoad(Array.Empty<Win32Program>());
|
var items = _storage.TryLoad(Array.Empty<Win32Program>());
|
||||||
Set(items);
|
SetList(items);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ namespace PowerLauncher
|
|||||||
|
|
||||||
private const string Unique = "PowerLauncher_Unique_Application_Mutex";
|
private const string Unique = "PowerLauncher_Unique_Application_Mutex";
|
||||||
private static bool _disposed;
|
private static bool _disposed;
|
||||||
private Settings _settings;
|
private PowerToysRunSettings _settings;
|
||||||
private MainViewModel _mainVM;
|
private MainViewModel _mainVM;
|
||||||
private MainWindow _mainWindow;
|
private MainWindow _mainWindow;
|
||||||
private ThemeManager _themeManager;
|
private ThemeManager _themeManager;
|
||||||
@@ -107,7 +107,7 @@ namespace PowerLauncher
|
|||||||
Current.MainWindow.Title = Constant.ExeFileName;
|
Current.MainWindow.Title = Constant.ExeFileName;
|
||||||
|
|
||||||
// main windows needs initialized before theme change because of blur settings
|
// main windows needs initialized before theme change because of blur settings
|
||||||
Http.Proxy = _settings.Proxy;
|
HttpClient.Proxy = _settings.Proxy;
|
||||||
|
|
||||||
RegisterExitEvents();
|
RegisterExitEvents();
|
||||||
|
|
||||||
|
|||||||
@@ -22,14 +22,14 @@ namespace PowerLauncher
|
|||||||
{
|
{
|
||||||
public partial class MainWindow : IDisposable
|
public partial class MainWindow : IDisposable
|
||||||
{
|
{
|
||||||
private readonly Settings _settings;
|
private readonly PowerToysRunSettings _settings;
|
||||||
private readonly MainViewModel _viewModel;
|
private readonly MainViewModel _viewModel;
|
||||||
private bool _isTextSetProgrammatically;
|
private bool _isTextSetProgrammatically;
|
||||||
private bool _deletePressed;
|
private bool _deletePressed;
|
||||||
private Timer _firstDeleteTimer = new Timer();
|
private Timer _firstDeleteTimer = new Timer();
|
||||||
private bool _coldStateHotkeyPressed;
|
private bool _coldStateHotkeyPressed;
|
||||||
|
|
||||||
public MainWindow(Settings settings, MainViewModel mainVM)
|
public MainWindow(PowerToysRunSettings settings, MainViewModel mainVM)
|
||||||
: this()
|
: this()
|
||||||
{
|
{
|
||||||
DataContext = mainVM;
|
DataContext = mainVM;
|
||||||
|
|||||||
@@ -27,10 +27,11 @@ namespace PowerLauncher
|
|||||||
private const int MaxRetries = 10;
|
private const int MaxRetries = 10;
|
||||||
private static readonly object _watcherSyncObject = new object();
|
private static readonly object _watcherSyncObject = new object();
|
||||||
private readonly FileSystemWatcher _watcher;
|
private readonly FileSystemWatcher _watcher;
|
||||||
private readonly Settings _settings;
|
private readonly PowerToysRunSettings _settings;
|
||||||
|
|
||||||
private readonly ThemeManager _themeManager;
|
private readonly ThemeManager _themeManager;
|
||||||
|
|
||||||
public SettingsWatcher(Settings settings, ThemeManager themeManager)
|
public SettingsWatcher(PowerToysRunSettings settings, ThemeManager themeManager)
|
||||||
{
|
{
|
||||||
_settingsUtils = new SettingsUtils(new SystemIOProvider());
|
_settingsUtils = new SettingsUtils(new SystemIOProvider());
|
||||||
_settings = settings;
|
_settings = settings;
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ namespace PowerLauncher.ViewModel
|
|||||||
private readonly WoxJsonStorage<QueryHistory> _historyItemsStorage;
|
private readonly WoxJsonStorage<QueryHistory> _historyItemsStorage;
|
||||||
private readonly WoxJsonStorage<UserSelectedRecord> _userSelectedRecordStorage;
|
private readonly WoxJsonStorage<UserSelectedRecord> _userSelectedRecordStorage;
|
||||||
private readonly WoxJsonStorage<TopMostRecord> _topMostRecordStorage;
|
private readonly WoxJsonStorage<TopMostRecord> _topMostRecordStorage;
|
||||||
private readonly Settings _settings;
|
private readonly PowerToysRunSettings _settings;
|
||||||
private readonly QueryHistory _history;
|
private readonly QueryHistory _history;
|
||||||
private readonly UserSelectedRecord _userSelectedRecord;
|
private readonly UserSelectedRecord _userSelectedRecord;
|
||||||
private readonly TopMostRecord _topMostRecord;
|
private readonly TopMostRecord _topMostRecord;
|
||||||
@@ -53,7 +53,7 @@ namespace PowerLauncher.ViewModel
|
|||||||
|
|
||||||
internal HotkeyManager HotkeyManager { get; set; }
|
internal HotkeyManager HotkeyManager { get; set; }
|
||||||
|
|
||||||
public MainViewModel(Settings settings)
|
public MainViewModel(PowerToysRunSettings settings)
|
||||||
{
|
{
|
||||||
_saved = false;
|
_saved = false;
|
||||||
_queryTextBeforeLeaveResults = string.Empty;
|
_queryTextBeforeLeaveResults = string.Empty;
|
||||||
@@ -87,7 +87,7 @@ namespace PowerLauncher.ViewModel
|
|||||||
HotkeyManager = new HotkeyManager();
|
HotkeyManager = new HotkeyManager();
|
||||||
_settings.PropertyChanged += (s, e) =>
|
_settings.PropertyChanged += (s, e) =>
|
||||||
{
|
{
|
||||||
if (e.PropertyName == nameof(Settings.Hotkey))
|
if (e.PropertyName == nameof(PowerToysRunSettings.Hotkey))
|
||||||
{
|
{
|
||||||
Application.Current.Dispatcher.Invoke(() =>
|
Application.Current.Dispatcher.Invoke(() =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ namespace PowerLauncher.ViewModel
|
|||||||
{
|
{
|
||||||
private readonly object _collectionLock = new object();
|
private readonly object _collectionLock = new object();
|
||||||
|
|
||||||
private readonly Settings _settings;
|
private readonly PowerToysRunSettings _settings;
|
||||||
|
|
||||||
public ResultsViewModel()
|
public ResultsViewModel()
|
||||||
{
|
{
|
||||||
@@ -28,7 +28,7 @@ namespace PowerLauncher.ViewModel
|
|||||||
BindingOperations.EnableCollectionSynchronization(Results, _collectionLock);
|
BindingOperations.EnableCollectionSynchronization(Results, _collectionLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ResultsViewModel(Settings settings)
|
public ResultsViewModel(PowerToysRunSettings settings)
|
||||||
: this()
|
: this()
|
||||||
{
|
{
|
||||||
_settings = settings ?? throw new ArgumentNullException(nameof(settings));
|
_settings = settings ?? throw new ArgumentNullException(nameof(settings));
|
||||||
|
|||||||
@@ -11,11 +11,11 @@ namespace PowerLauncher.ViewModel
|
|||||||
{
|
{
|
||||||
public class SettingWindowViewModel : BaseModel
|
public class SettingWindowViewModel : BaseModel
|
||||||
{
|
{
|
||||||
private readonly WoxJsonStorage<Settings> _storage;
|
private readonly WoxJsonStorage<PowerToysRunSettings> _storage;
|
||||||
|
|
||||||
public SettingWindowViewModel()
|
public SettingWindowViewModel()
|
||||||
{
|
{
|
||||||
_storage = new WoxJsonStorage<Settings>();
|
_storage = new WoxJsonStorage<PowerToysRunSettings>();
|
||||||
Settings = _storage.Load();
|
Settings = _storage.Load();
|
||||||
Settings.PropertyChanged += (s, e) =>
|
Settings.PropertyChanged += (s, e) =>
|
||||||
{
|
{
|
||||||
@@ -26,7 +26,7 @@ namespace PowerLauncher.ViewModel
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public Settings Settings { get; set; }
|
public PowerToysRunSettings Settings { get; set; }
|
||||||
|
|
||||||
public void Save()
|
public void Save()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ namespace Wox.Core.Plugin
|
|||||||
return PluginMetadatas;
|
return PluginMetadatas;
|
||||||
}
|
}
|
||||||
|
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "All exception information is being logged")]
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Suppressing this to enable FxCop. We are logging the exception, and going forward general exceptions should not be caught")]
|
||||||
private static void ParsePluginConfigs(IEnumerable<string> directories)
|
private static void ParsePluginConfigs(IEnumerable<string> directories)
|
||||||
{
|
{
|
||||||
// todo use linq when diable plugin is implemented since parallel.foreach + list is not thread saft
|
// todo use linq when diable plugin is implemented since parallel.foreach + list is not thread saft
|
||||||
@@ -60,7 +60,7 @@ namespace Wox.Core.Plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "All exception information is being logged")]
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Suppressing this to enable FxCop. We are logging the exception, and going forward general exceptions should not be caught")]
|
||||||
private static PluginMetadata GetPluginMetadata(string pluginDirectory)
|
private static PluginMetadata GetPluginMetadata(string pluginDirectory)
|
||||||
{
|
{
|
||||||
string configPath = Path.Combine(pluginDirectory, PluginConfigName);
|
string configPath = Path.Combine(pluginDirectory, PluginConfigName);
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ namespace Wox.Core.Plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "All exception information is being logged")]
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Suppressing this to enable FxCop. We are logging the exception, and going forward general exceptions should not be caught")]
|
||||||
private static PluginMetadata GetMetadataFromJson(string pluginDirectory)
|
private static PluginMetadata GetMetadataFromJson(string pluginDirectory)
|
||||||
{
|
{
|
||||||
string configPath = Path.Combine(pluginDirectory, "plugin.json");
|
string configPath = Path.Combine(pluginDirectory, "plugin.json");
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ namespace Wox.Core.Plugin
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Call initialize for all plugins
|
/// Call initialize for all plugins
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "All exception information is being logged")]
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Suppressing this to enable FxCop. We are logging the exception, and going forward general exceptions should not be caught")]
|
||||||
public static void InitializePlugins(IPublicAPI api)
|
public static void InitializePlugins(IPublicAPI api)
|
||||||
{
|
{
|
||||||
API = api ?? throw new ArgumentNullException(nameof(api));
|
API = api ?? throw new ArgumentNullException(nameof(api));
|
||||||
@@ -160,7 +160,7 @@ namespace Wox.Core.Plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "All exception information is being logged")]
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Suppressing this to enable FxCop. We are logging the exception, and going forward general exceptions should not be caught")]
|
||||||
public static List<Result> QueryForPlugin(PluginPair pair, Query query, bool delayedExecution = false)
|
public static List<Result> QueryForPlugin(PluginPair pair, Query query, bool delayedExecution = false)
|
||||||
{
|
{
|
||||||
if (pair == null)
|
if (pair == null)
|
||||||
@@ -262,7 +262,7 @@ namespace Wox.Core.Plugin
|
|||||||
return AllPlugins.Where(p => p.Plugin is T);
|
return AllPlugins.Where(p => p.Plugin is T);
|
||||||
}
|
}
|
||||||
|
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "All exception information is being logged")]
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Suppressing this to enable FxCop. We are logging the exception, and going forward general exceptions should not be caught")]
|
||||||
public static List<ContextMenuResult> GetContextMenusForPlugin(Result result)
|
public static List<ContextMenuResult> GetContextMenusForPlugin(Result result)
|
||||||
{
|
{
|
||||||
var pluginPair = _contextMenuPlugins.FirstOrDefault(o => o.Metadata.ID == result.PluginID);
|
var pluginPair = _contextMenuPlugins.FirstOrDefault(o => o.Metadata.ID == result.PluginID);
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace Wox.Core.Plugin
|
|||||||
return csharpPlugins;
|
return csharpPlugins;
|
||||||
}
|
}
|
||||||
|
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "All exception information is being logged")]
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Suppressing this to enable FxCop. We are logging the exception, and going forward general exceptions should not be caught")]
|
||||||
public static IEnumerable<PluginPair> CSharpPlugins(List<PluginMetadata> source)
|
public static IEnumerable<PluginPair> CSharpPlugins(List<PluginMetadata> source)
|
||||||
{
|
{
|
||||||
var plugins = new List<PluginPair>();
|
var plugins = new List<PluginPair>();
|
||||||
|
|||||||
@@ -6,13 +6,15 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
using Wox.Plugin;
|
using Wox.Plugin;
|
||||||
|
using Wox.Plugin.Logger;
|
||||||
|
|
||||||
namespace Wox.Infrastructure.Exception
|
namespace Wox.Infrastructure.Exception
|
||||||
{
|
{
|
||||||
public class ExceptionFormatter
|
public static class ExceptionFormatter
|
||||||
{
|
{
|
||||||
public static string FormatException(System.Exception exception)
|
public static string FormatException(System.Exception exception)
|
||||||
{
|
{
|
||||||
@@ -110,6 +112,7 @@ namespace Wox.Infrastructure.Exception
|
|||||||
}
|
}
|
||||||
|
|
||||||
// http://msdn.microsoft.com/en-us/library/hh925568%28v=vs.110%29.aspx
|
// http://msdn.microsoft.com/en-us/library/hh925568%28v=vs.110%29.aspx
|
||||||
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Suppressing this to enable FxCop. We are logging the exception, and going forward general exceptions should not be caught")]
|
||||||
private static List<string> GetFrameworkVersionFromRegistry()
|
private static List<string> GetFrameworkVersionFromRegistry()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -119,25 +122,28 @@ namespace Wox.Infrastructure.Exception
|
|||||||
{
|
{
|
||||||
foreach (string versionKeyName in ndpKey.GetSubKeyNames())
|
foreach (string versionKeyName in ndpKey.GetSubKeyNames())
|
||||||
{
|
{
|
||||||
if (versionKeyName.StartsWith("v"))
|
// Using InvariantCulture since this is internal and involves version key
|
||||||
|
if (versionKeyName.StartsWith("v", StringComparison.InvariantCulture))
|
||||||
{
|
{
|
||||||
RegistryKey versionKey = ndpKey.OpenSubKey(versionKeyName);
|
RegistryKey versionKey = ndpKey.OpenSubKey(versionKeyName);
|
||||||
string name = (string)versionKey.GetValue("Version", string.Empty);
|
string name = (string)versionKey.GetValue("Version", string.Empty);
|
||||||
string sp = versionKey.GetValue("SP", string.Empty).ToString();
|
string sp = versionKey.GetValue("SP", string.Empty).ToString();
|
||||||
string install = versionKey.GetValue("Install", string.Empty).ToString();
|
string install = versionKey.GetValue("Install", string.Empty).ToString();
|
||||||
if (install != string.Empty)
|
if (!string.IsNullOrEmpty(install))
|
||||||
{
|
{
|
||||||
if (sp != string.Empty && install == "1")
|
if (!string.IsNullOrEmpty(sp) && install == "1")
|
||||||
{
|
{
|
||||||
result.Add(string.Format("{0} {1} SP{2}", versionKeyName, name, sp));
|
// Using InvariantCulture since this is internal
|
||||||
|
result.Add(string.Format(CultureInfo.InvariantCulture, "{0} {1} SP{2}", versionKeyName, name, sp));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result.Add(string.Format("{0} {1}", versionKeyName, name));
|
// Using InvariantCulture since this is internal
|
||||||
|
result.Add(string.Format(CultureInfo.InvariantCulture, "{0} {1}", versionKeyName, name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (name != string.Empty)
|
if (!string.IsNullOrEmpty(name))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -146,21 +152,23 @@ namespace Wox.Infrastructure.Exception
|
|||||||
{
|
{
|
||||||
RegistryKey subKey = versionKey.OpenSubKey(subKeyName);
|
RegistryKey subKey = versionKey.OpenSubKey(subKeyName);
|
||||||
name = (string)subKey.GetValue("Version", string.Empty);
|
name = (string)subKey.GetValue("Version", string.Empty);
|
||||||
if (name != string.Empty)
|
if (!string.IsNullOrEmpty(name))
|
||||||
{
|
{
|
||||||
sp = subKey.GetValue("SP", string.Empty).ToString();
|
sp = subKey.GetValue("SP", string.Empty).ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
install = subKey.GetValue("Install", string.Empty).ToString();
|
install = subKey.GetValue("Install", string.Empty).ToString();
|
||||||
if (install != string.Empty)
|
if (!string.IsNullOrEmpty(install))
|
||||||
{
|
{
|
||||||
if (sp != string.Empty && install == "1")
|
if (!string.IsNullOrEmpty(sp) && install == "1")
|
||||||
{
|
{
|
||||||
result.Add(string.Format("{0} {1} {2} SP{3}", versionKeyName, subKeyName, name, sp));
|
// Using InvariantCulture since this is internal
|
||||||
|
result.Add(string.Format(CultureInfo.InvariantCulture, "{0} {1} {2} SP{3}", versionKeyName, subKeyName, name, sp));
|
||||||
}
|
}
|
||||||
else if (install == "1")
|
else if (install == "1")
|
||||||
{
|
{
|
||||||
result.Add(string.Format("{0} {1} {2}", versionKeyName, subKeyName, name));
|
// Using InvariantCulture since this is internal
|
||||||
|
result.Add(string.Format(CultureInfo.InvariantCulture, "{0} {1} {2}", versionKeyName, subKeyName, name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -191,8 +199,9 @@ namespace Wox.Infrastructure.Exception
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
catch (System.Exception)
|
catch (System.Exception e)
|
||||||
{
|
{
|
||||||
|
Log.Exception("Could not get framework version from registry", e, MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
return new List<string>();
|
return new List<string>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,11 +20,21 @@ namespace Wox.Infrastructure
|
|||||||
|
|
||||||
public static FuzzyMatcher Create(string query)
|
public static FuzzyMatcher Create(string query)
|
||||||
{
|
{
|
||||||
|
if (query == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(query));
|
||||||
|
}
|
||||||
|
|
||||||
return new FuzzyMatcher(query, new MatchOption());
|
return new FuzzyMatcher(query, new MatchOption());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static FuzzyMatcher Create(string query, MatchOption opt)
|
public static FuzzyMatcher Create(string query, MatchOption opt)
|
||||||
{
|
{
|
||||||
|
if (query == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(query));
|
||||||
|
}
|
||||||
|
|
||||||
return new FuzzyMatcher(query, opt);
|
return new FuzzyMatcher(query, opt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -80,6 +80,7 @@ namespace Wox.Infrastructure
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Function to run as admin for context menu items
|
// Function to run as admin for context menu items
|
||||||
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Suppressing this to enable FxCop. We are logging the exception, and going forward general exceptions should not be caught")]
|
||||||
public static void RunAsAdmin(string path)
|
public static void RunAsAdmin(string path)
|
||||||
{
|
{
|
||||||
var info = new ProcessStartInfo
|
var info = new ProcessStartInfo
|
||||||
|
|||||||
@@ -82,7 +82,8 @@ namespace Wox.Infrastructure.Hotkey
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<string> keys = hotkeyString.Replace(" ", string.Empty).Split('+').ToList();
|
// Using InvariantCulture since this is internal and involves key codes
|
||||||
|
List<string> keys = hotkeyString.Replace(" ", string.Empty, StringComparison.InvariantCulture).Split('+').ToList();
|
||||||
if (keys.Contains("Alt"))
|
if (keys.Contains("Alt"))
|
||||||
{
|
{
|
||||||
Alt = true;
|
Alt = true;
|
||||||
|
|||||||
@@ -9,21 +9,21 @@ namespace Wox.Infrastructure.Hotkey
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Key down
|
/// Key down
|
||||||
/// </summary>
|
/// </summary>
|
||||||
WM_KEYDOWN = 256,
|
WMKEYDOWN = 256,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Key up
|
/// Key up
|
||||||
/// </summary>
|
/// </summary>
|
||||||
WM_KEYUP = 257,
|
WMKEYUP = 257,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// System key up
|
/// System key up
|
||||||
/// </summary>
|
/// </summary>
|
||||||
WM_SYSKEYUP = 261,
|
WMSYSKEYUP = 261,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// System key down
|
/// System key down
|
||||||
/// </summary>
|
/// </summary>
|
||||||
WM_SYSKEYDOWN = 260,
|
WMSYSKEYDOWN = 260,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,90 +0,0 @@
|
|||||||
// Copyright (c) Microsoft Corporation
|
|
||||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
|
||||||
// See the LICENSE file in the project root for more information.
|
|
||||||
|
|
||||||
using System.IO;
|
|
||||||
using System.Net;
|
|
||||||
using System.Net.Http;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using JetBrains.Annotations;
|
|
||||||
using Wox.Infrastructure.UserSettings;
|
|
||||||
using Wox.Plugin.Logger;
|
|
||||||
|
|
||||||
namespace Wox.Infrastructure.Http
|
|
||||||
{
|
|
||||||
public static class Http
|
|
||||||
{
|
|
||||||
private const string UserAgent = @"Mozilla/5.0 (Trident/7.0; rv:11.0) like Gecko";
|
|
||||||
|
|
||||||
static Http()
|
|
||||||
{
|
|
||||||
// need to be added so it would work on a win10 machine
|
|
||||||
ServicePointManager.Expect100Continue = true;
|
|
||||||
ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls
|
|
||||||
| SecurityProtocolType.Tls11
|
|
||||||
| SecurityProtocolType.Tls12;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HttpProxy Proxy { private get; set; }
|
|
||||||
|
|
||||||
public static IWebProxy WebProxy()
|
|
||||||
{
|
|
||||||
if (Proxy != null && Proxy.Enabled && !string.IsNullOrEmpty(Proxy.Server))
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(Proxy.UserName) || string.IsNullOrEmpty(Proxy.Password))
|
|
||||||
{
|
|
||||||
var webProxy = new WebProxy(Proxy.Server, Proxy.Port);
|
|
||||||
return webProxy;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var webProxy = new WebProxy(Proxy.Server, Proxy.Port)
|
|
||||||
{
|
|
||||||
Credentials = new NetworkCredential(Proxy.UserName, Proxy.Password),
|
|
||||||
};
|
|
||||||
return webProxy;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return WebRequest.GetSystemWebProxy();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Download([NotNull] string url, [NotNull] string filePath)
|
|
||||||
{
|
|
||||||
var client = new WebClient { Proxy = WebProxy() };
|
|
||||||
client.Headers.Add("user-agent", UserAgent);
|
|
||||||
client.DownloadFile(url, filePath);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task<string> Get([NotNull] string url, string encoding = "UTF-8")
|
|
||||||
{
|
|
||||||
Log.Debug($"Url <{url}>", MethodBase.GetCurrentMethod().DeclaringType);
|
|
||||||
|
|
||||||
var request = WebRequest.CreateHttp(url);
|
|
||||||
request.Method = "GET";
|
|
||||||
request.Timeout = 1000;
|
|
||||||
request.Proxy = WebProxy();
|
|
||||||
request.UserAgent = UserAgent;
|
|
||||||
var response = await request.GetResponseAsync() as HttpWebResponse;
|
|
||||||
response = response.NonNull();
|
|
||||||
var stream = response.GetResponseStream().NonNull();
|
|
||||||
|
|
||||||
using (var reader = new StreamReader(stream, Encoding.GetEncoding(encoding)))
|
|
||||||
{
|
|
||||||
var content = await reader.ReadToEndAsync();
|
|
||||||
if (response.StatusCode == HttpStatusCode.OK)
|
|
||||||
{
|
|
||||||
return content;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new HttpRequestException($"Error code <{response.StatusCode}> with content <{content}> returned from <{url}>");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
61
src/modules/launcher/Wox.Infrastructure/Http/HttpClient.cs
Normal file
61
src/modules/launcher/Wox.Infrastructure/Http/HttpClient.cs
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using JetBrains.Annotations;
|
||||||
|
using Wox.Infrastructure.UserSettings;
|
||||||
|
using Wox.Plugin.Logger;
|
||||||
|
|
||||||
|
namespace Wox.Infrastructure.Http
|
||||||
|
{
|
||||||
|
public static class HttpClient
|
||||||
|
{
|
||||||
|
private const string UserAgent = @"Mozilla/5.0 (Trident/7.0; rv:11.0) like Gecko";
|
||||||
|
|
||||||
|
public static HttpProxy Proxy { get; set; }
|
||||||
|
|
||||||
|
public static IWebProxy WebProxy()
|
||||||
|
{
|
||||||
|
if (Proxy != null && Proxy.Enabled && !string.IsNullOrEmpty(Proxy.Server))
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(Proxy.UserName) || string.IsNullOrEmpty(Proxy.Password))
|
||||||
|
{
|
||||||
|
var webProxy = new WebProxy(Proxy.Server, Proxy.Port);
|
||||||
|
return webProxy;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var webProxy = new WebProxy(Proxy.Server, Proxy.Port)
|
||||||
|
{
|
||||||
|
Credentials = new NetworkCredential(Proxy.UserName, Proxy.Password),
|
||||||
|
};
|
||||||
|
return webProxy;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return WebRequest.GetSystemWebProxy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Download([NotNull] Uri url, [NotNull] string filePath)
|
||||||
|
{
|
||||||
|
if (url == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(url));
|
||||||
|
}
|
||||||
|
|
||||||
|
var client = new WebClient { Proxy = WebProxy() };
|
||||||
|
client.Headers.Add("user-agent", UserAgent);
|
||||||
|
client.DownloadFile(url.AbsoluteUri, filePath);
|
||||||
|
client.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
41
src/modules/launcher/Wox.Infrastructure/Image/IShellItem.cs
Normal file
41
src/modules/launcher/Wox.Infrastructure/Image/IShellItem.cs
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Wox.Infrastructure.Image
|
||||||
|
{
|
||||||
|
internal enum SIGDN : uint
|
||||||
|
{
|
||||||
|
NORMALDISPLAY = 0,
|
||||||
|
PARENTRELATIVEPARSING = 0x80018001,
|
||||||
|
PARENTRELATIVEFORADDRESSBAR = 0x8001c001,
|
||||||
|
DESKTOPABSOLUTEPARSING = 0x80028000,
|
||||||
|
PARENTRELATIVEEDITING = 0x80031001,
|
||||||
|
DESKTOPABSOLUTEEDITING = 0x8004c000,
|
||||||
|
FILESYSPATH = 0x80058000,
|
||||||
|
URL = 0x80068000,
|
||||||
|
}
|
||||||
|
|
||||||
|
[ComImport]
|
||||||
|
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
||||||
|
[Guid("43826d1e-e718-42ee-bc55-a1e261c37bfe")]
|
||||||
|
internal interface IShellItem
|
||||||
|
{
|
||||||
|
void BindToHandler(
|
||||||
|
IntPtr pbc,
|
||||||
|
[MarshalAs(UnmanagedType.LPStruct)] Guid bhid,
|
||||||
|
[MarshalAs(UnmanagedType.LPStruct)] Guid riid,
|
||||||
|
out IntPtr ppv);
|
||||||
|
|
||||||
|
void GetParent(out IShellItem ppsi);
|
||||||
|
|
||||||
|
void GetDisplayName(SIGDN sigdnName, out IntPtr ppszName);
|
||||||
|
|
||||||
|
void GetAttributes(uint sfgaoMask, out uint psfgaoAttribs);
|
||||||
|
|
||||||
|
void Compare(IShellItem psi, uint hint, out int piOrder);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,7 +19,7 @@ namespace Wox.Infrastructure.Image
|
|||||||
|
|
||||||
private readonly ConcurrentDictionary<string, ImageSource> _data = new ConcurrentDictionary<string, ImageSource>();
|
private readonly ConcurrentDictionary<string, ImageSource> _data = new ConcurrentDictionary<string, ImageSource>();
|
||||||
|
|
||||||
public ConcurrentDictionary<string, int> Usage { get; set; } = new ConcurrentDictionary<string, int>();
|
public ConcurrentDictionary<string, int> Usage { get; private set; } = new ConcurrentDictionary<string, int>();
|
||||||
|
|
||||||
public ImageSource this[string path]
|
public ImageSource this[string path]
|
||||||
{
|
{
|
||||||
@@ -44,7 +44,8 @@ namespace Wox.Infrastructure.Image
|
|||||||
// To delete the images from the data dictionary based on the resizing of the Usage Dictionary.
|
// To delete the images from the data dictionary based on the resizing of the Usage Dictionary.
|
||||||
foreach (var key in _data.Keys)
|
foreach (var key in _data.Keys)
|
||||||
{
|
{
|
||||||
if (!Usage.TryGetValue(key, out _) && !(key.Equals(Constant.ErrorIcon) || key.Equals(Constant.DefaultIcon) || key.Equals(Constant.LightThemedErrorIcon) || key.Equals(Constant.LightThemedDefaultIcon)))
|
// Using Ordinal since this is internal
|
||||||
|
if (!Usage.TryGetValue(key, out _) && !(key.Equals(Constant.ErrorIcon, StringComparison.Ordinal) || key.Equals(Constant.DefaultIcon, StringComparison.Ordinal) || key.Equals(Constant.LightThemedErrorIcon, StringComparison.Ordinal) || key.Equals(Constant.LightThemedDefaultIcon, StringComparison.Ordinal)))
|
||||||
{
|
{
|
||||||
_data.TryRemove(key, out _);
|
_data.TryRemove(key, out _);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,14 +4,18 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using System.Windows.Media.Imaging;
|
using System.Windows.Media.Imaging;
|
||||||
|
using Wox.Plugin.Logger;
|
||||||
|
|
||||||
namespace Wox.Infrastructure.Image
|
namespace Wox.Infrastructure.Image
|
||||||
{
|
{
|
||||||
public class ImageHashGenerator : IImageHashGenerator
|
public class ImageHashGenerator : IImageHashGenerator
|
||||||
{
|
{
|
||||||
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Suppressing this to enable FxCop. We are logging the exception, and going forward general exceptions should not be caught")]
|
||||||
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Security", "CA5350:Do Not Use Weak Cryptographic Algorithms", Justification = "Level of protection needed for the image data does not require a security guarantee")]
|
||||||
public string GetHashFromImage(ImageSource imageSource)
|
public string GetHashFromImage(ImageSource imageSource)
|
||||||
{
|
{
|
||||||
if (!(imageSource is BitmapSource image))
|
if (!(imageSource is BitmapSource image))
|
||||||
@@ -38,8 +42,9 @@ namespace Wox.Infrastructure.Image
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch (System.Exception e)
|
||||||
{
|
{
|
||||||
|
Log.Exception($"Failed to get hash from image", e, MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
@@ -113,6 +114,7 @@ namespace Wox.Infrastructure.Image
|
|||||||
Cache,
|
Cache,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Suppressing this to enable FxCop. We are logging the exception, and going forward general exceptions should not be caught")]
|
||||||
private static ImageResult LoadInternal(string path, bool loadFullImage = false)
|
private static ImageResult LoadInternal(string path, bool loadFullImage = false)
|
||||||
{
|
{
|
||||||
ImageSource image;
|
ImageSource image;
|
||||||
@@ -154,7 +156,10 @@ namespace Wox.Infrastructure.Image
|
|||||||
}
|
}
|
||||||
else if (File.Exists(path))
|
else if (File.Exists(path))
|
||||||
{
|
{
|
||||||
var extension = Path.GetExtension(path).ToLower();
|
#pragma warning disable CA1308 // Normalize strings to uppercase. Reason: extension is used with the enum ImageExtensions, which contains all lowercase values
|
||||||
|
// Using InvariantCulture since this is internal
|
||||||
|
var extension = Path.GetExtension(path).ToLower(CultureInfo.InvariantCulture);
|
||||||
|
#pragma warning restore CA1308 // Normalize strings to uppercase
|
||||||
if (ImageExtensions.Contains(extension))
|
if (ImageExtensions.Contains(extension))
|
||||||
{
|
{
|
||||||
type = ImageType.ImageFile;
|
type = ImageType.ImageFile;
|
||||||
@@ -200,7 +205,7 @@ namespace Wox.Infrastructure.Image
|
|||||||
return new ImageResult(image, type);
|
return new ImageResult(image, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static readonly bool _enableImageHash = true;
|
private const bool _enableImageHash = true;
|
||||||
|
|
||||||
public static ImageSource Load(string path, bool loadFullImage = false)
|
public static ImageSource Load(string path, bool loadFullImage = false)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Wox.Infrastructure.Image
|
||||||
|
{
|
||||||
|
internal static class NativeMethods
|
||||||
|
{
|
||||||
|
[DllImport("shell32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
||||||
|
internal static extern int SHCreateItemFromParsingName(
|
||||||
|
[MarshalAs(UnmanagedType.LPWStr)] string path,
|
||||||
|
IntPtr pbc,
|
||||||
|
ref Guid riid,
|
||||||
|
[MarshalAs(UnmanagedType.Interface)] out IShellItem shellItem);
|
||||||
|
|
||||||
|
[DllImport("gdi32.dll")]
|
||||||
|
[return: MarshalAs(UnmanagedType.Bool)]
|
||||||
|
internal static extern bool DeleteObject(IntPtr hObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,54 +22,11 @@ namespace Wox.Infrastructure.Image
|
|||||||
InCacheOnly = 0x10,
|
InCacheOnly = 0x10,
|
||||||
}
|
}
|
||||||
|
|
||||||
public class WindowsThumbnailProvider
|
public static class WindowsThumbnailProvider
|
||||||
{
|
{
|
||||||
// Based on https://stackoverflow.com/questions/21751747/extract-thumbnail-for-any-file-in-windows
|
// Based on https://stackoverflow.com/questions/21751747/extract-thumbnail-for-any-file-in-windows
|
||||||
private const string IShellItem2Guid = "7E9FB0D3-919F-4307-AB2E-9B1860310C93";
|
private const string IShellItem2Guid = "7E9FB0D3-919F-4307-AB2E-9B1860310C93";
|
||||||
|
|
||||||
[DllImport("shell32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
|
||||||
internal static extern int SHCreateItemFromParsingName(
|
|
||||||
[MarshalAs(UnmanagedType.LPWStr)] string path,
|
|
||||||
IntPtr pbc,
|
|
||||||
ref Guid riid,
|
|
||||||
[MarshalAs(UnmanagedType.Interface)] out IShellItem shellItem);
|
|
||||||
|
|
||||||
[DllImport("gdi32.dll")]
|
|
||||||
[return: MarshalAs(UnmanagedType.Bool)]
|
|
||||||
internal static extern bool DeleteObject(IntPtr hObject);
|
|
||||||
|
|
||||||
[ComImport]
|
|
||||||
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
|
||||||
[Guid("43826d1e-e718-42ee-bc55-a1e261c37bfe")]
|
|
||||||
internal interface IShellItem
|
|
||||||
{
|
|
||||||
void BindToHandler(
|
|
||||||
IntPtr pbc,
|
|
||||||
[MarshalAs(UnmanagedType.LPStruct)] Guid bhid,
|
|
||||||
[MarshalAs(UnmanagedType.LPStruct)] Guid riid,
|
|
||||||
out IntPtr ppv);
|
|
||||||
|
|
||||||
void GetParent(out IShellItem ppsi);
|
|
||||||
|
|
||||||
void GetDisplayName(SIGDN sigdnName, out IntPtr ppszName);
|
|
||||||
|
|
||||||
void GetAttributes(uint sfgaoMask, out uint psfgaoAttribs);
|
|
||||||
|
|
||||||
void Compare(IShellItem psi, uint hint, out int piOrder);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal enum SIGDN : uint
|
|
||||||
{
|
|
||||||
NORMALDISPLAY = 0,
|
|
||||||
PARENTRELATIVEPARSING = 0x80018001,
|
|
||||||
PARENTRELATIVEFORADDRESSBAR = 0x8001c001,
|
|
||||||
DESKTOPABSOLUTEPARSING = 0x80028000,
|
|
||||||
PARENTRELATIVEEDITING = 0x80031001,
|
|
||||||
DESKTOPABSOLUTEEDITING = 0x8004c000,
|
|
||||||
FILESYSPATH = 0x80058000,
|
|
||||||
URL = 0x80068000,
|
|
||||||
}
|
|
||||||
|
|
||||||
internal enum HResult
|
internal enum HResult
|
||||||
{
|
{
|
||||||
Ok = 0x0000,
|
Ok = 0x0000,
|
||||||
@@ -128,14 +85,14 @@ namespace Wox.Infrastructure.Image
|
|||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
// delete HBitmap to avoid memory leaks
|
// delete HBitmap to avoid memory leaks
|
||||||
DeleteObject(hBitmap);
|
NativeMethods.DeleteObject(hBitmap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IntPtr GetHBitmap(string fileName, int width, int height, ThumbnailOptions options)
|
private static IntPtr GetHBitmap(string fileName, int width, int height, ThumbnailOptions options)
|
||||||
{
|
{
|
||||||
Guid shellItem2Guid = new Guid(IShellItem2Guid);
|
Guid shellItem2Guid = new Guid(IShellItem2Guid);
|
||||||
int retCode = SHCreateItemFromParsingName(fileName, IntPtr.Zero, ref shellItem2Guid, out IShellItem nativeShellItem);
|
int retCode = NativeMethods.SHCreateItemFromParsingName(fileName, IntPtr.Zero, ref shellItem2Guid, out IShellItem nativeShellItem);
|
||||||
|
|
||||||
if (retCode != 0)
|
if (retCode != 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -53,9 +53,9 @@ namespace Wox.Infrastructure
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets matched data to highlight.
|
/// Gets matched data to highlight.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<int> MatchData { get; set; }
|
public List<int> MatchData { get; private set; }
|
||||||
|
|
||||||
public SearchPrecisionScore SearchPrecision { get; set; }
|
public SearchPrecisionScore SearchPrecision { get; set; }
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ namespace Wox.Infrastructure
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static long Debug(string message, Action action)
|
public static long Debug(string message, Action action)
|
||||||
{
|
{
|
||||||
|
if (action == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(action));
|
||||||
|
}
|
||||||
|
|
||||||
var stopWatch = new System.Diagnostics.Stopwatch();
|
var stopWatch = new System.Diagnostics.Stopwatch();
|
||||||
stopWatch.Start();
|
stopWatch.Start();
|
||||||
action();
|
action();
|
||||||
@@ -31,6 +36,11 @@ namespace Wox.Infrastructure
|
|||||||
|
|
||||||
public static long Normal(string message, Action action)
|
public static long Normal(string message, Action action)
|
||||||
{
|
{
|
||||||
|
if (action == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(action));
|
||||||
|
}
|
||||||
|
|
||||||
var stopWatch = new System.Diagnostics.Stopwatch();
|
var stopWatch = new System.Diagnostics.Stopwatch();
|
||||||
stopWatch.Start();
|
stopWatch.Start();
|
||||||
action();
|
action();
|
||||||
@@ -43,6 +53,11 @@ namespace Wox.Infrastructure
|
|||||||
|
|
||||||
public static void StartCount(string name, Action action)
|
public static void StartCount(string name, Action action)
|
||||||
{
|
{
|
||||||
|
if (action == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(action));
|
||||||
|
}
|
||||||
|
|
||||||
var stopWatch = new System.Diagnostics.Stopwatch();
|
var stopWatch = new System.Diagnostics.Stopwatch();
|
||||||
stopWatch.Start();
|
stopWatch.Start();
|
||||||
action();
|
action();
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ namespace Wox.Infrastructure.Storage
|
|||||||
public class BinaryStorage<T> : IStorage<T>
|
public class BinaryStorage<T> : IStorage<T>
|
||||||
{
|
{
|
||||||
// This storage helper returns whether or not to delete the binary storage items
|
// This storage helper returns whether or not to delete the binary storage items
|
||||||
private static readonly int _binaryStorage = 0;
|
private const int _binaryStorage = 0;
|
||||||
private StoragePowerToysVersionInfo _storageHelper;
|
private StoragePowerToysVersionInfo _storageHelper;
|
||||||
|
|
||||||
public BinaryStorage(string filename)
|
public BinaryStorage(string filename)
|
||||||
@@ -75,6 +75,7 @@ namespace Wox.Infrastructure.Storage
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Suppressing this to enable FxCop. We are logging the exception, and going forward general exceptions should not be caught")]
|
||||||
private T Deserialize(FileStream stream, T defaultData)
|
private T Deserialize(FileStream stream, T defaultData)
|
||||||
{
|
{
|
||||||
// http://stackoverflow.com/questions/2120055/binaryformatter-deserialize-gives-serializationexception
|
// http://stackoverflow.com/questions/2120055/binaryformatter-deserialize-gives-serializationexception
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ using System.IO;
|
|||||||
namespace Wox.Infrastructure.Storage
|
namespace Wox.Infrastructure.Storage
|
||||||
{
|
{
|
||||||
// File System Watcher Wrapper class which implements the IFileSystemWatcherWrapper interface
|
// File System Watcher Wrapper class which implements the IFileSystemWatcherWrapper interface
|
||||||
public class FileSystemWatcherWrapper : FileSystemWatcher, IFileSystemWatcherWrapper
|
public sealed class FileSystemWatcherWrapper : FileSystemWatcher, IFileSystemWatcherWrapper
|
||||||
{
|
{
|
||||||
public FileSystemWatcherWrapper()
|
public FileSystemWatcherWrapper()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ namespace Wox.Infrastructure.Storage
|
|||||||
event RenamedEventHandler Renamed;
|
event RenamedEventHandler Renamed;
|
||||||
|
|
||||||
// Properties of File System watcher
|
// Properties of File System watcher
|
||||||
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "CA2227:Collection properties should be read only", Justification = "Abstract properties can not have private set")]
|
||||||
Collection<string> Filters { get; set; }
|
Collection<string> Filters { get; set; }
|
||||||
|
|
||||||
bool EnableRaisingEvents { get; set; }
|
bool EnableRaisingEvents { get; set; }
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ namespace Wox.Infrastructure.Storage
|
|||||||
|
|
||||||
bool Contains(T item);
|
bool Contains(T item);
|
||||||
|
|
||||||
void Set(IList<T> list);
|
void SetList(IList<T> list);
|
||||||
|
|
||||||
bool Any();
|
bool Any();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace Wox.Infrastructure.Storage
|
|||||||
public string DirectoryPath { get; set; }
|
public string DirectoryPath { get; set; }
|
||||||
|
|
||||||
// This storage helper returns whether or not to delete the json storage items
|
// This storage helper returns whether or not to delete the json storage items
|
||||||
private static readonly int _jsonStorage = 1;
|
private const int _jsonStorage = 1;
|
||||||
private StoragePowerToysVersionInfo _storageHelper;
|
private StoragePowerToysVersionInfo _storageHelper;
|
||||||
|
|
||||||
internal JsonStorage()
|
internal JsonStorage()
|
||||||
@@ -106,7 +106,8 @@ namespace Wox.Infrastructure.Storage
|
|||||||
|
|
||||||
private void BackupOriginFile()
|
private void BackupOriginFile()
|
||||||
{
|
{
|
||||||
var timestamp = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-fffffff", CultureInfo.CurrentUICulture);
|
// Using CurrentCulture since this is user facing
|
||||||
|
var timestamp = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-fffffff", CultureInfo.CurrentCulture);
|
||||||
var directory = Path.GetDirectoryName(FilePath).NonNull();
|
var directory = Path.GetDirectoryName(FilePath).NonNull();
|
||||||
var originName = Path.GetFileNameWithoutExtension(FilePath);
|
var originName = Path.GetFileNameWithoutExtension(FilePath);
|
||||||
var backupName = $"{originName}-{timestamp}{FileSuffix}";
|
var backupName = $"{originName}-{timestamp}{FileSuffix}";
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ namespace Wox.Infrastructure.Storage
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Set(IList<T> items)
|
public void SetList(IList<T> items)
|
||||||
{
|
{
|
||||||
// enforce that internal representation
|
// enforce that internal representation
|
||||||
try
|
try
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ namespace Wox.Infrastructure.Storage
|
|||||||
public class StoragePowerToysVersionInfo
|
public class StoragePowerToysVersionInfo
|
||||||
{
|
{
|
||||||
// This detail is accessed by the storage items and is used to decide if the cache must be deleted or not
|
// This detail is accessed by the storage items and is used to decide if the cache must be deleted or not
|
||||||
public bool ClearCache { get; set; } = false;
|
public bool ClearCache { get; set; }
|
||||||
|
|
||||||
private readonly string currentPowerToysVersion = string.Empty;
|
private readonly string currentPowerToysVersion = string.Empty;
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ namespace Wox.Infrastructure.Storage
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetFilePath(string associatedFilePath, int type)
|
private static string GetFilePath(string associatedFilePath, int type)
|
||||||
{
|
{
|
||||||
string suffix = string.Empty;
|
string suffix = string.Empty;
|
||||||
string cacheSuffix = ".cache";
|
string cacheSuffix = ".cache";
|
||||||
@@ -102,6 +102,11 @@ namespace Wox.Infrastructure.Storage
|
|||||||
|
|
||||||
public StoragePowerToysVersionInfo(string associatedFilePath, int type)
|
public StoragePowerToysVersionInfo(string associatedFilePath, int type)
|
||||||
{
|
{
|
||||||
|
if (associatedFilePath == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(associatedFilePath));
|
||||||
|
}
|
||||||
|
|
||||||
FilePath = GetFilePath(associatedFilePath, type);
|
FilePath = GetFilePath(associatedFilePath, type);
|
||||||
|
|
||||||
// Get the previous version of PowerToys and cache Storage details from the CacheDetails.json storage file
|
// Get the previous version of PowerToys and cache Storage details from the CacheDetails.json storage file
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
@@ -59,9 +60,16 @@ namespace Wox.Infrastructure
|
|||||||
return new MatchResult(false, UserSettingSearchPrecision);
|
return new MatchResult(false, UserSettingSearchPrecision);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (opt == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(opt));
|
||||||
|
}
|
||||||
|
|
||||||
query = query.Trim();
|
query = query.Trim();
|
||||||
var fullStringToCompareWithoutCase = opt.IgnoreCase ? stringToCompare.ToLower() : stringToCompare;
|
|
||||||
var queryWithoutCase = opt.IgnoreCase ? query.ToLower() : query;
|
// Using InvariantCulture since this is internal
|
||||||
|
var fullStringToCompareWithoutCase = opt.IgnoreCase ? stringToCompare.ToUpper(CultureInfo.InvariantCulture) : stringToCompare;
|
||||||
|
var queryWithoutCase = opt.IgnoreCase ? query.ToUpper(CultureInfo.InvariantCulture) : query;
|
||||||
|
|
||||||
var querySubstrings = queryWithoutCase.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
var querySubstrings = queryWithoutCase.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
int currentQuerySubstringIndex = 0;
|
int currentQuerySubstringIndex = 0;
|
||||||
@@ -160,7 +168,7 @@ namespace Wox.Infrastructure
|
|||||||
}
|
}
|
||||||
|
|
||||||
// To get the index of the closest space which preceeds the first matching index
|
// To get the index of the closest space which preceeds the first matching index
|
||||||
private int CalculateClosestSpaceIndex(List<int> spaceIndices, int firstMatchIndex)
|
private static int CalculateClosestSpaceIndex(List<int> spaceIndices, int firstMatchIndex)
|
||||||
{
|
{
|
||||||
if (spaceIndices.Count == 0)
|
if (spaceIndices.Count == 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ namespace Wox.Infrastructure.UserSettings
|
|||||||
{
|
{
|
||||||
public class HttpProxy
|
public class HttpProxy
|
||||||
{
|
{
|
||||||
public bool Enabled { get; set; } = false;
|
public bool Enabled { get; set; }
|
||||||
|
|
||||||
public string Server { get; set; }
|
public string Server { get; set; }
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
// 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;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Wox.Plugin;
|
using Wox.Plugin;
|
||||||
|
|
||||||
@@ -9,30 +10,34 @@ namespace Wox.Infrastructure.UserSettings
|
|||||||
{
|
{
|
||||||
public class PluginSettings : BaseModel
|
public class PluginSettings : BaseModel
|
||||||
{
|
{
|
||||||
public Dictionary<string, Plugin> Plugins { get; set; } = new Dictionary<string, Plugin>();
|
public Dictionary<string, RunPlugin> Plugins { get; private set; } = new Dictionary<string, RunPlugin>();
|
||||||
|
|
||||||
public void UpdatePluginSettings(List<PluginMetadata> metadatas)
|
public void UpdatePluginSettings(List<PluginMetadata> metadatas)
|
||||||
{
|
{
|
||||||
|
if (metadatas == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(metadatas));
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var metadata in metadatas)
|
foreach (var metadata in metadatas)
|
||||||
{
|
{
|
||||||
if (Plugins.ContainsKey(metadata.ID))
|
if (Plugins.ContainsKey(metadata.ID))
|
||||||
{
|
{
|
||||||
var settings = Plugins[metadata.ID];
|
var settings = Plugins[metadata.ID];
|
||||||
if (settings.ActionKeywords?.Count > 0)
|
if (settings.GetActionKeywords()?.Count > 0)
|
||||||
{
|
{
|
||||||
metadata.SetActionKeywords(settings.ActionKeywords);
|
metadata.SetActionKeywords(settings.GetActionKeywords());
|
||||||
metadata.ActionKeyword = settings.ActionKeywords[0];
|
metadata.ActionKeyword = settings.GetActionKeywords()[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
metadata.Disabled = settings.Disabled;
|
metadata.Disabled = settings.Disabled;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Plugins[metadata.ID] = new Plugin
|
Plugins[metadata.ID] = new RunPlugin(metadata.GetActionKeywords())
|
||||||
{
|
{
|
||||||
ID = metadata.ID,
|
ID = metadata.ID,
|
||||||
Name = metadata.Name,
|
Name = metadata.Name,
|
||||||
ActionKeywords = metadata.GetActionKeywords(),
|
|
||||||
Disabled = metadata.Disabled,
|
Disabled = metadata.Disabled,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ using Wox.Plugin;
|
|||||||
|
|
||||||
namespace Wox.Infrastructure.UserSettings
|
namespace Wox.Infrastructure.UserSettings
|
||||||
{
|
{
|
||||||
public class Settings : BaseModel
|
public class PowerToysRunSettings : BaseModel
|
||||||
{
|
{
|
||||||
private string _hotkey = "Alt + Space";
|
private string _hotkey = "Alt + Space";
|
||||||
private string _previousHotkey = string.Empty;
|
private string _previousHotkey = string.Empty;
|
||||||
@@ -95,7 +95,7 @@ namespace Wox.Infrastructure.UserSettings
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool AutoUpdates { get; set; } = false;
|
public bool AutoUpdates { get; set; }
|
||||||
|
|
||||||
public double WindowLeft { get; set; }
|
public double WindowLeft { get; set; }
|
||||||
|
|
||||||
@@ -126,13 +126,7 @@ namespace Wox.Infrastructure.UserSettings
|
|||||||
[JsonProperty(Order = 1)]
|
[JsonProperty(Order = 1)]
|
||||||
public PluginSettings PluginSettings { get; set; } = new PluginSettings();
|
public PluginSettings PluginSettings { get; set; } = new PluginSettings();
|
||||||
|
|
||||||
public ObservableCollection<CustomPluginHotkey> CustomPluginHotkeys { get; set; } = new ObservableCollection<CustomPluginHotkey>();
|
public ObservableCollection<CustomPluginHotkey> CustomPluginHotkeys { get; } = new ObservableCollection<CustomPluginHotkey>();
|
||||||
|
|
||||||
[Obsolete]
|
|
||||||
public double Opacity { get; set; } = 1;
|
|
||||||
|
|
||||||
[Obsolete]
|
|
||||||
public OpacityMode OpacityMode { get; set; } = OpacityMode.Normal;
|
|
||||||
|
|
||||||
public bool DontPromptUpdateMsg { get; set; }
|
public bool DontPromptUpdateMsg { get; set; }
|
||||||
|
|
||||||
@@ -162,7 +156,7 @@ namespace Wox.Infrastructure.UserSettings
|
|||||||
|
|
||||||
public bool HideWhenDeactivated { get; set; } = true;
|
public bool HideWhenDeactivated { get; set; } = true;
|
||||||
|
|
||||||
public bool ClearInputOnLaunch { get; set; } = false;
|
public bool ClearInputOnLaunch { get; set; }
|
||||||
|
|
||||||
public bool RememberLastLaunchLocation { get; set; }
|
public bool RememberLastLaunchLocation { get; set; }
|
||||||
|
|
||||||
@@ -182,12 +176,4 @@ namespace Wox.Infrastructure.UserSettings
|
|||||||
Empty,
|
Empty,
|
||||||
Preserved,
|
Preserved,
|
||||||
}
|
}
|
||||||
|
|
||||||
[Obsolete]
|
|
||||||
public enum OpacityMode
|
|
||||||
{
|
|
||||||
Normal = 0,
|
|
||||||
LayeredWindow = 1,
|
|
||||||
DWM = 2,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -6,13 +6,28 @@ using System.Collections.Generic;
|
|||||||
|
|
||||||
namespace Wox.Infrastructure.UserSettings
|
namespace Wox.Infrastructure.UserSettings
|
||||||
{
|
{
|
||||||
public class Plugin
|
public class RunPlugin
|
||||||
{
|
{
|
||||||
public string ID { get; set; }
|
public string ID { get; set; }
|
||||||
|
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
public List<string> ActionKeywords { get; set; } // a reference of the action keywords from plugin manager
|
private List<string> _actionKeywords;
|
||||||
|
|
||||||
|
public RunPlugin(List<string> actionKeywords = null)
|
||||||
|
{
|
||||||
|
_actionKeywords = actionKeywords;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<string> GetActionKeywords()
|
||||||
|
{
|
||||||
|
return _actionKeywords;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetActionKeywords(List<string> value)
|
||||||
|
{
|
||||||
|
_actionKeywords = value;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets a value indicating whether used only to save the state of the plugin in settings
|
/// Gets or sets a value indicating whether used only to save the state of the plugin in settings
|
||||||
@@ -56,6 +56,10 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="JetBrains.Annotations" Version="2020.1.0" />
|
<PackageReference Include="JetBrains.Annotations" Version="2020.1.0" />
|
||||||
|
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="3.3.0">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
<PackageReference Include="NLog.Schema" Version="4.7.4" />
|
<PackageReference Include="NLog.Schema" Version="4.7.4" />
|
||||||
<PackageReference Include="System.Drawing.Common" Version="4.7.0" />
|
<PackageReference Include="System.Drawing.Common" Version="4.7.0" />
|
||||||
<PackageReference Include="System.Runtime" Version="4.3.1" />
|
<PackageReference Include="System.Runtime" Version="4.3.1" />
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace Wox.Plugin.SharedCommands
|
|||||||
{
|
{
|
||||||
public static class FilesFolders
|
public static class FilesFolders
|
||||||
{
|
{
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Exception has been logged")]
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Suppressing this to enable FxCop. We are logging the exception, and going forward general exceptions should not be caught")]
|
||||||
public static void Copy(this string sourcePath, string targetPath)
|
public static void Copy(this string sourcePath, string targetPath)
|
||||||
{
|
{
|
||||||
// Get the subdirectories for the specified directory.
|
// Get the subdirectories for the specified directory.
|
||||||
@@ -67,7 +67,7 @@ namespace Wox.Plugin.SharedCommands
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Exception has been logged")]
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Suppressing this to enable FxCop. We are logging the exception, and going forward general exceptions should not be caught")]
|
||||||
public static bool VerifyBothFolderFilesEqual(this string fromPath, string toPath)
|
public static bool VerifyBothFolderFilesEqual(this string fromPath, string toPath)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -103,7 +103,7 @@ namespace Wox.Plugin.SharedCommands
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Exception has been logged")]
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Suppressing this to enable FxCop. We are logging the exception, and going forward general exceptions should not be caught")]
|
||||||
public static void RemoveFolder(this string path)
|
public static void RemoveFolder(this string path)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|||||||
Reference in New Issue
Block a user