@@ -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 > ( ) ;
0 commit comments