From 161ec7f247854f19f3ae272629c8f7f7f16cf46f Mon Sep 17 00:00:00 2001 From: Tw93 Date: Thu, 9 May 2024 15:32:16 +0800 Subject: [PATCH] :sparkles: Pass pakeConfig to web --- src-tauri/pake.json | 5 +++-- src-tauri/src/app/config.rs | 9 +++++---- src-tauri/src/app/window.rs | 12 ++++++------ src-tauri/src/inject/event.js | 18 ++++++++++-------- src-tauri/src/inject/style.js | 2 +- 5 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src-tauri/pake.json b/src-tauri/pake.json index 49e85bb..06944b2 100644 --- a/src-tauri/pake.json +++ b/src-tauri/pake.json @@ -2,13 +2,14 @@ "windows": [ { "url": "https://weread.qq.com", + "url_type": "web", "transparent": true, "fullscreen": false, "width": 1200, "height": 780, "resizable": true, - "url_type": "web", - "always_on_top": false + "always_on_top": false, + "disabled_web_shortcuts": false } ], "user_agent": { diff --git a/src-tauri/src/app/config.rs b/src-tauri/src/app/config.rs index 0610b72..4ce0ac3 100644 --- a/src-tauri/src/app/config.rs +++ b/src-tauri/src/app/config.rs @@ -1,6 +1,6 @@ -use serde::Deserialize; +use serde::{Deserialize, Serialize}; -#[derive(Debug, Deserialize)] +#[derive(Debug, Serialize, Deserialize)] pub struct WindowConfig { pub url: String, pub transparent: bool, @@ -10,9 +10,10 @@ pub struct WindowConfig { pub resizable: bool, pub url_type: String, pub always_on_top: bool, + pub disabled_web_shortcuts: bool, } -#[derive(Debug, Deserialize)] +#[derive(Debug, Serialize, Deserialize)] pub struct PlatformSpecific { pub macos: T, pub linux: T, @@ -44,7 +45,7 @@ where pub type UserAgent = PlatformSpecific; pub type FunctionON = PlatformSpecific; -#[derive(Debug, Deserialize)] +#[derive(Debug, Serialize, Deserialize)] pub struct PakeConfig { pub windows: Vec, pub user_agent: UserAgent, diff --git a/src-tauri/src/app/window.rs b/src-tauri/src/app/window.rs index fde4f5a..77b54bb 100644 --- a/src-tauri/src/app/window.rs +++ b/src-tauri/src/app/window.rs @@ -19,6 +19,11 @@ pub fn get_window(app: &mut App, config: PakeConfig, _data_dir: PathBuf) -> Wind _ => panic!("url type can only be web or local"), }; + let config_script = format!( + "window.pakeConfig = {}", + serde_json::to_string(&window_config).unwrap() + ); + let mut window_builder = WindowBuilder::new(app, "pake", url) .title("") .user_agent(user_agent) @@ -28,18 +33,13 @@ pub fn get_window(app: &mut App, config: PakeConfig, _data_dir: PathBuf) -> Wind .inner_size(window_config.width, window_config.height) .disable_file_drop_handler() .always_on_top(window_config.always_on_top) + .initialization_script(&config_script) .initialization_script(include_str!("../inject/component.js")) .initialization_script(include_str!("../inject/event.js")) .initialization_script(include_str!("../inject/style.js")) //This is necessary to allow for file injection by external developers for customization purposes. .initialization_script(include_str!("../inject/custom.js")); - // For dynamic display of header styles - if window_config.transparent { - let transparent_script = "window.pakeWindowTitleTransparent = true;"; - window_builder = window_builder.initialization_script(transparent_script); - } - #[cfg(target_os = "macos")] { let title_bar_style = if window_config.transparent { diff --git a/src-tauri/src/inject/event.js b/src-tauri/src/inject/event.js index 8a05bb0..d3131ea 100644 --- a/src-tauri/src/inject/event.js +++ b/src-tauri/src/inject/event.js @@ -88,14 +88,16 @@ document.addEventListener('DOMContentLoaded', () => { }); }); - document.addEventListener('keyup', (event) => { - if (/windows|linux/i.test(navigator.userAgent) && event.ctrlKey) { - handleShortcut(event); - } - if (/macintosh|mac os x/i.test(navigator.userAgent) && event.metaKey) { - handleShortcut(event); - } - }); + if (window['pakeConfig']?.disabled_web_shortcuts !== true) { + document.addEventListener('keyup', (event) => { + if (/windows|linux/i.test(navigator.userAgent) && event.ctrlKey) { + handleShortcut(event); + } + if (/macintosh|mac os x/i.test(navigator.userAgent) && event.metaKey) { + handleShortcut(event); + } + }); + } // Collect blob urls to blob by overriding window.URL.createObjectURL function collectUrlToBlobs() { diff --git a/src-tauri/src/inject/style.js b/src-tauri/src/inject/style.js index 62da1a7..e6b4320 100644 --- a/src-tauri/src/inject/style.js +++ b/src-tauri/src/inject/style.js @@ -412,7 +412,7 @@ window.addEventListener('DOMContentLoaded', _event => { } `; const isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0; - if (window.pakeWindowTitleTransparent && isMac) { + if (window['pakeConfig']?.transparent && isMac) { const topPaddingStyleElement = document.createElement('style'); topPaddingStyleElement.innerHTML = topPaddingCSS; document.head.appendChild(topPaddingStyleElement);