From 84a29d7cda8a86e27e441aa358833a46b567d721 Mon Sep 17 00:00:00 2001 From: lencx Date: Mon, 23 Jan 2023 00:36:39 +0800 Subject: [PATCH] chore: window --- src-tauri/src/app/menu.rs | 8 ++---- src-tauri/src/app/setup.rs | 26 ++++++++++-------- src-tauri/src/app/window.rs | 38 +++++++++++++++++---------- src-tauri/src/conf.rs | 13 +++++---- src-tauri/src/utils.rs | 7 ++--- src/components/SwitchOrigin/index.tsx | 30 +++++++++++++++++++++ src/view/awesome/config.tsx | 2 ++ src/view/settings/General.tsx | 5 ++++ src/view/settings/MainWindow.tsx | 26 ++---------------- src/view/settings/TrayWindow.tsx | 2 ++ src/view/settings/index.tsx | 4 +-- 11 files changed, 96 insertions(+), 65 deletions(-) create mode 100644 src/components/SwitchOrigin/index.tsx diff --git a/src-tauri/src/app/menu.rs b/src-tauri/src/app/menu.rs index 4860e6c..daaddcb 100644 --- a/src-tauri/src/app/menu.rs +++ b/src-tauri/src/app/menu.rs @@ -137,16 +137,12 @@ pub fn init() -> Menu { CustomMenuItem::new("go_conf".to_string(), "Go to Config") .accelerator("CmdOrCtrl+Shift+G") .into(), - CustomMenuItem::new("clear_conf".to_string(), "Clear Config") - .accelerator("CmdOrCtrl+Shift+D") - .into(), CustomMenuItem::new("restart".to_string(), "Restart ChatGPT") .accelerator("CmdOrCtrl+Shift+R") .into(), + CustomMenuItem::new("clear_conf".to_string(), "Clear Config").into(), MenuItem::Separator.into(), - CustomMenuItem::new("awesome".to_string(), "Awesome ChatGPT") - .accelerator("CmdOrCtrl+Shift+A") - .into(), + CustomMenuItem::new("awesome".to_string(), "Awesome ChatGPT").into(), CustomMenuItem::new("buy_coffee".to_string(), "Buy lencx a coffee").into(), ]), ); diff --git a/src-tauri/src/app/setup.rs b/src-tauri/src/app/setup.rs index ab2c133..a2a9bc0 100644 --- a/src-tauri/src/app/setup.rs +++ b/src-tauri/src/app/setup.rs @@ -50,7 +50,7 @@ pub fn init(app: &mut App) -> std::result::Result<(), Box } else { let app = app.handle(); tauri::async_runtime::spawn(async move { - let mut main_win = WindowBuilder::new(&app, "core", WindowUrl::App(url.into())) + let mut main_win = WindowBuilder::new(&app, "core", WindowUrl::App(url.clone().into())) .title("ChatGPT") .resizable(true) .fullscreen(false) @@ -60,22 +60,26 @@ pub fn init(app: &mut App) -> std::result::Result<(), Box main_win = main_win.hidden_title(true); } + if url == "https://chat.openai.com" { + main_win = main_win + .initialization_script(include_str!("../vendors/floating-ui-core.js")) + .initialization_script(include_str!("../vendors/floating-ui-dom.js")) + .initialization_script(include_str!("../vendors/html2canvas.js")) + .initialization_script(include_str!("../vendors/jspdf.js")) + .initialization_script(include_str!("../vendors/turndown.js")) + .initialization_script(include_str!("../vendors/turndown-plugin-gfm.js")) + .initialization_script(include_str!("../scripts/popup.core.js")) + .initialization_script(include_str!("../scripts/export.js")) + .initialization_script(include_str!("../scripts/markdown.export.js")) + .initialization_script(include_str!("../scripts/cmd.js")) + } + main_win .theme(theme) .always_on_top(chat_conf.stay_on_top) .title_bar_style(ChatConfJson::titlebar()) .initialization_script(&utils::user_script()) - .initialization_script(include_str!("../vendors/floating-ui-core.js")) - .initialization_script(include_str!("../vendors/floating-ui-dom.js")) - .initialization_script(include_str!("../vendors/html2canvas.js")) - .initialization_script(include_str!("../vendors/jspdf.js")) - .initialization_script(include_str!("../vendors/turndown.js")) - .initialization_script(include_str!("../vendors/turndown-plugin-gfm.js")) .initialization_script(include_str!("../scripts/core.js")) - .initialization_script(include_str!("../scripts/popup.core.js")) - .initialization_script(include_str!("../scripts/export.js")) - .initialization_script(include_str!("../scripts/markdown.export.js")) - .initialization_script(include_str!("../scripts/cmd.js")) .user_agent(&chat_conf.ua_window) .build() .unwrap(); diff --git a/src-tauri/src/app/window.rs b/src-tauri/src/app/window.rs index 990e7b3..7f4164e 100644 --- a/src-tauri/src/app/window.rs +++ b/src-tauri/src/app/window.rs @@ -9,20 +9,30 @@ pub fn tray_window(handle: &tauri::AppHandle) { let app = handle.clone(); tauri::async_runtime::spawn(async move { - WindowBuilder::new(&app, "tray", WindowUrl::App(chat_conf.origin.into())) - .title("ChatGPT") - .resizable(false) - .fullscreen(false) - .inner_size(360.0, 540.0) - .decorations(false) - .always_on_top(true) - .theme(theme) - .initialization_script(&utils::user_script()) - .initialization_script(include_str!("../vendors/floating-ui-core.js")) - .initialization_script(include_str!("../vendors/floating-ui-dom.js")) - .initialization_script(include_str!("../scripts/core.js")) - .initialization_script(include_str!("../scripts/cmd.js")) - .initialization_script(include_str!("../scripts/popup.core.js")) + let mut tray_win = WindowBuilder::new( + &app, + "tray", + WindowUrl::App(chat_conf.tray_origin.clone().into()), + ) + .title("ChatGPT") + .resizable(false) + .fullscreen(false) + .inner_size(360.0, 540.0) + .decorations(false) + .always_on_top(true) + .theme(theme) + .initialization_script(&utils::user_script()) + .initialization_script(include_str!("../scripts/core.js")); + + if chat_conf.tray_origin == "https://chat.openai.com" { + tray_win = tray_win + .initialization_script(include_str!("../vendors/floating-ui-core.js")) + .initialization_script(include_str!("../vendors/floating-ui-dom.js")) + .initialization_script(include_str!("../scripts/cmd.js")) + .initialization_script(include_str!("../scripts/popup.core.js")) + } + + tray_win .user_agent(&chat_conf.ua_tray) .build() .unwrap() diff --git a/src-tauri/src/conf.rs b/src-tauri/src/conf.rs index 9f6c648..56b9ab0 100644 --- a/src-tauri/src/conf.rs +++ b/src-tauri/src/conf.rs @@ -26,10 +26,11 @@ pub const DEFAULT_CHAT_CONF: &str = r#"{ "popup_search": false, "global_shortcut": "", "hide_dock_icon": false, - "default_origin": "https://chat.openai.com", "origin": "https://chat.openai.com", + "tray_origin": "https://chat.openai.com", + "default_origin": "https://chat.openai.com", "ua_window": "", - "ua_tray": "" + "ua_tray": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1" }"#; pub const DEFAULT_CHAT_CONF_MAC: &str = r#"{ "stay_on_top": false, @@ -40,10 +41,11 @@ pub const DEFAULT_CHAT_CONF_MAC: &str = r#"{ "popup_search": false, "global_shortcut": "", "hide_dock_icon": false, - "default_origin": "https://chat.openai.com", "origin": "https://chat.openai.com", + "tray_origin": "https://chat.openai.com", + "default_origin": "https://chat.openai.com", "ua_window": "", - "ua_tray": "" + "ua_tray": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1" }"#; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone)] @@ -59,8 +61,9 @@ pub struct ChatConfJson { pub tray: bool, pub popup_search: bool, pub stay_on_top: bool, - pub default_origin: String, pub origin: String, + pub tray_origin: String, + pub default_origin: String, pub ua_window: String, pub ua_tray: String, pub global_shortcut: Option, diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index d0735c9..9945bcd 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -84,9 +84,10 @@ pub fn open_file(path: PathBuf) { pub fn clear_conf(app: &tauri::AppHandle) { let root = chat_root(); - let app2 = app.clone(); let msg = format!( - "Path: {}\nAre you sure to clear all ChatGPT configurations? Please backup in advance if necessary!", + "Path: {}\n + Are you sure you want to clear all ChatGPT configurations? Performing this operation data can not be restored, please back up in advance.\n + Note: The application will exit automatically after the configuration cleanup!", root.to_string_lossy() ); tauri::api::dialog::ask( @@ -96,7 +97,7 @@ pub fn clear_conf(app: &tauri::AppHandle) { move |is_ok| { if is_ok { fs::remove_dir_all(root).unwrap(); - tauri::api::process::restart(&app2.env()); + std::process::exit(0); } }, ); diff --git a/src/components/SwitchOrigin/index.tsx b/src/components/SwitchOrigin/index.tsx new file mode 100644 index 0000000..70cf883 --- /dev/null +++ b/src/components/SwitchOrigin/index.tsx @@ -0,0 +1,30 @@ +import { FC } from 'react'; +import { Form, Select, Tag } from 'antd'; + +import useJson from '@/hooks/useJson'; +import { DISABLE_AUTO_COMPLETE, CHAT_CONF_JSON, CHAT_AWESOME_JSON } from '@/utils'; + +interface SwitchOriginProps { + name: string; +} + +const SwitchOrigin: FC = ({ name }) => { + const { json: list = [] } = useJson(CHAT_AWESOME_JSON); + + return ( + Switch Origin ({name === 'origin' ? 'Main' : 'SystemTray'})} + name={name} + > + + + ); +}; + +export default SwitchOrigin; diff --git a/src/view/awesome/config.tsx b/src/view/awesome/config.tsx index 8556a3b..164c227 100644 --- a/src/view/awesome/config.tsx +++ b/src/view/awesome/config.tsx @@ -1,4 +1,5 @@ import { Tag, Space, Popconfirm, Switch } from 'antd'; +import { open } from '@tauri-apps/api/shell'; export const awesomeColumns = () => [ { @@ -13,6 +14,7 @@ export const awesomeColumns = () => [ dataIndex: 'url', key: 'url', width: 200, + render: (v: string) => open(v)}>{v}, }, // { // title: 'Icon', diff --git a/src/view/settings/General.tsx b/src/view/settings/General.tsx index 88207b1..6daddb8 100644 --- a/src/view/settings/General.tsx +++ b/src/view/settings/General.tsx @@ -68,6 +68,11 @@ export default function General() { )} + {platformInfo === 'darwin' && ( + + + + )} Light diff --git a/src/view/settings/MainWindow.tsx b/src/view/settings/MainWindow.tsx index 99a7378..18f7a6d 100644 --- a/src/view/settings/MainWindow.tsx +++ b/src/view/settings/MainWindow.tsx @@ -1,22 +1,9 @@ -import { useState } from 'react'; import { Form, Switch, Input, Tooltip } from 'antd'; import { QuestionCircleOutlined } from '@ant-design/icons'; -import { invoke } from '@tauri-apps/api'; -import useInit from '@/hooks/useInit'; +import SwitchOrigin from '@/components/SwitchOrigin'; import { DISABLE_AUTO_COMPLETE } from '@/utils'; -const OriginLabel = ({ url }: { url: string }) => { - return ( - - Switch Origin{' '} - - - - - ); -}; - const PopupSearchLabel = () => { return ( @@ -44,21 +31,12 @@ const PopupSearchLabel = () => { }; export default function General() { - const [chatConf, setChatConf] = useState(null); - - useInit(async () => { - const chatData = await invoke('get_chat_conf'); - setChatConf(chatData); - }); - return ( <> } name="popup_search" valuePropName="checked"> - } name="origin"> - - + +