mirror of
https://github.com/FranP-code/ChatGPT.git
synced 2025-10-13 00:13:25 +00:00
chore: window
This commit is contained in:
@@ -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(),
|
||||
]),
|
||||
);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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>,
|
||||
|
||||
@@ -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
30
src/components/SwitchOrigin/index.tsx
vendored
Normal 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;
|
||||
2
src/view/awesome/config.tsx
vendored
2
src/view/awesome/config.tsx
vendored
@@ -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',
|
||||
|
||||
5
src/view/settings/General.tsx
vendored
5
src/view/settings/General.tsx
vendored
@@ -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>
|
||||
|
||||
26
src/view/settings/MainWindow.tsx
vendored
26
src/view/settings/MainWindow.tsx
vendored
@@ -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 }}
|
||||
|
||||
2
src/view/settings/TrayWindow.tsx
vendored
2
src/view/settings/TrayWindow.tsx
vendored
@@ -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 }}
|
||||
|
||||
4
src/view/settings/index.tsx
vendored
4
src/view/settings/index.tsx
vendored
@@ -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={[
|
||||
|
||||
Reference in New Issue
Block a user