chore: window

This commit is contained in:
lencx
2023-01-23 00:36:39 +08:00
parent f1ec7c6495
commit 84a29d7cda
11 changed files with 96 additions and 65 deletions

View File

@@ -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(),
]),
);

View File

@@ -50,7 +50,7 @@ pub fn init(app: &mut App) -> std::result::Result<(), Box<dyn std::error::Error>
} 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<dyn std::error::Error>
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();

View File

@@ -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()

View File

@@ -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<String>,

View File

@@ -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);
}
},
);

30
src/components/SwitchOrigin/index.tsx vendored Normal file
View File

@@ -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<SwitchOriginProps> = ({ name }) => {
const { json: list = [] } = useJson<any[]>(CHAT_AWESOME_JSON);
return (
<Form.Item
label={<span>Switch Origin ({name === 'origin' ? 'Main' : 'SystemTray'})</span>}
name={name}
>
<Select showSearch {...DISABLE_AUTO_COMPLETE} optionLabelProp="url">
{[{ title: 'ChatGPT', url: 'https://chat.openai.com' }, ...list].map((i) => (
<Select.Option key={i.url} label={i.title} value={i.url}>
<Tag color="geekblue">{i.title}</Tag> {i.url}
</Select.Option>
))}
</Select>
</Form.Item>
);
};
export default SwitchOrigin;

View File

@@ -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) => <a onClick={() => open(v)}>{v}</a>,
},
// {
// title: 'Icon',

View File

@@ -68,6 +68,11 @@ export default function General() {
<Switch />
</Form.Item>
)}
{platformInfo === 'darwin' && (
<Form.Item label="Hide Dock Icon" name="hide_dock_icon" valuePropName="checked">
<Switch />
</Form.Item>
)}
<Form.Item label="Theme" name="theme">
<Radio.Group>
<Radio value="Light">Light</Radio>

View File

@@ -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 (
<span>
Switch Origin{' '}
<Tooltip title={`Default: ${url}`}>
<QuestionCircleOutlined style={{ color: '#1677ff' }} />
</Tooltip>
</span>
);
};
const PopupSearchLabel = () => {
return (
<span>
@@ -44,21 +31,12 @@ const PopupSearchLabel = () => {
};
export default function General() {
const [chatConf, setChatConf] = useState<any>(null);
useInit(async () => {
const chatData = await invoke('get_chat_conf');
setChatConf(chatData);
});
return (
<>
<Form.Item label={<PopupSearchLabel />} name="popup_search" valuePropName="checked">
<Switch />
</Form.Item>
<Form.Item label={<OriginLabel url={chatConf?.default_origin} />} name="origin">
<Input placeholder="https://chat.openai.com" {...DISABLE_AUTO_COMPLETE} />
</Form.Item>
<SwitchOrigin name="origin" />
<Form.Item label="User Agent (Main)" name="ua_window">
<Input.TextArea
autoSize={{ minRows: 4, maxRows: 4 }}

View File

@@ -1,6 +1,7 @@
import { Form, Switch, Input } from 'antd';
import { DISABLE_AUTO_COMPLETE } from '@/utils';
import SwitchOrigin from '@/components/SwitchOrigin';
export default function General() {
return (
@@ -8,6 +9,7 @@ export default function General() {
<Form.Item label="Enable SystemTray" name="tray" valuePropName="checked">
<Switch />
</Form.Item>
<SwitchOrigin name="tray_origin" />
<Form.Item label="User Agent (SystemTray)" name="ua_tray">
<Input.TextArea
autoSize={{ minRows: 4, maxRows: 4 }}

View File

@@ -61,8 +61,8 @@ export default function Settings() {
form={form}
style={{ maxWidth: 500 }}
onFinish={onFinish}
labelCol={{ span: 8 }}
wrapperCol={{ span: 15, offset: 1 }}
labelCol={{ span: 10 }}
wrapperCol={{ span: 13, offset: 1 }}
>
<Tabs
items={[