Skip to content

Commit d3f5274

Browse files
committed
Make GetPluginsForInterface private & Code quality
1 parent b440aaa commit d3f5274

File tree

3 files changed

+37
-22
lines changed

3 files changed

+37
-22
lines changed

Flow.Launcher.Core/Plugin/PluginManager.cs

Lines changed: 33 additions & 19 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,12 @@ 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+
private static readonly List<string> ModifiedPlugins = new();
37+
38+
private static IEnumerable<PluginPair> _contextMenuPlugins;
39+
private static IEnumerable<PluginPair> _homePlugins;
40+
private static IEnumerable<PluginPair> _resultUpdatePlugin;
41+
private static IEnumerable<PluginPair> _translationPlugins;
4142

4243
/// <summary>
4344
/// Directories that will hold Flow Launcher plugin directory
@@ -173,12 +174,18 @@ static PluginManager()
173174
/// <param name="settings"></param>
174175
public static void LoadPlugins(PluginsSettings settings)
175176
{
176-
_metadatas = PluginConfig.Parse(Directories);
177+
var metadatas = PluginConfig.Parse(Directories);
177178
Settings = settings;
178-
Settings.UpdatePluginSettings(_metadatas);
179-
AllPlugins = PluginsLoader.Plugins(_metadatas, Settings);
179+
Settings.UpdatePluginSettings(metadatas);
180+
AllPlugins = PluginsLoader.Plugins(metadatas, Settings);
180181
// Since dotnet plugins need to get assembly name first, we should update plugin directory after loading plugins
181-
UpdatePluginDirectory(_metadatas);
182+
UpdatePluginDirectory(metadatas);
183+
184+
// Initialize plugin enumerable after all plugins are initialized
185+
_contextMenuPlugins = GetPluginsForInterface<IContextMenu>();
186+
_homePlugins = GetPluginsForInterface<IAsyncHomeQuery>();
187+
_resultUpdatePlugin = GetPluginsForInterface<IResultUpdated>();
188+
_translationPlugins = GetPluginsForInterface<IPluginI18n>();
182189
}
183190

184191
private static void UpdatePluginDirectory(List<PluginMetadata> metadatas)
@@ -248,9 +255,6 @@ public static async Task InitializePluginsAsync()
248255

249256
await Task.WhenAll(InitTasks);
250257

251-
_contextMenuPlugins = GetPluginsForInterface<IContextMenu>();
252-
_homePlugins = GetPluginsForInterface<IAsyncHomeQuery>();
253-
254258
foreach (var plugin in AllPlugins)
255259
{
256260
// set distinct on each plugin's action keywords helps only firing global(*) and action keywords once where a plugin
@@ -409,16 +413,26 @@ public static PluginPair GetPluginForId(string id)
409413
return AllPlugins.FirstOrDefault(o => o.Metadata.ID == id);
410414
}
411415

412-
public static IEnumerable<PluginPair> GetPluginsForInterface<T>() where T : IFeatures
416+
private static IEnumerable<PluginPair> GetPluginsForInterface<T>() where T : IFeatures
413417
{
414418
// Handle scenario where this is called before all plugins are instantiated, e.g. language change on startup
415419
return AllPlugins?.Where(p => p.Plugin is T) ?? Array.Empty<PluginPair>();
416420
}
417421

422+
public static IList<PluginPair> GetResultUpdatePlugin()
423+
{
424+
return _resultUpdatePlugin.Where(p => !PluginModified(p.Metadata.ID)).ToList();
425+
}
426+
427+
public static IList<PluginPair> GetTranslationPlugins()
428+
{
429+
return _translationPlugins.Where(p => !PluginModified(p.Metadata.ID)).ToList();
430+
}
431+
418432
public static List<Result> GetContextMenusForPlugin(Result result)
419433
{
420434
var results = new List<Result>();
421-
var pluginPair = _contextMenuPlugins.FirstOrDefault(o => o.Metadata.ID == result.PluginID);
435+
var pluginPair = _contextMenuPlugins.Where(p => !PluginModified(p.Metadata.ID)).FirstOrDefault(o => o.Metadata.ID == result.PluginID);
422436
if (pluginPair != null)
423437
{
424438
var plugin = (IContextMenu)pluginPair.Plugin;
@@ -446,7 +460,7 @@ public static List<Result> GetContextMenusForPlugin(Result result)
446460

447461
public static bool IsHomePlugin(string id)
448462
{
449-
return _homePlugins.Any(p => p.Metadata.ID == id);
463+
return _homePlugins.Where(p => !PluginModified(p.Metadata.ID)).Any(p => p.Metadata.ID == id);
450464
}
451465

452466
public static bool ActionKeywordRegistered(string actionKeyword)
@@ -544,14 +558,14 @@ private static bool SameOrLesserPluginVersionExists(string metadataPath)
544558

545559
public static bool PluginModified(string id)
546560
{
547-
return _modifiedPlugins.Contains(id);
561+
return ModifiedPlugins.Contains(id);
548562
}
549563

550564
public static async Task UpdatePluginAsync(PluginMetadata existingVersion, UserPlugin newVersion, string zipFilePath)
551565
{
552566
InstallPlugin(newVersion, zipFilePath, checkModified:false);
553567
await UninstallPluginAsync(existingVersion, removePluginFromSettings:false, removePluginSettings:false, checkModified: false);
554-
_modifiedPlugins.Add(existingVersion.ID);
568+
ModifiedPlugins.Add(existingVersion.ID);
555569
}
556570

557571
public static void InstallPlugin(UserPlugin plugin, string zipFilePath)
@@ -638,7 +652,7 @@ internal static void InstallPlugin(UserPlugin plugin, string zipFilePath, bool c
638652

639653
if (checkModified)
640654
{
641-
_modifiedPlugins.Add(plugin.ID);
655+
ModifiedPlugins.Add(plugin.ID);
642656
}
643657
}
644658

@@ -707,7 +721,7 @@ internal static async Task UninstallPluginAsync(PluginMetadata plugin, bool remo
707721

708722
if (checkModified)
709723
{
710-
_modifiedPlugins.Add(plugin.ID);
724+
ModifiedPlugins.Add(plugin.ID);
711725
}
712726
}
713727

Flow.Launcher.Core/Resource/Internationalization.cs

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

7575
private void AddPluginLanguageDirectories()
7676
{
77-
foreach (var plugin in PluginManager.GetPluginsForInterface<IPluginI18n>())
77+
foreach (var plugin in PluginManager.GetTranslationPlugins())
7878
{
7979
var location = Assembly.GetAssembly(plugin.Plugin.GetType()).Location;
8080
var dir = Path.GetDirectoryName(location);
@@ -278,7 +278,8 @@ public static string GetTranslation(string key)
278278

279279
private void UpdatePluginMetadataTranslations()
280280
{
281-
foreach (var p in PluginManager.GetPluginsForInterface<IPluginI18n>())
281+
// Update plugin metadata name & description
282+
foreach (var p in PluginManager.GetTranslationPlugins())
282283
{
283284
if (p.Plugin is not IPluginI18n pluginI18N) return;
284285
try

Flow.Launcher/ViewModel/MainViewModel.cs

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

261261
public void RegisterResultsUpdatedEvent()
262262
{
263-
foreach (var pair in PluginManager.GetPluginsForInterface<IResultUpdated>())
263+
foreach (var pair in PluginManager.GetResultUpdatePlugin())
264264
{
265265
var plugin = (IResultUpdated)pair.Plugin;
266266
plugin.ResultsUpdated += (s, e) =>

0 commit comments

Comments
 (0)