Selaa lähdekoodia

feat: commit code

mrxiaozhuox 2 vuotta sitten
vanhempi
commit
6cce4b9f4d
5 muutettua tiedostoa jossa 82 lisäystä ja 8 poistoa
  1. 4 4
      src/cli/mod.rs
  2. 67 0
      src/cli/plugin/mod.rs
  3. 3 3
      src/main.rs
  4. 7 0
      src/plugin/interface/mod.rs
  5. 1 1
      src/plugin/mod.rs

+ 4 - 4
src/cli/mod.rs

@@ -4,7 +4,7 @@ pub mod clean;
 pub mod config;
 pub mod create;
 pub mod serve;
-pub mod tool;
+pub mod plugin;
 pub mod translate;
 
 use crate::{
@@ -52,9 +52,9 @@ pub enum Commands {
     /// Dioxus config file controls.
     #[clap(subcommand)]
     Config(config::Config),
-    /// Install  & Manage tools for Dioxus-cli.
     #[clap(subcommand)]
-    Tool(tool::Tool),
+    /// Manage plugins for dioxus cli
+    Plugin(plugin::Plugin),
 }
 
 impl Commands {
@@ -66,7 +66,7 @@ impl Commands {
             Commands::Create(_) => "create",
             Commands::Clean(_) => "clean",
             Commands::Config(_) => "config",
-            Commands::Tool(_) => "tool",
+            Commands::Plugin(_) => "plugin",
         }.to_string()
     }
 }

+ 67 - 0
src/cli/plugin/mod.rs

@@ -0,0 +1,67 @@
+use crate::tools;
+
+use super::*;
+
+/// Build the Rust WASM app and all of its assets.
+#[derive(Clone, Debug, Deserialize, Subcommand)]
+#[clap(name = "plugin")]
+pub enum Plugin {
+    /// Return all dioxus-cli support tools.
+    List {},
+    /// Get default app install path.
+    AppPath {},
+    /// Install a new tool.
+    Add { name: String },
+}
+
+impl Plugin {
+    pub async fn plugin(self) -> Result<()> {
+        match self {
+            Plugin::List {} => {
+                for item in tools::tool_list() {
+                    if tools::Tool::from_str(item).unwrap().is_installed() {
+                        println!("- {item} [installed]");
+                    } else {
+                        println!("- {item}");
+                    }
+                }
+            }
+            Plugin::AppPath {} => {
+                if let Some(v) = tools::tools_path().to_str() {
+                    println!("{}", v);
+                } else {
+                    log::error!("Tools path get failed.");
+                }
+            }
+            Plugin::Add { name } => {
+                let tool_list = tools::tool_list();
+
+                if !tool_list.contains(&name.as_str()) {
+                    log::error!("Tool {name} not found.");
+                    return Ok(());
+                }
+                let target_tool = tools::Tool::from_str(&name).unwrap();
+
+                if target_tool.is_installed() {
+                    log::warn!("Tool {name} is installed.");
+                    return Ok(());
+                }
+
+                log::info!("Start to download tool package...");
+                if let Err(e) = target_tool.download_package().await {
+                    log::error!("Tool download failed: {e}");
+                    return Ok(());
+                }
+
+                log::info!("Start to install tool package...");
+                if let Err(e) = target_tool.install_package().await {
+                    log::error!("Tool install failed: {e}");
+                    return Ok(());
+                }
+
+                log::info!("Tool {name} install successfully!");
+            }
+        }
+        Ok(())
+    }
+}

+ 3 - 3
src/main.rs

@@ -48,9 +48,9 @@ async fn main() -> Result<()> {
             }
         }
 
-        Commands::Tool(opts) => {
-            if let Err(e) = opts.tool().await {
-                log::error!("tool error: {}", e);
+        Commands::Plugin(opts) => {
+            if let Err(e) = opts.plugin().await {
+                log::error!("plugin error: {}", e);
             }
         }
     }

+ 7 - 0
src/plugin/interface/mod.rs

@@ -17,6 +17,7 @@ pub struct PluginInfo<'lua> {
 
     pub on_init: Option<Function<'lua>>,
     pub build: PluginBuildInfo<'lua>,
+    pub serve: PluginServeInfo<'lua>,
 }
 
 impl<'lua> FromLua<'lua> for PluginInfo<'lua> {
@@ -29,6 +30,7 @@ impl<'lua> FromLua<'lua> for PluginInfo<'lua> {
 
             on_init: None,
             build: Default::default(),
+            serve: Default::default(),
         };
         if let mlua::Value::Table(tab) = lua_value {
             if let Ok(v) = tab.get::<_, String>("name") {
@@ -51,6 +53,10 @@ impl<'lua> FromLua<'lua> for PluginInfo<'lua> {
             if let Ok(v) = tab.get::<_, PluginBuildInfo>("build") {
                 res.build = v;
             }
+
+            if let Ok(v) = tab.get::<_, PluginServeInfo>("serve") {
+                res.serve = v;
+            }
         }
 
         Ok(res)
@@ -70,6 +76,7 @@ impl<'lua> ToLua<'lua> for PluginInfo<'lua> {
             res.set("on_init", e)?;
         }
         res.set("build", self.build)?;
+        res.set("serve", self.serve)?;
 
         Ok(mlua::Value::Table(res))
     }

+ 1 - 1
src/plugin/mod.rs

@@ -3,7 +3,7 @@ use std::{
     path::PathBuf,
 };
 
-use mlua::{AsChunk, Lua, Table, ToLuaMulti};
+use mlua::{AsChunk, Lua, Table};
 use serde::{Deserialize, Serialize};
 use serde_json::json;