diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index fc566f51..b09a5d41 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1282,7 +1282,7 @@ async fn cmd_install_plugin( )?; plugin_manager - .add_plugin_by_dir(&PluginContext::new(&window), &plugin.directory, plugin.enabled) + .add_plugin(&PluginContext::new(&window), &plugin.directory, plugin.enabled) .await?; Ok(plugin) diff --git a/src-tauri/yaak-plugins/src/install.rs b/src-tauri/yaak-plugins/src/install.rs index cf067e46..6d3f461d 100644 --- a/src-tauri/yaak-plugins/src/install.rs +++ b/src-tauri/yaak-plugins/src/install.rs @@ -55,9 +55,7 @@ pub async fn download_and_install( zip_extract::extract(Cursor::new(&bytes), &plugin_dir, true)?; info!("Extracted plugin {} to {}", plugin_version.id, plugin_dir_str); - plugin_manager.add_plugin_by_dir(&PluginContext::new(&window), &plugin_dir_str, true).await?; - - window.db().upsert_plugin( + let plugin = window.db().upsert_plugin( &Plugin { id: plugin_version.id.clone(), checked_at: Some(Utc::now().naive_utc()), @@ -69,6 +67,8 @@ pub async fn download_and_install( &UpdateSource::Background, )?; + plugin_manager.add_plugin(&PluginContext::new(&window), &plugin).await?; + info!("Installed plugin {} to {}", plugin_version.id, plugin_dir_str); Ok(plugin_version) diff --git a/src-tauri/yaak-plugins/src/manager.rs b/src-tauri/yaak-plugins/src/manager.rs index fdd5f0c4..2ed543e5 100644 --- a/src-tauri/yaak-plugins/src/manager.rs +++ b/src-tauri/yaak-plugins/src/manager.rs @@ -227,32 +227,27 @@ impl PluginManager { Ok(()) } - pub async fn add_plugin_by_dir( - &self, - plugin_context: &PluginContext, - dir: &str, - enabled: bool, - ) -> Result<()> { - info!("Adding plugin by dir {dir}"); + pub async fn add_plugin(&self, plugin_context: &PluginContext, plugin: &Plugin) -> Result<()> { + info!("Adding plugin by dir {}", plugin.directory); let maybe_tx = self.ws_service.app_to_plugin_events_tx.lock().await; let tx = match &*maybe_tx { None => return Err(ClientNotInitializedErr), Some(tx) => tx, }; - let plugin_handle = PluginHandle::new(dir, enabled, tx.clone())?; - let dir_path = Path::new(dir); + let plugin_handle = PluginHandle::new(&plugin.directory, plugin.enabled, tx.clone())?; + let dir_path = Path::new(&plugin.directory); let is_vendored = dir_path.starts_with(self.vendored_plugin_dir.as_path()); let is_installed = dir_path.starts_with(self.installed_plugin_dir.as_path()); // Boot the plugin if it's enabled - if enabled { + if plugin.enabled { let event = self .send_to_plugin_and_wait( plugin_context, &plugin_handle, &InternalEventPayload::BootRequest(BootRequest { - dir: dir.to_string(), + dir: plugin.directory.clone(), watch: !is_vendored && !is_installed, }), ) @@ -264,7 +259,7 @@ impl PluginManager { } let mut plugin_handles = self.plugin_handles.lock().await; - plugin_handles.retain(|p| p.dir != dir); + plugin_handles.retain(|p| p.dir != plugin.directory); plugin_handles.push(plugin_handle.clone()); Ok(()) @@ -285,9 +280,7 @@ impl PluginManager { continue; } } - if let Err(e) = - self.add_plugin_by_dir(plugin_context, &plugin.directory, plugin.enabled).await - { + if let Err(e) = self.add_plugin(plugin_context, &plugin).await { warn!("Failed to add plugin {} {e:?}", plugin.directory); } }