From bb04550e24792334c9a330198dcd06b382f64647 Mon Sep 17 00:00:00 2001 From: BTMuli Date: Sat, 30 Dec 2023 17:51:55 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E6=B7=BB=E5=8A=A0=E6=A8=A1?= =?UTF-8?q?=E6=8B=9F=E8=A7=A6=E6=91=B8=EF=BC=8C=E5=B0=86=E9=BC=A0=E6=A0=87?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E8=BD=AC=E4=B8=BA=E8=A7=A6=E6=91=B8=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src-tauri/src/client.rs | 27 +++++++++++-- src/utils/TGClient.ts | 85 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 107 insertions(+), 5 deletions(-) diff --git a/src-tauri/src/client.rs b/src-tauri/src/client.rs index fa5dba75..22534fcc 100644 --- a/src-tauri/src/client.rs +++ b/src-tauri/src/client.rs @@ -2,16 +2,27 @@ //! @desc 客户端模块,负责操作米游社客户端 //! @since Beta v0.3.9 -use tauri::{AppHandle, CustomMenuItem, Manager, Menu, WindowBuilder, WindowUrl}; +use tauri::{AppHandle, CustomMenuItem, Manager, Menu, Submenu, WindowBuilder, WindowUrl}; use url::Url; +// 创建子菜单-工具 +fn create_utils_menu() -> Menu { + let retry_bridge = CustomMenuItem::new("retry".to_string(), "重试桥接"); + let mock_touch = CustomMenuItem::new("mock_touch".to_string(), "模拟触摸"); + return Menu::new().add_item(retry_bridge).add_item(mock_touch); +} + // 创建米游社客户端菜单 fn create_mhy_menu() -> Menu { let top = CustomMenuItem::new("top".to_string(), "置顶"); let cancel_top = CustomMenuItem::new("cancel_top".to_string(), "取消置顶"); let open_post = CustomMenuItem::new("open_post".to_string(), "打开帖子"); - let retry_bridge = CustomMenuItem::new("retry".to_string(), "重试"); - return Menu::new().add_item(top).add_item(cancel_top).add_item(open_post).add_item(retry_bridge); + let utils_menu = Submenu::new("工具".to_string(), create_utils_menu()); + return Menu::new() + .add_item(top) + .add_item(cancel_top) + .add_item(open_post) + .add_submenu(utils_menu); } // 获取米游社客户端入口地址 @@ -112,6 +123,16 @@ pub async fn create_mhy_client(handle: AppHandle, func: String, url: String) { })()"#; window.eval(&execute_js).ok().unwrap(); } + "mock_touch" => { + let window = handle.get_window("mhy_client").unwrap(); + let execute_js = r#"javascript:(async function(){ + const arg = { + method: 'teyvat_touch', + } + await window.__TAURI__.event.emit('post_mhy_client',JSON.stringify(arg)); + })()"#; + window.eval(&execute_js).ok().unwrap(); + } _ => {} }); } diff --git a/src/utils/TGClient.ts b/src/utils/TGClient.ts index fa622be2..3b64a66e 100644 --- a/src/utils/TGClient.ts +++ b/src/utils/TGClient.ts @@ -287,6 +287,87 @@ class TGClient { await this.loadJSBridge(); break; } + case "teyvat_touch": { + const executeJS = `javascript:(() => { + // 鼠标移动监听 + const mouseMoveListener = (e) => { + console.log("mouseMoveListener"); + const touch = new Touch({ + identifier: Date.now(), + target: e.target, + clientX: e.clientX, + clientY: e.clientY, + screenX: e.screenX, + screenY: e.screenY, + pageX: e.pageX, + pageY: e.pageY + }); + const touchEvent = new TouchEvent("touchmove", { + cancelable: true, + bubbles: true, + touches: [touch], + targetTouches: [touch], + changedTouches: [touch] + }); + console.log(touchEvent); + e.target.dispatchEvent(touchEvent); + }; + // 鼠标抬起监听 + const mouseUpListener = (e) => { + console.log("mouseUpListener"); + const touch = new Touch({ + identifier: Date.now(), + target: e.target, + clientX: e.clientX, + clientY: e.clientY, + screenX: e.screenX, + screenY: e.screenY, + pageX: e.pageX, + pageY: e.pageY + }); + const touchEvent = new TouchEvent("touchend", { + cancelable: true, + bubbles: true, + touches: [touch], + targetTouches: [touch], + changedTouches: [touch] + }); + console.log(touchEvent); + e.target.dispatchEvent(touchEvent); + // 鼠标抬起后,移除对于鼠标移动和鼠标抬起的监听 + document.removeEventListener("mousemove", mouseMoveListener); + document.removeEventListener("mouseup", mouseUpListener); + }; + const mouseDownListener = (e) => { + console.log("mouseDownListener"); + const touch = new Touch({ + identifier: Date.now(), + target: e.target, + clientX: e.clientX, + clientY: e.clientY, + screenX: e.screenX, + screenY: e.screenY, + pageX: e.pageX, + pageY: e.pageY + }); + const touchEvent = new TouchEvent("touchstart", { + cancelable: true, + bubbles: true, + touches: [touch], + targetTouches: [touch], + changedTouches: [touch] + }); + console.log(touchEvent); + e.target.dispatchEvent(touchEvent); + // 鼠标按下后,监听鼠标移动和鼠标抬起事件 + document.addEventListener("mousemove", mouseMoveListener); + document.addEventListener("mouseup", mouseUpListener); + }; + document.addEventListener("mousedown", mouseDownListener); + })()`; + await invoke("execute_js", { label: "mhy_client", js: executeJS }); + break; + } default: console.warn(`[customCallback] ${arg.method}`); } @@ -524,8 +605,8 @@ class TGClient { } const executeJS = `javascript:(function(){ var domain = window.location.host; - document.cookie = "cookie_token=${user.cookie.cookie_token};domain=." + domain + ";path=/;expires=Fri, 31 Dec 9999 23:59:59 GMT; - document.cookie = "ltoken=${user.cookie.ltoken};domain=." + domain + ";path=/;expires=Fri, 31 Dec 9999 23:59:59 GMT; + document.cookie = "cookie_token=${user.cookie.cookie_token};domain=" + domain + ";path=/;expires=Fri, 31 Dec 9999 23:59:59 GMT; + document.cookie = "ltoken=${user.cookie.ltoken};domain=" + domain + ";path=/;expires=Fri, 31 Dec 9999 23:59:59 GMT; })();`; console.info(`[getCookieToken] ${executeJS}`); await invoke("execute_js", { label: "mhy_client", js: executeJS });