From 283ae982edca33494d473454752d9a51c546e9ca Mon Sep 17 00:00:00 2001 From: Wind-Explorer Date: Wed, 4 Feb 2026 00:55:09 +0800 Subject: [PATCH] moved send user request listener to rust side --- src-tauri/src/services/active_app.rs | 29 +++++++++++++++++++++++++++- src/routes/app-menu/+page.svelte | 1 - src/routes/scene/+page.svelte | 12 ------------ 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src-tauri/src/services/active_app.rs b/src-tauri/src/services/active_app.rs index e3f6367..8f17176 100644 --- a/src-tauri/src/services/active_app.rs +++ b/src-tauri/src/services/active_app.rs @@ -6,6 +6,7 @@ use tauri::Emitter; use tracing::error; use crate::get_app_handle; +use crate::{lock_r, state::FDOLL}; const ICON_SIZE: u32 = 64; const ICON_CACHE_LIMIT: usize = 50; @@ -762,8 +763,34 @@ pub static ACTIVE_APP_CHANGED: &str = "active-app-changed"; pub fn init_foreground_app_change_listener() { let app_handle = get_app_handle(); listen_for_active_app_changes(|app_names: AppMetadata| { + { + let guard = lock_r!(FDOLL); + if guard + .network + .clients + .as_ref() + .map(|c| c.is_ws_initialized) + .unwrap_or(false) + { + let active_app_value = app_names + .localized + .as_ref() + .or(app_names.unlocalized.as_ref()) + .unwrap_or(&String::new()) + .clone(); + if !active_app_value.trim().is_empty() { + let payload = crate::services::ws::UserStatusPayload { + active_app: active_app_value, + state: "idle".to_string(), + }; + tauri::async_runtime::spawn(async move { + crate::services::ws::report_user_status(payload).await; + }); + } + } + }; if let Err(e) = app_handle.emit(ACTIVE_APP_CHANGED, app_names) { error!("Failed to emit active app changed event: {}", e); - } + }; }); } diff --git a/src/routes/app-menu/+page.svelte b/src/routes/app-menu/+page.svelte index 99e5e42..da5b49f 100644 --- a/src/routes/app-menu/+page.svelte +++ b/src/routes/app-menu/+page.svelte @@ -2,7 +2,6 @@ import Friends from "./tabs/friends.svelte"; import Preferences from "./tabs/preferences.svelte"; import YourDolls from "./tabs/your-dolls/index.svelte"; - import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow"; import { listen } from "@tauri-apps/api/event"; import { onMount } from "svelte"; diff --git a/src/routes/scene/+page.svelte b/src/routes/scene/+page.svelte index f3d69da..e2f608a 100644 --- a/src/routes/scene/+page.svelte +++ b/src/routes/scene/+page.svelte @@ -7,9 +7,7 @@ import { appData } from "../../events/app-data"; import { sceneInteractive } from "../../events/scene-interactive"; import { friendsUserStatuses } from "../../events/user-status"; - import { invoke } from "@tauri-apps/api/core"; - import DesktopPet from "./components/DesktopPet.svelte"; import { listen } from "@tauri-apps/api/event"; import { onMount } from "svelte"; @@ -43,16 +41,6 @@ onMount(() => { const unlisten = listen("active-app-changed", (event) => { appMetadata = event.payload; - const activeAppValue = - appMetadata?.localized ?? appMetadata?.unlocalized ?? ""; - if (activeAppValue.trim()) { - invoke("send_user_status_cmd", { - activeApp: activeAppValue, - state: "idle", - }).catch((error) => { - console.error("Failed to send user status", error); - }); - } }); return () => {