From 050b7010fcba60647f0d38c92b61e5283c5711d1 Mon Sep 17 00:00:00 2001 From: lencx Date: Sun, 11 Dec 2022 18:16:36 +0800 Subject: [PATCH] feat: add menu item --- src-tauri/icons/tray-icon.png | Bin 0 -> 77471 bytes src-tauri/src/app/cmd.rs | 7 ++- src-tauri/src/app/menu.rs | 85 +++++++++++++++++++++++++++------- src-tauri/src/app/setup.rs | 12 ++--- src-tauri/src/app/window.rs | 8 ++-- src-tauri/src/assets/core.js | 3 +- src-tauri/src/conf.rs | 71 ++++++++++++++++++++++------ src-tauri/src/main.rs | 5 +- src-tauri/tauri.conf.json | 4 +- 9 files changed, 150 insertions(+), 45 deletions(-) create mode 100644 src-tauri/icons/tray-icon.png diff --git a/src-tauri/icons/tray-icon.png b/src-tauri/icons/tray-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..81d2aeb9ecf0f30437af6570556cb25ba6d72236 GIT binary patch literal 77471 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 { pub fn open_link(app: AppHandle, url: String) { api::shell::open(&app.shell_scope(), url, None).unwrap(); } + +#[command] +pub fn get_chat_conf() -> ChatConfJson { + ChatConfJson::get_chat_conf() +} diff --git a/src-tauri/src/app/menu.rs b/src-tauri/src/app/menu.rs index ef88c3f..32ccf21 100644 --- a/src-tauri/src/app/menu.rs +++ b/src-tauri/src/app/menu.rs @@ -1,4 +1,7 @@ -use crate::{conf, utils}; +use crate::{ + conf::{self, ChatConfJson}, + utils, +}; use tauri::{ utils::assets::EmbeddedAssets, AboutMetadata, AppHandle, Context, CustomMenuItem, Manager, Menu, MenuItem, Submenu, SystemTray, SystemTrayEvent, SystemTrayMenu, WindowMenuEvent, @@ -13,6 +16,11 @@ pub fn init(chat_conf: &conf::ChatConfJson, context: &Context) - Menu::new() .add_native_item(MenuItem::About(name.into(), AboutMetadata::default())) .add_native_item(MenuItem::Separator) + .add_item( + CustomMenuItem::new("restart".to_string(), "Restart ChatGPT") + .accelerator("CmdOrCtrl+Shift+R"), + ) + .add_native_item(MenuItem::Services) .add_native_item(MenuItem::Separator) .add_native_item(MenuItem::Hide) .add_native_item(MenuItem::HideOthers) @@ -23,24 +31,52 @@ pub fn init(chat_conf: &conf::ChatConfJson, context: &Context) - let always_on_top = CustomMenuItem::new("always_on_top".to_string(), "Always On Top") .accelerator("CmdOrCtrl+T"); + let titlebar = + CustomMenuItem::new("titlebar".to_string(), "Titlebar").accelerator("CmdOrCtrl+B"); + let theme_light = CustomMenuItem::new("theme_light".to_string(), "Light"); + let theme_dark = CustomMenuItem::new("theme_dark".to_string(), "Dark"); + let is_dark = chat_conf.theme == "Dark"; + + let always_on_top_menu = if chat_conf.always_on_top { + always_on_top.selected() + } else { + always_on_top + }; + let titlebar_menu = if chat_conf.titlebar { + titlebar.selected() + } else { + titlebar + }; let preferences_menu = Submenu::new( "Preferences", - Menu::new() - .add_item( - CustomMenuItem::new("inject_script".to_string(), "Inject Script") - .accelerator("CmdOrCtrl+J"), + Menu::with_items([ + Submenu::new( + "Theme", + Menu::new() + .add_item(if is_dark { + theme_light + } else { + theme_light.selected() + }) + .add_item(if is_dark { + theme_dark.selected() + } else { + theme_dark + }), ) - .add_item(if chat_conf.always_on_top { - always_on_top.selected() - } else { - always_on_top - }) - .add_native_item(MenuItem::Separator) - .add_item( - CustomMenuItem::new("awesome".to_string(), "Awesome ChatGPT") - .accelerator("CmdOrCtrl+Z"), - ), + .into(), + always_on_top_menu.into(), + #[cfg(target_os = "macos")] + titlebar_menu.into(), + CustomMenuItem::new("inject_script".to_string(), "Inject Script") + .accelerator("CmdOrCtrl+J") + .into(), + MenuItem::Separator.into(), + CustomMenuItem::new("awesome".to_string(), "Awesome ChatGPT") + .accelerator("CmdOrCtrl+Z") + .into(), + ]), ); let edit_menu = Submenu::new( @@ -73,6 +109,7 @@ pub fn init(chat_conf: &conf::ChatConfJson, context: &Context) - CustomMenuItem::new("scroll_bottom".to_string(), "Scroll to Bottom of Screen") .accelerator("CmdOrCtrl+Down"), ) + .add_native_item(MenuItem::Zoom) .add_native_item(MenuItem::Separator) .add_item( CustomMenuItem::new("reload".to_string(), "Refresh the Screen") @@ -110,9 +147,25 @@ pub fn menu_handler(event: WindowMenuEvent) { let menu_handle = core_window.menu_handle(); match menu_id { + // App + "restart" => tauri::api::process::restart(&app.env()), // Preferences "inject_script" => open(&app, script_path), "awesome" => open(&app, conf::AWESOME_URL.to_string()), + "titlebar" => { + let chat_conf = conf::ChatConfJson::get_chat_conf(); + ChatConfJson::amend(&serde_json::json!({ "titlebar": !chat_conf.titlebar })).unwrap(); + tauri::api::process::restart(&app.env()); + } + "theme_light" | "theme_dark" => { + let theme = if menu_id == "theme_dark" { + "Dark" + } else { + "Light" + }; + ChatConfJson::amend(&serde_json::json!({ "theme": theme })).unwrap(); + tauri::api::process::restart(&app.env()); + } "always_on_top" => { let mut always_on_top = state.always_on_top.lock().unwrap(); *always_on_top = !*always_on_top; @@ -121,7 +174,7 @@ pub fn menu_handler(event: WindowMenuEvent) { .set_selected(*always_on_top) .unwrap(); win.set_always_on_top(*always_on_top).unwrap(); - conf::ChatConfJson::update_chat_conf(*always_on_top); + ChatConfJson::amend(&serde_json::json!({ "always_on_top": *always_on_top })).unwrap(); } // View "reload" => win.eval("window.location.reload()").unwrap(), diff --git a/src-tauri/src/app/setup.rs b/src-tauri/src/app/setup.rs index 84cdc5a..8cc5fd6 100644 --- a/src-tauri/src/app/setup.rs +++ b/src-tauri/src/app/setup.rs @@ -1,15 +1,13 @@ use crate::{app::window, conf, utils}; use tauri::{utils::config::WindowUrl, window::WindowBuilder, App, Manager}; -#[cfg(target_os = "macos")] -use tauri::TitleBarStyle; - pub fn init( app: &mut App, chat_conf: conf::ChatConfJson, ) -> std::result::Result<(), Box> { - let conf = utils::get_tauri_conf().unwrap(); - let url = conf.build.dev_path.to_string(); + let tauri_conf = utils::get_tauri_conf().unwrap(); + let url = tauri_conf.build.dev_path.to_string(); + let theme = conf::ChatConfJson::theme(); window::mini_window(&app.app_handle()); #[cfg(target_os = "macos")] @@ -18,8 +16,9 @@ pub fn init( .fullscreen(false) .inner_size(800.0, 600.0) .hidden_title(true) - .title_bar_style(TitleBarStyle::Overlay) + .theme(theme) .always_on_top(chat_conf.always_on_top) + .title_bar_style(conf::ChatConfJson::titlebar()) .initialization_script(&utils::user_script()) .initialization_script(include_str!("../assets/html2canvas.js")) .initialization_script(include_str!("../assets/jspdf.js")) @@ -34,6 +33,7 @@ pub fn init( .resizable(true) .fullscreen(false) .inner_size(800.0, 600.0) + .theme(theme) .always_on_top(chat_conf.always_on_top) .initialization_script(&utils::user_script()) .initialization_script(include_str!("../assets/html2canvas.js")) diff --git a/src-tauri/src/app/window.rs b/src-tauri/src/app/window.rs index e969d71..1789934 100644 --- a/src-tauri/src/app/window.rs +++ b/src-tauri/src/app/window.rs @@ -2,8 +2,10 @@ use crate::{conf, utils}; use tauri::{utils::config::WindowUrl, window::WindowBuilder}; pub fn mini_window(handle: &tauri::AppHandle) { - let conf = utils::get_tauri_conf().unwrap(); - let url = conf.build.dev_path.to_string(); + let tauri_conf = utils::get_tauri_conf().unwrap(); + let url = tauri_conf.build.dev_path.to_string(); + // let chat_conf = conf::ChatConfJson::get_chat_conf(); + let theme = conf::ChatConfJson::theme(); WindowBuilder::new(handle, "mini", WindowUrl::App(url.into())) .resizable(false) @@ -11,13 +13,13 @@ pub fn mini_window(handle: &tauri::AppHandle) { .inner_size(360.0, 540.0) .decorations(false) .always_on_top(true) + .theme(theme) .initialization_script(&utils::user_script()) .initialization_script(include_str!("../assets/html2canvas.js")) .initialization_script(include_str!("../assets/jspdf.js")) .initialization_script(include_str!("../assets/core.js")) .initialization_script(include_str!("../assets/export.js")) .user_agent(conf::PHONE_USER_AGENT) - .menu(tauri::Menu::new()) .build() .unwrap() .hide() diff --git a/src-tauri/src/assets/core.js b/src-tauri/src/assets/core.js index fe79a00..46c83d4 100644 --- a/src-tauri/src/assets/core.js +++ b/src-tauri/src/assets/core.js @@ -54,7 +54,8 @@ async function init() { } const _platform = await platform(); - if (/darwin/.test(_platform)) { + const chatConf = await invoke('get_chat_conf') || {}; + if (/darwin/.test(_platform) && !chatConf.titlebar) { const topStyleDom = document.createElement("style"); topStyleDom.innerHTML = `#chatgpt-app-window-top{position:fixed;top:0;z-index:999999999;width:100%;height:24px;background:transparent;cursor:grab;cursor:-webkit-grab;user-select:none;-webkit-user-select:none;}#chatgpt-app-window-top:active {cursor:grabbing;cursor:-webkit-grabbing;}`; document.head.appendChild(topStyleDom); diff --git a/src-tauri/src/conf.rs b/src-tauri/src/conf.rs index 8486d05..18dcb64 100644 --- a/src-tauri/src/conf.rs +++ b/src-tauri/src/conf.rs @@ -1,7 +1,8 @@ use crate::utils::{chat_root, create_file, exists}; -use std::fs; -use std::path::PathBuf; -use std::sync::Mutex; +use anyhow::Result; +use serde_json::Value; +use std::{collections::BTreeMap, fs, path::PathBuf, sync::Mutex}; +use tauri::{Theme, TitleBarStyle}; pub const USER_AGENT: &str = "5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"; pub const PHONE_USER_AGENT: &str = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"; @@ -13,7 +14,7 @@ pub struct ChatState { } impl ChatState { - pub fn default(chat_conf: &ChatConfJson) -> Self { + pub fn default(chat_conf: ChatConfJson) -> Self { ChatState { always_on_top: Mutex::new(chat_conf.always_on_top), } @@ -23,6 +24,8 @@ impl ChatState { #[derive(serde::Serialize, serde::Deserialize, Debug, Clone)] pub struct ChatConfJson { pub always_on_top: bool, + pub theme: String, + pub titlebar: bool, } impl ChatConfJson { @@ -32,7 +35,22 @@ impl ChatConfJson { let conf_file = ChatConfJson::conf_path(); if !exists(&conf_file) { create_file(&conf_file).unwrap(); - fs::write(&conf_file, r#"{"always_on_top": false}"#).unwrap(); + + #[cfg(target_os = "macos")] + let content = r#"{ + "always_on_top": false, + "theme": "Light", + "titlebar": false + }"#; + + #[cfg(not(target_os = "macos"))] + let content = r#"{ + "always_on_top": false, + "theme": "Light", + "titlebar": true + }"#; + + fs::write(&conf_file, content).unwrap(); } conf_file } @@ -43,24 +61,49 @@ impl ChatConfJson { pub fn get_chat_conf() -> Self { let config_file = fs::read_to_string(ChatConfJson::conf_path()).unwrap(); - let config: serde_json::Value = + let config: Value = serde_json::from_str(&config_file).expect("failed to parse chat.conf.json"); serde_json::from_value(config).unwrap_or_else(|_| ChatConfJson::chat_conf_default()) } - pub fn update_chat_conf(always_on_top: bool) { - let mut conf = ChatConfJson::get_chat_conf(); - conf.always_on_top = always_on_top; - fs::write( - ChatConfJson::conf_path(), - serde_json::to_string(&conf).unwrap(), - ) - .unwrap(); + // https://users.rust-lang.org/t/updating-object-fields-given-dynamic-json/39049/3 + pub fn amend(new_rules: &Value) -> Result<()> { + let config = ChatConfJson::get_chat_conf(); + let config: Value = serde_json::to_value(&config)?; + let mut config: BTreeMap = serde_json::from_value(config)?; + let new_rules: BTreeMap = serde_json::from_value(new_rules.clone())?; + + for (k, v) in new_rules { + config.insert(k, v); + } + + fs::write(ChatConfJson::conf_path(), serde_json::to_string(&config)?)?; + Ok(()) + } + + pub fn theme() -> Option { + let conf = ChatConfJson::get_chat_conf(); + if conf.theme == "Dark" { + Some(Theme::Dark) + } else { + Some(Theme::Light) + } + } + + pub fn titlebar() -> TitleBarStyle { + let conf = ChatConfJson::get_chat_conf(); + if conf.titlebar { + TitleBarStyle::Transparent + } else { + TitleBarStyle::Overlay + } } pub fn chat_conf_default() -> Self { serde_json::from_value(serde_json::json!({ "always_on_top": false, + "theme": "Light", + "titlebar": true })) .unwrap() } diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 57b55e0..3ec00ed 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -17,12 +17,13 @@ fn main() { let chat_conf2 = chat_conf.clone(); tauri::Builder::default() - .manage(conf::ChatState::default(&chat_conf)) + .manage(conf::ChatState::default(chat_conf.clone())) .invoke_handler(tauri::generate_handler![ cmd::drag_window, cmd::fullscreen, cmd::download, - cmd::open_link + cmd::open_link, + cmd::get_chat_conf, ]) .setup(|app| setup::init(app, chat_conf2)) .plugin(tauri_plugin_positioner::init()) diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index ef29397..5d4b0fd 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -14,8 +14,8 @@ "all": true }, "systemTray": { - "iconPath": "icons/icon.png", - "iconAsTemplate": false + "iconPath": "icons/tray-icon.png", + "iconAsTemplate": true }, "bundle": { "active": true,