diff options
Diffstat (limited to 'src/app/api/plugins/runtime.rs')
| -rw-r--r-- | src/app/api/plugins/runtime.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/app/api/plugins/runtime.rs b/src/app/api/plugins/runtime.rs index 0008def2..71004fe5 100644 --- a/src/app/api/plugins/runtime.rs +++ b/src/app/api/plugins/runtime.rs @@ -180,6 +180,41 @@ impl App { Ok(log) } + pub(crate) fn run_plugin_startup_hooks(&mut self) { + let mut context = self.current_plugin_context("plugin.startup"); + context.invocation_source = Some("startup".to_string()); + let mut plugins = self + .state + .installed_plugins + .values() + .filter(|plugin| { + plugin.enabled && plugin_manifest_available(plugin) && !plugin.startup.is_empty() + }) + .cloned() + .collect::<Vec<_>>(); + plugins.sort_by(|left, right| left.plugin_id.cmp(&right.plugin_id)); + for plugin in plugins { + for startup in plugin.startup.clone() { + if ensure_platform_supported( + &effective_platforms(&startup.platforms, &plugin.platforms).clone(), + "startup", + ) + .is_err() + { + continue; + } + let _ = self.start_plugin_command( + &plugin, + None, + Some("startup".to_string()), + startup.command, + &context, + None, + ); + } + } + } + pub(crate) fn run_plugin_event_hooks(&mut self, event: &crate::api::schema::EventEnvelope) { let event_name = event.event.dot_name(); if !crate::api::schema::PLUGIN_HOOK_EVENT_KINDS.contains(&event.event) { |
