mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-08 20:27:36 +02:00
Save when exit
1. fix image cache 2. fix save when exit since destructor won't be called 3. fix #583 #582 (partially) #581 (partially) #580
This commit is contained in:
@@ -13,7 +13,7 @@ using Control = System.Windows.Controls.Control;
|
|||||||
|
|
||||||
namespace Wox.Plugin.CMD
|
namespace Wox.Plugin.CMD
|
||||||
{
|
{
|
||||||
public class CMD : IPlugin, ISettingProvider, IPluginI18n, IInstantQuery, IContextMenu
|
public class CMD : IPlugin, ISettingProvider, IPluginI18n, IContextMenu
|
||||||
{
|
{
|
||||||
private PluginInitContext context;
|
private PluginInitContext context;
|
||||||
private bool WinRStroked;
|
private bool WinRStroked;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ using Wox.Plugin.Everything.Everything;
|
|||||||
|
|
||||||
namespace Wox.Plugin.Everything
|
namespace Wox.Plugin.Everything
|
||||||
{
|
{
|
||||||
public class Main : IPlugin, IPluginI18n, IContextMenu
|
public class Main : IPlugin, IPluginI18n, IContextMenu, ISavable
|
||||||
{
|
{
|
||||||
private readonly EverythingAPI _api = new EverythingAPI();
|
private readonly EverythingAPI _api = new EverythingAPI();
|
||||||
private static readonly List<string> ImageExts = new List<string> { ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff", ".ico" };
|
private static readonly List<string> ImageExts = new List<string> { ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff", ".ico" };
|
||||||
@@ -34,7 +34,7 @@ namespace Wox.Plugin.Everything
|
|||||||
_settings = _storage.Load();
|
_settings = _storage.Load();
|
||||||
}
|
}
|
||||||
|
|
||||||
~Main()
|
public void Save()
|
||||||
{
|
{
|
||||||
_storage.Save();
|
_storage.Save();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ using Wox.Infrastructure.Storage;
|
|||||||
|
|
||||||
namespace Wox.Plugin.Folder
|
namespace Wox.Plugin.Folder
|
||||||
{
|
{
|
||||||
public class FolderPlugin : IPlugin, ISettingProvider, IPluginI18n
|
public class FolderPlugin : IPlugin, ISettingProvider, IPluginI18n, ISavable
|
||||||
{
|
{
|
||||||
private static List<string> driverNames;
|
private static List<string> driverNames;
|
||||||
private PluginInitContext context;
|
private PluginInitContext context;
|
||||||
@@ -23,7 +23,7 @@ namespace Wox.Plugin.Folder
|
|||||||
_settings = _storage.Load();
|
_settings = _storage.Load();
|
||||||
}
|
}
|
||||||
|
|
||||||
~FolderPlugin()
|
public void Save()
|
||||||
{
|
{
|
||||||
_storage.Save();
|
_storage.Save();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ using Stopwatch = Wox.Infrastructure.Stopwatch;
|
|||||||
|
|
||||||
namespace Wox.Plugin.Program
|
namespace Wox.Plugin.Program
|
||||||
{
|
{
|
||||||
public class Programs : ISettingProvider, IPlugin, IPluginI18n, IContextMenu
|
public class Programs : ISettingProvider, IPlugin, IPluginI18n, IContextMenu, ISavable
|
||||||
{
|
{
|
||||||
private static object lockObject = new object();
|
private static object lockObject = new object();
|
||||||
private static List<Program> _programs = new List<Program>();
|
private static List<Program> _programs = new List<Program>();
|
||||||
@@ -42,7 +42,7 @@ namespace Wox.Plugin.Program
|
|||||||
_cache = _cacheStorage.Load();
|
_cache = _cacheStorage.Load();
|
||||||
}
|
}
|
||||||
|
|
||||||
~Programs()
|
public void Save()
|
||||||
{
|
{
|
||||||
_settingsStorage.Save();
|
_settingsStorage.Save();
|
||||||
_cacheStorage.Save();
|
_cacheStorage.Save();
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ using Wox.Plugin.WebSearch.SuggestionSources;
|
|||||||
|
|
||||||
namespace Wox.Plugin.WebSearch
|
namespace Wox.Plugin.WebSearch
|
||||||
{
|
{
|
||||||
public class WebSearchPlugin : IPlugin, ISettingProvider, IPluginI18n, IInstantQuery, IMultipleActionKeywords
|
public class WebSearchPlugin : IPlugin, ISettingProvider, IPluginI18n, IMultipleActionKeywords, ISavable
|
||||||
{
|
{
|
||||||
public PluginInitContext Context { get; private set; }
|
public PluginInitContext Context { get; private set; }
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ namespace Wox.Plugin.WebSearch
|
|||||||
_settings = _storage.Load();
|
_settings = _storage.Load();
|
||||||
}
|
}
|
||||||
|
|
||||||
~WebSearchPlugin()
|
public void Save()
|
||||||
{
|
{
|
||||||
_storage.Save();
|
_storage.Save();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ using Wox.Core.UserSettings;
|
|||||||
using Wox.Infrastructure;
|
using Wox.Infrastructure;
|
||||||
using Wox.Infrastructure.Exception;
|
using Wox.Infrastructure.Exception;
|
||||||
using Wox.Infrastructure.Logger;
|
using Wox.Infrastructure.Logger;
|
||||||
|
using Wox.Infrastructure.Storage;
|
||||||
using Wox.Plugin;
|
using Wox.Plugin;
|
||||||
|
|
||||||
namespace Wox.Core.Plugin
|
namespace Wox.Core.Plugin
|
||||||
@@ -50,6 +51,15 @@ namespace Wox.Core.Plugin
|
|||||||
ValidateUserDirectory();
|
ValidateUserDirectory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void Save()
|
||||||
|
{
|
||||||
|
foreach (var plugin in AllPlugins)
|
||||||
|
{
|
||||||
|
var savable = plugin.Plugin as ISavable;
|
||||||
|
savable?.Save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void InitializePlugins(IPublicAPI api)
|
public static void InitializePlugins(IPublicAPI api)
|
||||||
{
|
{
|
||||||
var metadatas = PluginConfig.Parse(Directories);
|
var metadatas = PluginConfig.Parse(Directories);
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ using System.Windows;
|
|||||||
using System.Windows.Interop;
|
using System.Windows.Interop;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using System.Windows.Media.Imaging;
|
using System.Windows.Media.Imaging;
|
||||||
|
using Wox.Infrastructure.Logger;
|
||||||
using Wox.Infrastructure.Storage;
|
using Wox.Infrastructure.Storage;
|
||||||
|
|
||||||
namespace Wox.Infrastructure.Image
|
namespace Wox.Infrastructure.Image
|
||||||
@@ -71,7 +72,7 @@ namespace Wox.Infrastructure.Image
|
|||||||
|
|
||||||
public static void PreloadImages()
|
public static void PreloadImages()
|
||||||
{
|
{
|
||||||
Stopwatch.Debug($"Preload {_cache.TopUsedImages.Count} images", () =>
|
Stopwatch.Debug("Preload images from cache", () =>
|
||||||
{
|
{
|
||||||
_cache.TopUsedImages.AsParallel().Where(i => !_imageSources.ContainsKey(i.Key)).ForAll(i =>
|
_cache.TopUsedImages.AsParallel().Where(i => !_imageSources.ContainsKey(i.Key)).ForAll(i =>
|
||||||
{
|
{
|
||||||
@@ -87,6 +88,7 @@ namespace Wox.Infrastructure.Image
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Log.Info($"Preload {_cache.TopUsedImages.Count} images from cache");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ImageSource Load(string path, bool addToCache = true)
|
public static ImageSource Load(string path, bool addToCache = true)
|
||||||
|
|||||||
11
Wox.Infrastructure/Storage/ISavable.cs
Normal file
11
Wox.Infrastructure/Storage/ISavable.cs
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
namespace Wox.Infrastructure.Storage
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Save plugin settings/cache,
|
||||||
|
/// todo should be merged into a abstract class intead of seperate interface
|
||||||
|
/// </summary>
|
||||||
|
public interface ISavable
|
||||||
|
{
|
||||||
|
void Save();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -78,6 +78,7 @@
|
|||||||
<Compile Include="Image\ImageCache.cs" />
|
<Compile Include="Image\ImageCache.cs" />
|
||||||
<Compile Include="Image\ImageLoader.cs" />
|
<Compile Include="Image\ImageLoader.cs" />
|
||||||
<Compile Include="Logger\Log.cs" />
|
<Compile Include="Logger\Log.cs" />
|
||||||
|
<Compile Include="Storage\ISavable.cs" />
|
||||||
<Compile Include="Storage\PluginSettingsStorage.cs" />
|
<Compile Include="Storage\PluginSettingsStorage.cs" />
|
||||||
<Compile Include="Storage\Storage.cs" />
|
<Compile Include="Storage\Storage.cs" />
|
||||||
<Compile Include="Stopwatch.cs" />
|
<Compile Include="Stopwatch.cs" />
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
<Application x:Class="Wox.App"
|
<Application x:Class="Wox.App"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
Exit="OnExit"
|
||||||
|
SessionEnding="OnSessionEnding">
|
||||||
<Application.Resources>
|
<Application.Resources>
|
||||||
<ResourceDictionary>
|
<ResourceDictionary>
|
||||||
<ResourceDictionary.MergedDictionaries>
|
<ResourceDictionary.MergedDictionaries>
|
||||||
|
|||||||
@@ -13,11 +13,12 @@ using Stopwatch = Wox.Infrastructure.Stopwatch;
|
|||||||
|
|
||||||
namespace Wox
|
namespace Wox
|
||||||
{
|
{
|
||||||
public partial class App : Application, ISingleInstanceApp
|
public partial class App : ISingleInstanceApp
|
||||||
{
|
{
|
||||||
private const string Unique = "Wox_Unique_Application_Mutex";
|
private const string Unique = "Wox_Unique_Application_Mutex";
|
||||||
public static MainWindow Window { get; private set; }
|
public static MainWindow Window { get; private set; }
|
||||||
public static PublicAPIInstance API { get; private set; }
|
public static PublicAPIInstance API { get; private set; }
|
||||||
|
private bool _saved;
|
||||||
|
|
||||||
[STAThread]
|
[STAThread]
|
||||||
public static void Main()
|
public static void Main()
|
||||||
@@ -71,5 +72,29 @@ namespace Wox
|
|||||||
CommandArgsFactory.Execute(args);
|
CommandArgsFactory.Execute(args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnExit(object sender, ExitEventArgs e)
|
||||||
|
{
|
||||||
|
Save();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnSessionEnding(object sender, SessionEndingCancelEventArgs e)
|
||||||
|
{
|
||||||
|
Save();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Save()
|
||||||
|
{
|
||||||
|
// if sessionending is called, exit proverbially be called when log off / shutdown
|
||||||
|
// but if sessionending is not called, exit won't be called when log off / shutdown
|
||||||
|
if (!_saved)
|
||||||
|
{
|
||||||
|
var vm = (MainViewModel) Window.DataContext;
|
||||||
|
vm.Save();
|
||||||
|
PluginManager.Save();
|
||||||
|
ImageLoader.Save();
|
||||||
|
_saved = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ using Wox.Storage;
|
|||||||
|
|
||||||
namespace Wox.ViewModel
|
namespace Wox.ViewModel
|
||||||
{
|
{
|
||||||
public class MainViewModel : BaseViewModel
|
public class MainViewModel : BaseViewModel, ISavable
|
||||||
{
|
{
|
||||||
#region Private Fields
|
#region Private Fields
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ namespace Wox.ViewModel
|
|||||||
InitializeKeyCommands();
|
InitializeKeyCommands();
|
||||||
}
|
}
|
||||||
|
|
||||||
~MainViewModel()
|
public void Save()
|
||||||
{
|
{
|
||||||
_settingsStorage.Save();
|
_settingsStorage.Save();
|
||||||
_queryHistoryStorage.Save();
|
_queryHistoryStorage.Save();
|
||||||
|
|||||||
Reference in New Issue
Block a user