From c9f784e4fafde0bec4b161a7df9f24ea6cc076eb Mon Sep 17 00:00:00 2001 From: MystiPanda Date: Thu, 4 Jul 2024 23:11:54 +0800 Subject: [PATCH] feat: add profile name param for script --- src-tauri/src/enhance/builtin/meta_guard.js | 2 +- src-tauri/src/enhance/builtin/meta_hy_alpn.js | 2 +- src-tauri/src/enhance/mod.rs | 14 +++++++++++--- src-tauri/src/enhance/script.rs | 10 +++++++--- src-tauri/src/utils/tmpl.rs | 2 +- 5 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src-tauri/src/enhance/builtin/meta_guard.js b/src-tauri/src/enhance/builtin/meta_guard.js index e8ac8970..33b048f2 100644 --- a/src-tauri/src/enhance/builtin/meta_guard.js +++ b/src-tauri/src/enhance/builtin/meta_guard.js @@ -1,4 +1,4 @@ -function main(config) { +function main(config, _name) { if (config.mode === "script") { config.mode = "rule"; } diff --git a/src-tauri/src/enhance/builtin/meta_hy_alpn.js b/src-tauri/src/enhance/builtin/meta_hy_alpn.js index 92c196ed..dda6366c 100644 --- a/src-tauri/src/enhance/builtin/meta_hy_alpn.js +++ b/src-tauri/src/enhance/builtin/meta_hy_alpn.js @@ -1,4 +1,4 @@ -function main(config) { +function main(config, _name) { if (Array.isArray(config.proxies)) { config.proxies.forEach((p, i) => { if (p.type === "hysteria" && typeof p.alpn === "string") { diff --git a/src-tauri/src/enhance/mod.rs b/src-tauri/src/enhance/mod.rs index 9141ed3c..11355e87 100644 --- a/src-tauri/src/enhance/mod.rs +++ b/src-tauri/src/enhance/mod.rs @@ -59,6 +59,7 @@ pub async fn enhance() -> (Mapping, Vec, HashMap) { groups_item, global_merge, global_script, + profile_name, ) = { let profiles = Config::profiles(); let profiles = profiles.latest(); @@ -123,6 +124,12 @@ pub async fn enhance() -> (Mapping, Vec, HashMap) { data: ChainType::Script(tmpl::ITEM_SCRIPT.into()), }); + let name = profiles + .get_item(&profiles.get_current().unwrap_or_default()) + .ok() + .and_then(|item| item.name.clone()) + .unwrap_or_default(); + ( current, merge, @@ -132,6 +139,7 @@ pub async fn enhance() -> (Mapping, Vec, HashMap) { groups, global_merge, global_script, + name, ) }; @@ -147,7 +155,7 @@ pub async fn enhance() -> (Mapping, Vec, HashMap) { if let ChainType::Script(script) = global_script.data { let mut logs = vec![]; - match use_script(script, config.to_owned()) { + match use_script(script, config.to_owned(), profile_name.to_owned()) { Ok((res_config, res_logs)) => { exists_keys.extend(use_keys(&res_config)); config = res_config; @@ -180,7 +188,7 @@ pub async fn enhance() -> (Mapping, Vec, HashMap) { if let ChainType::Script(script) = script_item.data { let mut logs = vec![]; - match use_script(script, config.to_owned()) { + match use_script(script, config.to_owned(), profile_name.to_owned()) { Ok((res_config, res_logs)) => { exists_keys.extend(use_keys(&res_config)); config = res_config; @@ -239,7 +247,7 @@ pub async fn enhance() -> (Mapping, Vec, HashMap) { .for_each(|item| { log::debug!(target: "app", "run builtin script {}", item.uid); if let ChainType::Script(script) = item.data { - match use_script(script, config.to_owned()) { + match use_script(script, config.to_owned(), "".to_string()) { Ok((res_config, _)) => { config = res_config; } diff --git a/src-tauri/src/enhance/script.rs b/src-tauri/src/enhance/script.rs index 8c678154..e2465097 100644 --- a/src-tauri/src/enhance/script.rs +++ b/src-tauri/src/enhance/script.rs @@ -2,7 +2,11 @@ use super::use_lowercase; use anyhow::{Error, Result}; use serde_yaml::Mapping; -pub fn use_script(script: String, config: Mapping) -> Result<(Mapping, Vec<(String, String)>)> { +pub fn use_script( + script: String, + config: Mapping, + name: String, +) -> Result<(Mapping, Vec<(String, String)>)> { use boa_engine::{native_function::NativeFunction, Context, JsValue, Source}; use std::sync::{Arc, Mutex}; let mut context = Context::default(); @@ -42,7 +46,7 @@ pub fn use_script(script: String, config: Mapping) -> Result<(Mapping, Vec<(Stri let code = format!( r#"try{{ {script}; - JSON.stringify(main({config_str})||'') + JSON.stringify(main({config_str},'{name}')||'') }} catch(err) {{ `__error_flag__ ${{err.toString()}}` }}"# @@ -97,7 +101,7 @@ fn test_script() { "#; let config = serde_yaml::from_str(config).unwrap(); - let (config, results) = use_script(script.into(), config).unwrap(); + let (config, results) = use_script(script.into(), config, "".to_string()).unwrap(); let config_str = serde_yaml::to_string(&config).unwrap(); diff --git a/src-tauri/src/utils/tmpl.rs b/src-tauri/src/utils/tmpl.rs index 15aa926d..545672de 100644 --- a/src-tauri/src/utils/tmpl.rs +++ b/src-tauri/src/utils/tmpl.rs @@ -27,7 +27,7 @@ pub const ITEM_MERGE_EMPTY: &str = "# Profile Enhancement Merge Template for Cla /// enhanced profile pub const ITEM_SCRIPT: &str = "// Define main function (script entry) -function main(config) { +function main(config, profileName) { return config; } ";