From c76e436529072e13f0ec781f800dd04fc6d85453 Mon Sep 17 00:00:00 2001 From: Wind-Explorer Date: Mon, 16 Feb 2026 00:52:38 +0800 Subject: [PATCH] presence module & update_status --- src-tauri/Cargo.lock | 49 ++++++++++++++----- src-tauri/Cargo.toml | 2 +- src-tauri/src/init/mod.rs | 2 +- src-tauri/src/services/mod.rs | 2 +- .../{modules => presence_modules}/mod.rs | 1 + .../src/services/presence_modules/models.rs | 11 +++++ .../{modules => presence_modules}/runtime.rs | 11 ++++- 7 files changed, 61 insertions(+), 17 deletions(-) rename src-tauri/src/services/{modules => presence_modules}/mod.rs (99%) create mode 100644 src-tauri/src/services/presence_modules/models.rs rename src-tauri/src/services/{modules => presence_modules}/runtime.rs (78%) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 1d8a70a..0bb7087 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -2306,18 +2306,18 @@ checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "lua-src" -version = "547.0.0" +version = "550.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edaf29e3517b49b8b746701e5648ccb5785cde1c119062cbabbc5d5cd115e42" +checksum = "e836dc8ae16806c9bdcf42003a88da27d163433e3f9684c52f0301258004a4fb" dependencies = [ "cc", ] [[package]] name = "luajit-src" -version = "210.5.12+a4f56a4" +version = "210.6.6+707c12b" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3a8e7962a5368d5f264d045a5a255e90f9aa3fc1941ae15a8d2940d42cac671" +checksum = "a86cc925d4053d0526ae7f5bc765dbd0d7a5d1a63d43974f4966cb349ca63295" dependencies = [ "cc", "which", @@ -2432,25 +2432,32 @@ dependencies = [ [[package]] name = "mlua" -version = "0.9.9" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d111deb18a9c9bd33e1541309f4742523bfab01d276bfa9a27519f6de9c11dc7" +checksum = "ccd36acfa49ce6ee56d1307a061dd302c564eee757e6e4cd67eb4f7204846fab" dependencies = [ "bstr", + "either", + "erased-serde", + "libc", "mlua-sys", "num-traits", - "once_cell", + "parking_lot", "rustc-hash", + "rustversion", + "serde", + "serde-value", ] [[package]] name = "mlua-sys" -version = "0.6.8" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380c1f7e2099cafcf40e51d3a9f20a346977587aa4d012eae1f043149a728a93" +checksum = "0f1c3a7fc7580227ece249fd90aa2fa3b39eb2b49d3aec5e103b3e85f2c3dfc8" dependencies = [ "cc", "cfg-if", + "libc", "lua-src", "luajit-src", "pkg-config", @@ -2946,6 +2953,15 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + [[package]] name = "ordered-stream" version = "0.2.0" @@ -3932,6 +3948,16 @@ dependencies = [ "typeid", ] +[[package]] +name = "serde-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" +dependencies = [ + "ordered-float", + "serde", +] + [[package]] name = "serde_core" version = "1.0.228" @@ -5704,11 +5730,10 @@ checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" [[package]] name = "which" -version = "7.0.3" +version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d643ce3fd3e5b54854602a080f34fb10ab75e0b813ee32d00ca2b44fa74762" +checksum = "d3fabb953106c3c8eea8306e4393700d7657561cb43122571b172bbfb7c7ba1d" dependencies = [ - "either", "env_home", "rustix", "winsafe", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index b68af70..1b5d0df 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -45,7 +45,7 @@ gif = "0.14.1" raw-window-handle = "0.6" enigo = { version = "0.6.1", features = ["wayland"] } lazy_static = "1.5.0" -mlua = { version = "0.9", default-features = false, features = ["lua54", "vendored"] } +mlua = { version = "0.11", default-features = false, features = ["lua54", "vendored", "serde"] } [target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies] tauri-plugin-global-shortcut = "2" tauri-plugin-positioner = "2" diff --git a/src-tauri/src/init/mod.rs b/src-tauri/src/init/mod.rs index 90c91ba..e40e128 100644 --- a/src-tauri/src/init/mod.rs +++ b/src-tauri/src/init/mod.rs @@ -7,7 +7,7 @@ use crate::{ active_app::init_foreground_app_change_listener, auth::get_session_token, cursor::init_cursor_tracking, - modules::init_modules, + presence_modules::init_modules, scene::{close_splash_window, open_splash_window}, welcome::open_welcome_window, }, diff --git a/src-tauri/src/services/mod.rs b/src-tauri/src/services/mod.rs index 233948d..6a471c3 100644 --- a/src-tauri/src/services/mod.rs +++ b/src-tauri/src/services/mod.rs @@ -11,7 +11,7 @@ pub mod doll_editor; pub mod health_manager; pub mod health_monitor; pub mod interaction; -pub mod modules; +pub mod presence_modules; pub mod scene; pub mod sprite_recolor; pub mod welcome; diff --git a/src-tauri/src/services/modules/mod.rs b/src-tauri/src/services/presence_modules/mod.rs similarity index 99% rename from src-tauri/src/services/modules/mod.rs rename to src-tauri/src/services/presence_modules/mod.rs index a642804..8b0e4bd 100644 --- a/src-tauri/src/services/modules/mod.rs +++ b/src-tauri/src/services/presence_modules/mod.rs @@ -6,6 +6,7 @@ use serde::{Deserialize, Serialize}; use serde_json; use std::fs; +pub mod models; pub mod runtime; #[derive(Serialize, Deserialize, Debug)] diff --git a/src-tauri/src/services/presence_modules/models.rs b/src-tauri/src/services/presence_modules/models.rs new file mode 100644 index 0000000..c90cffc --- /dev/null +++ b/src-tauri/src/services/presence_modules/models.rs @@ -0,0 +1,11 @@ +use serde::{Deserialize, Serialize}; +use ts_rs::TS; + +#[derive(Debug, Clone, Serialize, Deserialize, TS)] +#[serde(rename_all = "camelCase")] +#[ts(export)] +pub struct PresenceStatus { + pub title: Option, + pub subtitle: Option, + pub graphics_b64: Option, +} diff --git a/src-tauri/src/services/modules/runtime.rs b/src-tauri/src/services/presence_modules/runtime.rs similarity index 78% rename from src-tauri/src/services/modules/runtime.rs rename to src-tauri/src/services/presence_modules/runtime.rs index bd0e4bf..69df429 100644 --- a/src-tauri/src/services/modules/runtime.rs +++ b/src-tauri/src/services/presence_modules/runtime.rs @@ -1,11 +1,13 @@ -use mlua::{Lua, UserData, UserDataMethods}; +use mlua::{Lua, LuaSerdeExt, UserData, UserDataMethods, Value}; use std::{path::Path, thread, time::Duration}; use tracing::{error, info}; +use super::models::PresenceStatus; + pub struct Engine; impl UserData for Engine { - fn add_methods<'lua, M: UserDataMethods<'lua, Self>>(methods: &mut M) { + fn add_methods>(methods: &mut M) { methods.add_method("log", |_, _, message: String| { info!("{}", message); Ok(()) @@ -14,6 +16,11 @@ impl UserData for Engine { thread::sleep(Duration::from_secs(seconds)); Ok(()) }); + methods.add_method("update_status", |lua, _, value: Value| { + let status: PresenceStatus = lua.from_value(value)?; + dbg!(status); + Ok(()) + }); } }