diff --git a/README.md b/README.md index 9bc3576..dead50a 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,9 @@ **Latest:** -- `Mac`: [ChatGPT_0.1.6_x64.dmg](https://github.com/lencx/ChatGPT/releases/download/v0.1.6/ChatGPT_0.1.6_x64.dmg) -- `Linux`: [chat-gpt_0.1.6_amd64.deb](https://github.com/lencx/ChatGPT/releases/download/v0.1.6/chat-gpt_0.1.6_amd64.deb) -- `Windows`: [ChatGPT_0.1.6_x64_en-US.msi](https://github.com/lencx/ChatGPT/releases/download/v0.1.6/ChatGPT_0.1.6_x64_en-US.msi) +- `Mac`: [ChatGPT_0.1.7_x64.dmg](https://github.com/lencx/ChatGPT/releases/download/v0.1.7/ChatGPT_0.1.7_x64.dmg) +- `Linux`: [chat-gpt_0.1.7_amd64.deb](https://github.com/lencx/ChatGPT/releases/download/v0.1.7/chat-gpt_0.1.7_amd64.deb) +- `Windows`: [ChatGPT_0.1.7_x64_en-US.msi](https://github.com/lencx/ChatGPT/releases/download/v0.1.7/ChatGPT_0.1.7_x64_en-US.msi) [Other version...](https://github.com/lencx/ChatGPT/releases) @@ -31,14 +31,14 @@ - inject script - auto updater - app menu -- system tray +- tray window - shortcut ## Preview install chat -export auto update - +export tray +auto update ## FAQ ### Is it safe? diff --git a/UPDATE_LOG.md b/UPDATE_LOG.md index 3ed01a1..faccfd8 100644 --- a/UPDATE_LOG.md +++ b/UPDATE_LOG.md @@ -1,5 +1,9 @@ # UPDATE LOG +## v0.1.7 + +feat: tray window + ## v0.1.6 feat: diff --git a/assets/tray.png b/assets/tray.png new file mode 100644 index 0000000..de46b51 Binary files /dev/null and b/assets/tray.png differ diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 88d51cc..47bb13b 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -17,6 +17,7 @@ tauri-build = {version = "1.2.1", features = [] } serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } tauri = { version = "1.2.1", features = ["api-all", "devtools", "system-tray", "updater"] } +tauri-plugin-positioner = { version = "1.0.4", features = ["system-tray"] } anyhow = "1.0.66" [features] diff --git a/src-tauri/src/app/menu.rs b/src-tauri/src/app/menu.rs index 605b202..ef88c3f 100644 --- a/src-tauri/src/app/menu.rs +++ b/src-tauri/src/app/menu.rs @@ -3,6 +3,7 @@ use tauri::{ utils::assets::EmbeddedAssets, AboutMetadata, AppHandle, Context, CustomMenuItem, Manager, Menu, MenuItem, Submenu, SystemTray, SystemTrayEvent, SystemTrayMenu, WindowMenuEvent, }; +use tauri_plugin_positioner::{on_tray_event, Position, WindowExt}; // --- Menu pub fn init(chat_conf: &conf::ChatConfJson, context: &Context) -> Menu { @@ -159,16 +160,19 @@ pub fn tray_menu() -> SystemTray { } // --- SystemTray Event -pub fn tray_handler(app: &AppHandle, event: SystemTrayEvent) { - let win = app.get_window("core").unwrap(); +pub fn tray_handler(handle: &AppHandle, event: SystemTrayEvent) { + let core_win = handle.get_window("core").unwrap(); + on_tray_event(handle, &event); if let SystemTrayEvent::LeftClick { .. } = event { - // TODO: tray window - if win.is_visible().unwrap() { - win.hide().unwrap(); + core_win.minimize().unwrap(); + let mini_win = handle.get_window("mini").unwrap(); + mini_win.move_window(Position::TrayCenter).unwrap(); + + if mini_win.is_visible().unwrap() { + mini_win.hide().unwrap(); } else { - win.show().unwrap(); - win.set_focus().unwrap(); + mini_win.show().unwrap(); } } } diff --git a/src-tauri/src/app/mod.rs b/src-tauri/src/app/mod.rs index 5a9ad92..5466c45 100644 --- a/src-tauri/src/app/mod.rs +++ b/src-tauri/src/app/mod.rs @@ -1,3 +1,4 @@ pub mod cmd; pub mod menu; pub mod setup; +pub mod window; diff --git a/src-tauri/src/app/setup.rs b/src-tauri/src/app/setup.rs index 4853acf..84cdc5a 100644 --- a/src-tauri/src/app/setup.rs +++ b/src-tauri/src/app/setup.rs @@ -1,5 +1,5 @@ -use crate::{conf, utils}; -use tauri::{utils::config::WindowUrl, window::WindowBuilder, App}; +use crate::{app::window, conf, utils}; +use tauri::{utils::config::WindowUrl, window::WindowBuilder, App, Manager}; #[cfg(target_os = "macos")] use tauri::TitleBarStyle; @@ -10,6 +10,7 @@ pub fn init( ) -> std::result::Result<(), Box> { let conf = utils::get_tauri_conf().unwrap(); let url = conf.build.dev_path.to_string(); + window::mini_window(&app.app_handle()); #[cfg(target_os = "macos")] WindowBuilder::new(app, "core", WindowUrl::App(url.into())) diff --git a/src-tauri/src/app/window.rs b/src-tauri/src/app/window.rs new file mode 100644 index 0000000..e969d71 --- /dev/null +++ b/src-tauri/src/app/window.rs @@ -0,0 +1,25 @@ +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(); + + WindowBuilder::new(handle, "mini", WindowUrl::App(url.into())) + .resizable(false) + .fullscreen(false) + .inner_size(360.0, 540.0) + .decorations(false) + .always_on_top(true) + .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() + .unwrap(); +} diff --git a/src-tauri/src/assets/core.js b/src-tauri/src/assets/core.js index bb95bae..fe79a00 100644 --- a/src-tauri/src/assets/core.js +++ b/src-tauri/src/assets/core.js @@ -40,6 +40,12 @@ window.invoke = invoke; window.transformCallback = transformCallback; async function init() { + if (__TAURI_METADATA__.__currentWindow.label === 'mini') { + document.getElementsByTagName('html')[0].style['font-size'] = '70%'; + } + + if (__TAURI_METADATA__.__currentWindow.label !== 'core') return; + async function platform() { return invoke('platform', { __tauriModule: 'Os', diff --git a/src-tauri/src/conf.rs b/src-tauri/src/conf.rs index 12efb5a..8486d05 100644 --- a/src-tauri/src/conf.rs +++ b/src-tauri/src/conf.rs @@ -4,6 +4,7 @@ use std::path::PathBuf; use std::sync::Mutex; 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"; pub const ISSUES_URL: &str = "https://github.com/lencx/ChatGPT/issues"; pub const AWESOME_URL: &str = "https://github.com/lencx/ChatGPT/blob/main/AWESOME.md"; diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 034ebf2..57b55e0 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -25,6 +25,7 @@ fn main() { cmd::open_link ]) .setup(|app| setup::init(app, chat_conf2)) + .plugin(tauri_plugin_positioner::init()) .menu(menu::init(&chat_conf, &context)) .system_tray(menu::tray_menu()) .on_menu_event(menu::menu_handler)