use serde::Serialize; use std::fs; #[derive(Serialize)] pub struct DirEntry { pub name: String, pub is_dir: bool, } #[tauri::command] pub fn get_plugins_dir(app: tauri::AppHandle) -> Result { let dir = crate::util::get_app_dir(&app).join("plugins"); fs::create_dir_all(&dir).map_err(|e| e.to_string())?; Ok(dir.to_string_lossy().to_string()) } #[tauri::command] pub fn list_directory(path: String) -> Result, String> { let entries = fs::read_dir(&path).map_err(|e| e.to_string())?; let mut results = Vec::new(); for entry in entries { let entry = entry.map_err(|e| e.to_string())?; results.push(DirEntry { name: entry.file_name().to_string_lossy().to_string(), is_dir: entry.file_type().map(|t| t.is_dir()).unwrap_or(false), }); } Ok(results) } #[tauri::command] pub fn create_plugin_dir(app: tauri::AppHandle, plugin_id: String) -> Result { let dir = crate::util::get_app_dir(&app) .join("plugins") .join(&plugin_id); fs::create_dir_all(&dir).map_err(|e| e.to_string())?; Ok(dir.to_string_lossy().to_string()) } #[tauri::command] pub fn remove_plugin_dir(app: tauri::AppHandle, plugin_id: String) -> Result<(), String> { let dir = crate::util::get_app_dir(&app) .join("plugins") .join(&plugin_id); if dir.exists() { fs::remove_dir_all(&dir).map_err(|e| e.to_string())?; } Ok(()) }