Ver Fonte

feat: make new plugin api

mrxiaozhuox há 2 anos atrás
pai
commit
6f4028f065

+ 1 - 17
src/plugin/interface/dirs.rs

@@ -5,25 +5,9 @@ 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", |_, ()| {
+        methods.add_function("plugins_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)
-        });
     }
 }

+ 0 - 0
src/plugin/interface/logger.rs → src/plugin/interface/log.rs


+ 4 - 2
src/plugin/interface/mod.rs

@@ -1,10 +1,12 @@
 use mlua::{FromLua, Function, ToLua};
 
-pub mod logger;
+pub mod log;
 pub mod command;
 pub mod fs;
-pub mod download;
+pub mod network;
 pub mod dirs;
+pub mod path;
+pub mod os;
 
 #[derive(Debug, Clone)]
 pub struct PluginInfo<'lua> {

+ 2 - 2
src/plugin/interface/download.rs → src/plugin/interface/network.rs

@@ -2,8 +2,8 @@ use std::{io::Cursor, path::PathBuf};
 
 use mlua::UserData;
 
-pub struct PluginDownloader;
-impl UserData for PluginDownloader {
+pub struct PluginNetwork;
+impl UserData for PluginNetwork {
     fn add_methods<'lua, M: mlua::UserDataMethods<'lua, Self>>(methods: &mut M) {
         methods.add_async_function("download_file", |_, args: (String, String)| async move {
             let url = args.0;

+ 20 - 0
src/plugin/interface/os.rs

@@ -0,0 +1,20 @@
+use std::path::PathBuf;
+
+use mlua::UserData;
+
+pub struct PluginOS;
+impl UserData for PluginOS {
+    fn add_methods<'lua, M: mlua::UserDataMethods<'lua, Self>>(methods: &mut M) {
+        methods.add_function("current_platform", |_, ()| {
+            if cfg!(target_os = "windows") {
+                Ok("windows")
+            } else if cfg!(target_os = "macos") {
+                Ok("macos")
+            } else if cfg!(target_os = "linux") {
+                Ok("linux")
+            } else {
+                panic!("unsupported platformm");
+            }
+        });
+    }
+}

+ 14 - 0
src/plugin/interface/path.rs

@@ -0,0 +1,14 @@
+use std::path::PathBuf;
+
+use mlua::UserData;
+
+pub struct PluginPath;
+impl UserData for PluginPath {
+    fn add_methods<'lua, M: mlua::UserDataMethods<'lua, Self>>(methods: &mut M) {
+        methods.add_function("join", |_, args: (String, String)| {
+            let current_path = PathBuf::from(args.0);
+            let new_path = current_path.join(args.1);
+            Ok(new_path.to_str().unwrap().to_string())
+        });
+    }
+}

+ 21 - 11
src/plugin/mod.rs

@@ -12,8 +12,8 @@ use crate::tools::{app_path, clone_repo};
 use self::{
     interface::PluginInfo,
     interface::{
-        command::PluginCommander, dirs::PluginDirs, download::PluginDownloader,
-        fs::PluginFileSystem, logger::PluginLogger,
+        command::PluginCommander, dirs::PluginDirs, fs::PluginFileSystem, log::PluginLogger,
+        network::PluginNetwork,
     },
 };
 
@@ -39,15 +39,25 @@ impl PluginManager {
 
         let manager = lua.create_table().unwrap();
 
-        lua.globals().set("PLUGIN_LOGGER", PluginLogger).unwrap();
-        lua.globals()
-            .set("PLUGIN_COMMAND", PluginCommander)
-            .unwrap();
-        lua.globals().set("PLUGIN_FS", PluginFileSystem).unwrap();
-        lua.globals()
-            .set("PLUGIN_DOWNLOAD", PluginDownloader)
-            .unwrap();
-        lua.globals().set("PLUGIN_DIRS", PluginDirs).unwrap();
+        let api = lua.create_table().unwrap();
+
+        api.set("log", PluginLogger).unwrap();
+        api.set("command", PluginCommander).unwrap();
+        api.set("network", PluginNetwork).unwrap();
+        api.set("dirs", PluginDirs).unwrap();
+        api.set("fs", PluginFileSystem).unwrap();
+
+        lua.globals().set("plugin_lib", api).unwrap();
+
+        // lua.globals().set("PLUGIN_LOGGER", PluginLogger).unwrap();
+        // lua.globals()
+        //     .set("PLUGIN_COMMAND", PluginCommander)
+        //     .unwrap();
+        // lua.globals().set("PLUGIN_FS", PluginFileSystem).unwrap();
+        // lua.globals()
+        //     .set("PLUGIN_DOWNLOAD", PluginDownloader)
+        //     .unwrap();
+        // lua.globals().set("PLUGIN_DIRS", PluginDirs).unwrap();
 
         let plugin_dir = Self::init_plugin_dir();
         let mut index: u32 = 1;