From 54dc59360ee5002cfd002b1983478bdfaf109061 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Sat, 30 Jul 2022 09:57:38 +0800 Subject: [PATCH] feat: commit dirs library --- src/plugin/interface/dirs.rs | 29 +++++++++++++++++++++++++++++ src/plugin/interface/mod.rs | 1 + src/plugin/mod.rs | 11 ++++++++--- 3 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 src/plugin/interface/dirs.rs diff --git a/src/plugin/interface/dirs.rs b/src/plugin/interface/dirs.rs new file mode 100644 index 000000000..914ed60bb --- /dev/null +++ b/src/plugin/interface/dirs.rs @@ -0,0 +1,29 @@ +use mlua::UserData; + +use crate::tools::app_path; + +pub struct PluginDirs; +impl UserData for PluginDirs { + fn add_methods<'lua, M: mlua::UserDataMethods<'lua, Self>>(methods: &mut M) { + methods.add_function("plugin_dir", |_, ()| { + let path = app_path().join("plugins"); + Ok(path.to_str().unwrap().to_string()) + }); + methods.add_function("self_dir", |_, name: String| { + let path = app_path().join("plugins").join(name); + Ok(path.to_str().unwrap().to_string()) + }); + methods.add_function("document_dir", |_, ()| { + let path = dirs::document_dir().unwrap().to_str().unwrap().to_string(); + Ok(path) + }); + methods.add_function("download_dir", |_, ()| { + let path = dirs::download_dir().unwrap().to_str().unwrap().to_string(); + Ok(path) + }); + methods.add_function("cache_dir", |_, ()| { + let path = dirs::cache_dir().unwrap().to_str().unwrap().to_string(); + Ok(path) + }); + } +} \ No newline at end of file diff --git a/src/plugin/interface/mod.rs b/src/plugin/interface/mod.rs index 026bc04de..c4db1528a 100644 --- a/src/plugin/interface/mod.rs +++ b/src/plugin/interface/mod.rs @@ -4,6 +4,7 @@ pub mod logger; pub mod command; pub mod fs; pub mod download; +pub mod dirs; #[derive(Debug)] pub struct PluginInfo<'lua> { diff --git a/src/plugin/mod.rs b/src/plugin/mod.rs index d12a394f8..bf8a73cb6 100644 --- a/src/plugin/mod.rs +++ b/src/plugin/mod.rs @@ -7,7 +7,10 @@ use crate::tools::{app_path, clone_repo}; use self::{ interface::PluginInfo, - interface::{command::PluginCommander, logger::PluginLogger, fs::PluginFileSystem, download::PluginDownloader}, + interface::{ + command::PluginCommander, download::PluginDownloader, fs::PluginFileSystem, + logger::PluginLogger, + }, }; pub mod interface; @@ -37,7 +40,9 @@ impl PluginManager { .set("PLUGIN_COMMAND", PluginCommander) .unwrap(); lua.globals().set("PLUGIN_FS", PluginFileSystem).unwrap(); - lua.globals().set("PLUGIN_DOWNLOAD", PluginDownloader).unwrap(); + lua.globals() + .set("PLUGIN_DOWNLOAD", PluginDownloader) + .unwrap(); let plugin_dir = Self::init_plugin_dir(); let mut index = 1; @@ -60,10 +65,10 @@ impl PluginManager { } } - lua.globals().set("manager", manager).unwrap(); lua.globals() .set("LIBDIR", plugin_dir.join("library").to_str().unwrap()) .unwrap(); + lua.globals().set("manager", manager).unwrap(); Some(Self { lua }) }