From 974c2577c302f4355aa5b8c02e07fcd482406f64 Mon Sep 17 00:00:00 2001 From: shenjack <3695888@qq.com> Date: Mon, 6 Jan 2025 21:02:52 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=98=E6=98=AF0.8.0=E2=80=A6=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ica-rs/src/py/class/ica.rs | 7 +++++++ ica-rs/src/py/class/tailchat.rs | 7 +++++++ ica-rs/src/py/mod.rs | 22 +++++++++++++++++++++- news.md | 4 ++++ 4 files changed, 39 insertions(+), 1 deletion(-) diff --git a/ica-rs/src/py/class/ica.rs b/ica-rs/src/py/class/ica.rs index 0ada6f1..576ff3b 100644 --- a/ica-rs/src/py/class/ica.rs +++ b/ica-rs/src/py/class/ica.rs @@ -255,6 +255,13 @@ impl IcaClientPy { /// 返回是否成功 pub fn reload_plugin_status(&self) -> bool { PyStatus::get_mut().config.reload_from_default() } + /// 重新加载插件 + /// + /// 返回是否成功 + pub fn reload_plugin(&self, plugin_name: String) -> bool { + PyStatus::get_mut().reload_plugin(&plugin_name) + } + pub fn debug(&self, content: String) { event!(Level::DEBUG, "{}", content); } diff --git a/ica-rs/src/py/class/tailchat.rs b/ica-rs/src/py/class/tailchat.rs index e47d301..e05d074 100644 --- a/ica-rs/src/py/class/tailchat.rs +++ b/ica-rs/src/py/class/tailchat.rs @@ -77,6 +77,13 @@ impl TailchatClientPy { /// 返回是否成功 pub fn reload_plugin_status(&self) -> bool { PyStatus::get_mut().config.reload_from_default() } + /// 重新加载插件 + /// + /// 返回是否成功 + pub fn reload_plugin(&self, plugin_name: String) -> bool { + PyStatus::get_mut().reload_plugin(&plugin_name) + } + #[pyo3(signature = (content, converse_id, group_id = None))] pub fn new_message( &self, diff --git a/ica-rs/src/py/mod.rs b/ica-rs/src/py/mod.rs index 77a91ee..9c05fc8 100644 --- a/ica-rs/src/py/mod.rs +++ b/ica-rs/src/py/mod.rs @@ -46,6 +46,23 @@ impl PyStatus { /// 添加一个插件 pub fn add_file(&mut self, path: PathBuf, plugin: PyPlugin) { self.files.insert(path, plugin); } + /// 重新加载一个插件 + pub fn reload_plugin(&mut self, plugin_name: &str) -> bool { + let plugin = self.files.iter_mut().find_map(|(_, plugin)| { + if plugin.get_id() == plugin_name { + Some(plugin) + } else { + None + } + }); + if let Some(plugin) = plugin { + plugin.reload_from_file() + } else { + event!(Level::WARN, "没有找到插件: {}", plugin_name); + false + } + } + /// 删除一个插件 pub fn delete_file(&mut self, path: &PathBuf) -> Option { self.files.remove(path) } @@ -128,7 +145,7 @@ impl PyPlugin { } /// 从文件更新 - pub fn reload_from_file(&mut self) { + pub fn reload_from_file(&mut self) -> bool { let raw_file = load_py_file(&self.file_path); match raw_file { Ok(raw_file) => match Self::try_from(raw_file) { @@ -137,6 +154,7 @@ impl PyPlugin { self.changed_time = plugin.changed_time; self.enabled = PyStatus::get().config.get_status(&self.get_id()); event!(Level::INFO, "更新 Python 插件文件 {:?} 完成", self.file_path); + true } Err(e) => { warn!( @@ -145,10 +163,12 @@ impl PyPlugin { e, get_py_err_traceback(&e) ); + false } }, Err(e) => { warn!("更新插件 {:?}: {:?} 失败", self.file_path, e); + false } } } diff --git a/news.md b/news.md index 40c4ec1..4363b14 100644 --- a/news.md +++ b/news.md @@ -21,11 +21,15 @@ - socketio event: `sendGroupPoke` - 添加了 `reload_plugin_status` api - 用于重新加载插件状态 +- 添加了 `reload_plugin(plugin_name: str)` api + - 用于重新加载指定插件 ### tailchat 1.2.5 - 添加了 `reload_plugin_status` api - 用于重新加载插件状态 +- 添加了 `reload_plugin(plugin_name: str)` api + - 用于重新加载指定插件 ## 0.7.4