diff --git a/Plugins/Wox.Plugin.Everything/Main.cs b/Plugins/Wox.Plugin.Everything/Main.cs index 104057c017..12192da14a 100644 --- a/Plugins/Wox.Plugin.Everything/Main.cs +++ b/Plugins/Wox.Plugin.Everything/Main.cs @@ -6,6 +6,7 @@ using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Windows; +using Wox.Infrastructure; using Wox.Infrastructure.Storage; using Wox.Plugin.Everything.Everything; @@ -15,9 +16,7 @@ namespace Wox.Plugin.Everything { private readonly EverythingAPI _api = new EverythingAPI(); - public const string SDK = "EverythingSDK"; public const string DLL = "Everything.dll"; - internal static string SDKPath; private PluginInitContext _context; @@ -130,34 +129,16 @@ namespace Wox.Plugin.Everything _settings = _storage.Load(); var pluginDirectory = context.CurrentPluginMetadata.PluginDirectory; - var bundledSDKDirectory = Path.Combine(pluginDirectory, SDK, CpuType()); - var bundledSDKPath = Path.Combine(bundledSDKDirectory, DLL); + const string sdk = "EverythingSDK"; + var bundledSDKDirectory = Path.Combine(pluginDirectory, sdk, CpuType()); + var sdkDirectory = Path.Combine(_storage.DirectoryPath, sdk, CpuType()); + Helper.ValidateDataDirectory(bundledSDKDirectory, sdkDirectory); - var SDKDirectory = Path.Combine(_storage.DirectoryPath, SDK, CpuType()); - SDKPath = Path.Combine(SDKDirectory, DLL); - if (!Directory.Exists(SDKDirectory)) - { - Directory.CreateDirectory(SDKDirectory); - } - - if (!File.Exists(SDKPath)) - { - File.Copy(bundledSDKPath, SDKPath); - } - else - { - var newSDK = new FileInfo(bundledSDKPath).LastWriteTimeUtc; - var oldSDK = new FileInfo(SDKPath).LastWriteTimeUtc; - if (oldSDK != newSDK) - { - File.Copy(bundledSDKPath, SDKPath, true); - } - } - - LoadLibrary(SDKPath); + var sdkPath = Path.Combine(sdkDirectory, DLL); + LoadLibrary(sdkPath); } - private string CpuType() + private static string CpuType() { return Environment.Is64BitOperatingSystem ? "x64" : "x86"; } diff --git a/Plugins/Wox.Plugin.WebSearch/Main.cs b/Plugins/Wox.Plugin.WebSearch/Main.cs index 21c25856e3..5d08fa5acc 100644 --- a/Plugins/Wox.Plugin.WebSearch/Main.cs +++ b/Plugins/Wox.Plugin.WebSearch/Main.cs @@ -1,11 +1,13 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; using System.Windows.Controls; using JetBrains.Annotations; +using Wox.Infrastructure; using Wox.Infrastructure.Storage; using Wox.Plugin.WebSearch.SuggestionSources; @@ -20,8 +22,8 @@ namespace Wox.Plugin.WebSearch private CancellationTokenSource _updateSource; private CancellationToken _updateToken; - public const string ImageDirectory = "Images"; - public static string PluginDirectory; + public const string Images = "Images"; + public static string ImagesDirectory; public void Save() { @@ -86,7 +88,7 @@ namespace Wox.Plugin.WebSearch var task = Task.Run(() => { results.AddRange(ResultsFromSuggestions(keyword, subtitle, webSearch)); - + }, _updateToken); if (!task.Wait(waittime)) @@ -123,12 +125,24 @@ namespace Wox.Plugin.WebSearch return new List(); } + static Main() + { + var plugins = Infrastructure.Wox.Plugins; + var assemblyName = typeof(Main).Assembly.GetName().Name; + var pluginDirectory = Path.Combine(Infrastructure.Wox.SettingsPath, plugins, assemblyName); + ImagesDirectory = Path.Combine(pluginDirectory, Images); + } + public void Init(PluginInitContext context) { Context = context; - PluginDirectory = Context.CurrentPluginMetadata.PluginDirectory; + _storage = new PluginJsonStorage(); _settings = _storage.Load(); + + var pluginDirectory = context.CurrentPluginMetadata.PluginDirectory; + var bundledImagesDirectory = Path.Combine(pluginDirectory, Images); + Helper.ValidateDataDirectory(bundledImagesDirectory, ImagesDirectory); } #region ISettingProvider Members diff --git a/Plugins/Wox.Plugin.WebSearch/WebSearch.cs b/Plugins/Wox.Plugin.WebSearch/WebSearch.cs index cfc1555e2d..0b645a990e 100644 --- a/Plugins/Wox.Plugin.WebSearch/WebSearch.cs +++ b/Plugins/Wox.Plugin.WebSearch/WebSearch.cs @@ -20,7 +20,7 @@ namespace Wox.Plugin.WebSearch set { _icon = value; - IconPath = Path.Combine(Main.PluginDirectory, Main.ImageDirectory, value); + IconPath = Path.Combine(Main.ImagesDirectory, value); } } @@ -31,7 +31,7 @@ namespace Wox.Plugin.WebSearch [JsonIgnore] internal string IconPath { get; private set; } = Path.Combine ( - Main.PluginDirectory, Main.ImageDirectory, DefaultIcon + Main.ImagesDirectory, DefaultIcon ); public string Url { get; set; } diff --git a/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml.cs b/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml.cs index fe8e21d15f..45e5335659 100644 --- a/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml.cs +++ b/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml.cs @@ -120,7 +120,7 @@ namespace Wox.Plugin.WebSearch private void SelectIconButtonOnClick(object sender, RoutedEventArgs e) { - var directory = Path.Combine(Main.PluginDirectory, Main.ImageDirectory); + var directory = Path.Combine(Main.ImagesDirectory, Main.Images); var dlg = new OpenFileDialog { InitialDirectory = directory, diff --git a/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj b/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj index 99d4a45e89..e46fb6ccf8 100644 --- a/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj +++ b/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj @@ -45,6 +45,7 @@ + diff --git a/Wox.Infrastructure/Helper.cs b/Wox.Infrastructure/Helper.cs index 0476d337b2..e5123c16a2 100644 --- a/Wox.Infrastructure/Helper.cs +++ b/Wox.Infrastructure/Helper.cs @@ -1,13 +1,14 @@ using System; +using System.IO; namespace Wox.Infrastructure { - static class Helper + public static class Helper { /// /// http://www.yinwang.org/blog-cn/2015/11/21/programming-philosophy /// - public static T RequireNonNull(this T obj) + public static T NonNull(this T obj) { if (obj == null) { @@ -18,5 +19,41 @@ namespace Wox.Infrastructure return obj; } } + + public static void RequireNonNull(this T obj) + { + if (obj == null) + { + throw new NullReferenceException(); + } + } + + public static void ValidateDataDirectory(string bundledDataDirectory, string dataDirectory) + { + + if (!Directory.Exists(dataDirectory)) + { + Directory.CreateDirectory(dataDirectory); + } + + foreach (var bundledDataPath in Directory.GetFiles(bundledDataDirectory)) + { + var data = Path.GetFileName(bundledDataPath); + var dataPath = Path.Combine(dataDirectory, data.NonNull()); + if (!File.Exists(dataPath)) + { + File.Copy(bundledDataPath, dataPath); + } + else + { + var time1 = new FileInfo(bundledDataPath).LastWriteTimeUtc; + var time2 = new FileInfo(dataPath).LastWriteTimeUtc; + if (time1 != time2) + { + File.Copy(bundledDataPath, dataPath, true); + } + } + } + } } } diff --git a/Wox.Infrastructure/Logger/Log.cs b/Wox.Infrastructure/Logger/Log.cs index ef11598688..9931d1daeb 100644 --- a/Wox.Infrastructure/Logger/Log.cs +++ b/Wox.Infrastructure/Logger/Log.cs @@ -29,10 +29,10 @@ namespace Wox.Infrastructure.Logger private static string CallerType() { var stackTrace = new StackTrace(); - var stackFrames = stackTrace.GetFrames().RequireNonNull(); + var stackFrames = stackTrace.GetFrames().NonNull(); var callingFrame = stackFrames[2]; var method = callingFrame.GetMethod(); - var type = $"{method.DeclaringType.RequireNonNull().FullName}.{method.Name}"; + var type = $"{method.DeclaringType.NonNull().FullName}.{method.Name}"; return type; } public static void Error(System.Exception e) diff --git a/Wox.Infrastructure/Storage/JsonStorage.cs b/Wox.Infrastructure/Storage/JsonStorage.cs index 3cfd29e106..b67c022302 100644 --- a/Wox.Infrastructure/Storage/JsonStorage.cs +++ b/Wox.Infrastructure/Storage/JsonStorage.cs @@ -1,5 +1,6 @@ using System.IO; using Newtonsoft.Json; +using Wox.Infrastructure; using Wox.Infrastructure.Logger; namespace Wox.Infrastructure.Storage @@ -14,8 +15,8 @@ namespace Wox.Infrastructure.Storage internal JsonStrorage() { FileSuffix = ".json"; - DirectoryName = "Settings"; - DirectoryPath = Path.Combine(DirectoryPath, DirectoryName); + DirectoryName = Wox.Settings; + DirectoryPath = Wox.SettingsPath; FilePath = Path.Combine(DirectoryPath, FileName + FileSuffix); ValidateDirectory(); diff --git a/Wox.Infrastructure/Wox.cs b/Wox.Infrastructure/Wox.cs index cbda123f0a..94a5c45db5 100644 --- a/Wox.Infrastructure/Wox.cs +++ b/Wox.Infrastructure/Wox.cs @@ -8,9 +8,12 @@ namespace Wox.Infrastructure { public const string Name = "Wox"; public const string Plugins = "Plugins"; + public const string Settings = "Settings"; + public static readonly string ProgramPath = Directory.GetParent(Assembly.GetExecutingAssembly().Location).ToString(); public static readonly string DataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), Name); public static readonly string UserDirectory = Path.Combine(DataPath, Plugins); public static readonly string PreinstalledDirectory = Path.Combine(ProgramPath, Plugins); + public static readonly string SettingsPath = Path.Combine(DataPath, Settings); } }