plugins: have callers provide bundled plugin dir

This commit is contained in:
Gregory Schier
2026-02-26 08:36:42 -08:00
parent 8f0062f917
commit e34301ccab
3 changed files with 17 additions and 25 deletions

View File

@@ -24,7 +24,6 @@ use crate::plugin_handle::PluginHandle;
use crate::server_ws::PluginRuntimeServerWebsocket;
use log::{error, info, warn};
use std::collections::HashMap;
use std::env;
use std::path::{Path, PathBuf};
use std::sync::Arc;
use std::time::Duration;
@@ -48,7 +47,6 @@ pub struct PluginManager {
ws_service: Arc<PluginRuntimeServerWebsocket>,
vendored_plugin_dir: PathBuf,
pub(crate) installed_plugin_dir: PathBuf,
dev_mode: bool,
}
/// Callback for plugin initialization events (e.g., toast notifications)
@@ -64,7 +62,6 @@ impl PluginManager {
/// * `plugin_runtime_main` - Path to the plugin runtime index.cjs
/// * `query_manager` - Query manager for bundled plugin registration and loading
/// * `plugin_context` - Context to use while initializing plugins
/// * `dev_mode` - Whether the app is in dev mode (affects plugin loading)
pub async fn new(
vendored_plugin_dir: PathBuf,
installed_plugin_dir: PathBuf,
@@ -72,7 +69,6 @@ impl PluginManager {
plugin_runtime_main: PathBuf,
query_manager: &QueryManager,
plugin_context: &PluginContext,
dev_mode: bool,
) -> Result<PluginManager> {
let (events_tx, mut events_rx) = mpsc::channel(2048);
let (kill_server_tx, kill_server_rx) = tokio::sync::watch::channel(false);
@@ -91,7 +87,6 @@ impl PluginManager {
killed_rx: Arc::new(Mutex::new(Some(killed_rx))),
vendored_plugin_dir,
installed_plugin_dir,
dev_mode,
};
// Forward events to subscribers
@@ -192,25 +187,11 @@ impl PluginManager {
Ok(plugin_manager)
}
/// Get the vendored plugin directory path (resolves dev mode path if applicable)
pub fn get_plugins_dir(&self) -> PathBuf {
if self.dev_mode {
// Use plugins directly for easy development
// Tauri runs from crates-tauri/yaak-app/, so go up two levels to reach project root
env::current_dir()
.map(|cwd| cwd.join("../../plugins").canonicalize().unwrap())
.unwrap_or_else(|_| self.vendored_plugin_dir.clone())
} else {
self.vendored_plugin_dir.clone()
}
}
/// Read plugin directories from disk and return their paths.
/// This is useful for discovering bundled plugins.
pub async fn list_bundled_plugin_dirs(&self) -> Result<Vec<String>> {
let plugins_dir = self.get_plugins_dir();
info!("Loading bundled plugins from {plugins_dir:?}");
read_plugins_dir(&plugins_dir).await
info!("Loading bundled plugins from {:?}", self.vendored_plugin_dir);
read_plugins_dir(&self.vendored_plugin_dir).await
}
pub async fn uninstall(&self, plugin_context: &PluginContext, dir: &str) -> Result<()> {