Skip to content

Commit 8ca6299

Browse files
Jack251970TBM13
authored andcommitted
Merge pull request Flow-Launcher#3795 from Flow-Launcher/check_plugin_modified
Check plugin modified state for more lists and improve code quality
1 parent 4e7feaf commit 8ca6299

File tree

3 files changed

+30
-16
lines changed

3 files changed

+30
-16
lines changed

Flow.Launcher.Core/Plugin/PluginManager.cs

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@ public static class PluginManager
2424
{
2525
private static readonly string ClassName = nameof(PluginManager);
2626

27-
private static IEnumerable<PluginPair> _contextMenuPlugins;
28-
private static IEnumerable<PluginPair> _homePlugins;
29-
3027
public static List<PluginPair> AllPlugins { get; private set; }
3128
public static readonly HashSet<PluginPair> GlobalPlugins = new();
3229
public static readonly Dictionary<string, PluginPair> NonGlobalPlugins = new();
@@ -36,8 +33,11 @@ public static class PluginManager
3633
private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService<IPublicAPI>();
3734

3835
private static PluginsSettings Settings;
39-
private static List<PluginMetadata> _metadatas;
40-
private static readonly List<string> _modifiedPlugins = new();
36+
37+
private static IEnumerable<PluginPair> _contextMenuPlugins;
38+
private static IEnumerable<PluginPair> _homePlugins;
39+
private static IEnumerable<PluginPair> _resultUpdatePlugin;
40+
private static IEnumerable<PluginPair> _translationPlugins;
4141

4242
/// <summary>
4343
/// Directories that will hold Flow Launcher plugin directory
@@ -162,12 +162,18 @@ static PluginManager()
162162
/// <param name="settings"></param>
163163
public static void LoadPlugins(PluginsSettings settings)
164164
{
165-
_metadatas = PluginConfig.Parse(Directories);
165+
var metadatas = PluginConfig.Parse(Directories);
166166
Settings = settings;
167-
Settings.UpdatePluginSettings(_metadatas);
168-
AllPlugins = PluginsLoader.Plugins(_metadatas, Settings);
167+
Settings.UpdatePluginSettings(metadatas);
168+
AllPlugins = PluginsLoader.Plugins(metadatas, Settings);
169169
// Since dotnet plugins need to get assembly name first, we should update plugin directory after loading plugins
170-
UpdatePluginDirectory(_metadatas);
170+
UpdatePluginDirectory(metadatas);
171+
172+
// Initialize plugin enumerable after all plugins are initialized
173+
_contextMenuPlugins = GetPluginsForInterface<IContextMenu>();
174+
_homePlugins = GetPluginsForInterface<IAsyncHomeQuery>();
175+
_resultUpdatePlugin = GetPluginsForInterface<IResultUpdated>();
176+
_translationPlugins = GetPluginsForInterface<IPluginI18n>();
171177
}
172178

173179
private static void UpdatePluginDirectory(List<PluginMetadata> metadatas)
@@ -237,9 +243,6 @@ public static async Task InitializePluginsAsync()
237243

238244
await Task.WhenAll(InitTasks);
239245

240-
_contextMenuPlugins = GetPluginsForInterface<IContextMenu>();
241-
_homePlugins = GetPluginsForInterface<IAsyncHomeQuery>();
242-
243246
foreach (var plugin in AllPlugins)
244247
{
245248
// set distinct on each plugin's action keywords helps only firing global(*) and action keywords once where a plugin
@@ -393,12 +396,22 @@ public static PluginPair GetPluginForId(string id)
393396
return AllPlugins.FirstOrDefault(o => o.Metadata.ID == id);
394397
}
395398

396-
public static IEnumerable<PluginPair> GetPluginsForInterface<T>() where T : IFeatures
399+
private static IEnumerable<PluginPair> GetPluginsForInterface<T>() where T : IFeatures
397400
{
398401
// Handle scenario where this is called before all plugins are instantiated, e.g. language change on startup
399402
return AllPlugins?.Where(p => p.Plugin is T) ?? Array.Empty<PluginPair>();
400403
}
401404

405+
public static IList<PluginPair> GetResultUpdatePlugin()
406+
{
407+
return _resultUpdatePlugin.ToList();
408+
}
409+
410+
public static IList<PluginPair> GetTranslationPlugins()
411+
{
412+
return _translationPlugins.ToList();
413+
}
414+
402415
public static List<Result> GetContextMenusForPlugin(Result result)
403416
{
404417
var results = new List<Result>();

Flow.Launcher.Core/Resource/Internationalization.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public static void InitSystemLanguageCode()
5151

5252
private void AddPluginLanguageDirectories()
5353
{
54-
foreach (var plugin in PluginManager.GetPluginsForInterface<IPluginI18n>())
54+
foreach (var plugin in PluginManager.GetTranslationPlugins())
5555
{
5656
var location = Assembly.GetAssembly(plugin.Plugin.GetType()).Location;
5757
var dir = Path.GetDirectoryName(location);
@@ -228,7 +228,8 @@ public static string GetTranslation(string key)
228228

229229
private void UpdatePluginMetadataTranslations()
230230
{
231-
foreach (var p in PluginManager.GetPluginsForInterface<IPluginI18n>())
231+
// Update plugin metadata name & description
232+
foreach (var p in PluginManager.GetTranslationPlugins())
232233
{
233234
if (p.Plugin is not IPluginI18n pluginI18N) return;
234235
try

Flow.Launcher/ViewModel/MainViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ void continueAction(Task t)
232232

233233
public void RegisterResultsUpdatedEvent()
234234
{
235-
foreach (var pair in PluginManager.GetPluginsForInterface<IResultUpdated>())
235+
foreach (var pair in PluginManager.GetResultUpdatePlugin())
236236
{
237237
var plugin = (IResultUpdated)pair.Plugin;
238238
plugin.ResultsUpdated += (s, e) =>

0 commit comments

Comments
 (0)