LCE-Emerald-Launcher/src-tauri/src/commands/plugins.rs

49 lines
1.5 KiB
Rust

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<String, String> {
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<Vec<DirEntry>, 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<String, String> {
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(())
}