1
0
mirror of https://github.com/lencx/ChatGPT.git synced 2024-10-01 01:06:13 -04:00
This commit is contained in:
lencx 2023-01-05 17:18:47 +08:00
commit a6e746d27e
10 changed files with 83 additions and 70 deletions

View File

@ -57,8 +57,8 @@ jobs:
- name: Install app dependencies and build it - name: Install app dependencies and build it
run: yarn && yarn build:fe run: yarn && yarn build:fe
- name: Rewrite tauri.conf.json # - name: Rewrite tauri.conf.json
run: yarn fix:conf # run: yarn fix:conf
- name: fix tray icon - name: fix tray icon
if: matrix.platform != 'macos-latest' if: matrix.platform != 'macos-latest'

View File

@ -16,7 +16,8 @@
## 📦 安装 ## 📦 安装
[📝 更新日志](./UPDATE_LOG.md) - [📝 更新日志](./UPDATE_LOG.md)
- [🕒 历史版本...](https://github.com/lencx/ChatGPT/releases)
<!-- download start --> <!-- download start -->
@ -50,6 +51,7 @@
- [chat-gpt_0.7.4_amd64.deb](https://github.com/lencx/ChatGPT/releases/download/v0.7.4/chat-gpt_0.7.4_amd64.deb) - [chat-gpt_0.7.4_amd64.deb](https://github.com/lencx/ChatGPT/releases/download/v0.7.4/chat-gpt_0.7.4_amd64.deb)
- [chat-gpt_0.7.4_amd64.AppImage](https://github.com/lencx/ChatGPT/releases/download/v0.7.4/chat-gpt_0.7.4_amd64.AppImage): **工作可靠,`.deb` 运行失败时可以尝试它** - [chat-gpt_0.7.4_amd64.AppImage](https://github.com/lencx/ChatGPT/releases/download/v0.7.4/chat-gpt_0.7.4_amd64.AppImage): **工作可靠,`.deb` 运行失败时可以尝试它**
- [chatgpt-desktop-bin](https://aur.archlinux.org/packages/chatgpt-desktop-bin): 使用 AUR 来安装
<!-- download end --> <!-- download end -->
@ -134,7 +136,7 @@
目前同步自定文件仅支持 json 和 csv且需要满足以下格式否则会导致应用异常 目前同步自定文件仅支持 json 和 csv且需要满足以下格式否则会导致应用异常
> JSON 格式 `JSON 格式`
```json ```json
[ [
@ -151,7 +153,7 @@
] ]
``` ```
> CSV 格式 `CSV 格式`
```csv ```csv
"cmd","act","prompt" "cmd","act","prompt"

View File

@ -19,7 +19,8 @@
## 📦 Install ## 📦 Install
[📝 Update Log](./UPDATE_LOG.md) - [📝 Update Log](./UPDATE_LOG.md)
- [🕒 History versions...](https://github.com/lencx/ChatGPT/releases)
<!-- download start --> <!-- download start -->
@ -53,8 +54,7 @@
- [chat-gpt_0.7.4_amd64.deb](https://github.com/lencx/ChatGPT/releases/download/v0.7.4/chat-gpt_0.7.4_amd64.deb) - [chat-gpt_0.7.4_amd64.deb](https://github.com/lencx/ChatGPT/releases/download/v0.7.4/chat-gpt_0.7.4_amd64.deb)
- [chat-gpt_0.7.4_amd64.AppImage](https://github.com/lencx/ChatGPT/releases/download/v0.7.4/chat-gpt_0.7.4_amd64.AppImage): **works reliably, you can try it if `.deb` fails to run** - [chat-gpt_0.7.4_amd64.AppImage](https://github.com/lencx/ChatGPT/releases/download/v0.7.4/chat-gpt_0.7.4_amd64.AppImage): **works reliably, you can try it if `.deb` fails to run**
- Available on [AUR](https://aur.archlinux.org/packages/chatgpt-desktop-bin) with the package name `chatgpt-desktop-bin`, and you can use your favourite AUR package manager to install it.
[History versions...](https://github.com/lencx/ChatGPT/releases)
<!-- download end --> <!-- download end -->

View File

@ -5,7 +5,7 @@ use crate::{
}; };
use log::info; use log::info;
use std::{collections::HashMap, fs, path::PathBuf}; use std::{collections::HashMap, fs, path::PathBuf};
use tauri::{api, command, AppHandle, Manager}; use tauri::{api, command, AppHandle, Manager, Theme};
use walkdir::WalkDir; use walkdir::WalkDir;
#[command] #[command]
@ -45,6 +45,11 @@ pub fn get_chat_conf() -> ChatConfJson {
ChatConfJson::get_chat_conf() ChatConfJson::get_chat_conf()
} }
#[command]
pub fn get_theme() -> String {
ChatConfJson::theme().unwrap_or(Theme::Light).to_string()
}
#[command] #[command]
pub fn reset_chat_conf() -> ChatConfJson { pub fn reset_chat_conf() -> ChatConfJson {
ChatConfJson::reset_chat_conf() ChatConfJson::reset_chat_conf()

View File

@ -103,14 +103,13 @@ pub fn init() -> Menu {
update_silent.selected() update_silent.selected()
} else { } else {
update_silent update_silent
}) }), // .add_item(if chat_conf.auto_update == "Disable" {
// .add_item(if chat_conf.auto_update == "Disable" {
// update_disable.selected() // update_disable.selected()
// } else { // } else {
// update_disable // update_disable
// }) // })
, )
).into(), .into(),
stay_on_top_menu.into(), stay_on_top_menu.into(),
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
titlebar_menu.into(), titlebar_menu.into(),
@ -278,17 +277,26 @@ pub fn menu_handler(event: WindowMenuEvent<tauri::Wry>) {
} }
let auto_update = match menu_id { let auto_update = match menu_id {
"update_silent" => { "update_silent" => {
menu_handle.get_item("update_silent").set_selected(true).unwrap(); menu_handle
.get_item("update_silent")
.set_selected(true)
.unwrap();
"Silent" "Silent"
}, }
"update_disable" => { "update_disable" => {
menu_handle.get_item("update_disable").set_selected(true).unwrap(); menu_handle
.get_item("update_disable")
.set_selected(true)
.unwrap();
"Disable" "Disable"
}, }
_ => { _ => {
menu_handle.get_item("update_prompt").set_selected(true).unwrap(); menu_handle
.get_item("update_prompt")
.set_selected(true)
.unwrap();
"Prompt" "Prompt"
}, }
}; };
ChatConfJson::amend(&serde_json::json!({ "auto_update": auto_update }), None).unwrap(); ChatConfJson::amend(&serde_json::json!({ "auto_update": auto_update }), None).unwrap();
} }

View File

@ -52,6 +52,7 @@ async fn main() {
cmd::download, cmd::download,
cmd::open_link, cmd::open_link,
cmd::get_chat_conf, cmd::get_chat_conf,
cmd::get_theme,
cmd::reset_chat_conf, cmd::reset_chat_conf,
cmd::run_check_update, cmd::run_check_update,
cmd::form_cancel, cmd::form_cancel,

16
src/layout/index.scss vendored
View File

@ -1,16 +1,23 @@
.chat-logo { .chat-logo {
text-align: center; text-align: center;
padding: 5px 0; height: 48px;
img { img {
width: 48px; width: 44px;
height: 48px; height: 44px;
margin-top: 4px;
} }
} }
.chat-info { .chat-info {
text-align: center; text-align: center;
font-weight: bold; font-weight: bold;
.ant-tag {
margin: 2px;
} }
}
.ant-layout-sider-trigger { .ant-layout-sider-trigger {
user-select: none; user-select: none;
-webkit-user-select: none; -webkit-user-select: none;
@ -24,9 +31,6 @@
.ant-menu { .ant-menu {
user-select: none; user-select: none;
-webkit-user-select: none; -webkit-user-select: none;
.ant-menu-item {
background-color: #f8f8f8;
}
} }
.ant-layout-footer { .ant-layout-footer {

29
src/layout/index.tsx vendored
View File

@ -1,5 +1,5 @@
import { FC, useState } from 'react'; import { useState } from 'react';
import {Layout, Menu, Button, Tooltip, message} from 'antd'; import {Layout, Menu, Tooltip, ConfigProvider, theme, Tag } from 'antd';
import { SyncOutlined } from '@ant-design/icons'; import { SyncOutlined } from '@ant-design/icons';
import { useNavigate, useLocation } from 'react-router-dom'; import { useNavigate, useLocation } from 'react-router-dom';
import { getName, getVersion } from '@tauri-apps/api/app'; import { getName, getVersion } from '@tauri-apps/api/app';
@ -12,12 +12,9 @@ const { Content, Footer, Sider } = Layout;
const appName = await getName(); const appName = await getName();
const appVersion = await getVersion(); const appVersion = await getVersion();
const appTheme = await invoke("get_theme");
interface ChatLayoutProps { export default function ChatLayout() {
children?: React.ReactNode;
}
const ChatLayout: FC<ChatLayoutProps> = ({ children }) => {
const [collapsed, setCollapsed] = useState(false); const [collapsed, setCollapsed] = useState(false);
const location = useLocation(); const location = useLocation();
const go = useNavigate(); const go = useNavigate();
@ -27,9 +24,10 @@ const ChatLayout: FC<ChatLayoutProps> = ({ children }) => {
} }
return ( return (
<ConfigProvider theme={{algorithm: appTheme === "dark" ? theme.darkAlgorithm : theme.defaultAlgorithm}}>
<Layout style={{ minHeight: '100vh' }} hasSider> <Layout style={{ minHeight: '100vh' }} hasSider>
<Sider <Sider
theme="light" theme={appTheme === "dark" ? "dark" : "light"}
collapsible collapsible
collapsed={collapsed} collapsed={collapsed}
onCollapse={(value) => setCollapsed(value)} onCollapse={(value) => setCollapsed(value)}
@ -45,21 +43,19 @@ const ChatLayout: FC<ChatLayoutProps> = ({ children }) => {
> >
<div className="chat-logo"><img src="/logo.png" /></div> <div className="chat-logo"><img src="/logo.png" /></div>
<div className="chat-info"> <div className="chat-info">
<span>{appName}</span> <Tag>{appName}</Tag>
</div> <Tag>
<div className="chat-info"> <span style={{ marginRight: 5 }}>{appVersion}</span>
<span>{appVersion}</span>
<span> </span>
{
<Tooltip title="click to check update"> <Tooltip title="click to check update">
<a onClick={checkAppUpdate}><SyncOutlined /></a> <a onClick={checkAppUpdate}><SyncOutlined /></a>
</Tooltip> </Tooltip>
} </Tag>
</div> </div>
<Menu <Menu
defaultSelectedKeys={[location.pathname]} defaultSelectedKeys={[location.pathname]}
mode="inline" mode="inline"
theme={ appTheme === "dark" ? "dark" : "light" }
inlineIndent={12} inlineIndent={12}
items={menuItems} items={menuItems}
defaultOpenKeys={['/model']} defaultOpenKeys={['/model']}
@ -79,7 +75,6 @@ const ChatLayout: FC<ChatLayoutProps> = ({ children }) => {
<a href="https://github.com/lencx/chatgpt" target="_blank">ChatGPT Desktop Application</a> ©2022 Created by lencx</Footer> <a href="https://github.com/lencx/chatgpt" target="_blank">ChatGPT Desktop Application</a> ©2022 Created by lencx</Footer>
</Layout> </Layout>
</Layout> </Layout>
</ConfigProvider>
); );
}; };
export default ChatLayout;

2
src/main.scss vendored
View File

@ -63,7 +63,7 @@ html, body {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
color: #2a2a2a; // color: #2a2a2a;
} }
span { span {

22
src/view/General.tsx vendored
View File

@ -114,20 +114,23 @@ export default function General() {
labelCol={{ span: 8 }} labelCol={{ span: 8 }}
wrapperCol={{ span: 15, offset: 1 }} wrapperCol={{ span: 15, offset: 1 }}
> >
<Form.Item label="Stay On Top" name="stay_on_top" valuePropName="checked">
<Switch />
</Form.Item>
{platformInfo === 'darwin' && (
<Form.Item label="Titlebar" name="titlebar" valuePropName="checked">
<Switch />
</Form.Item>
)}
<Form.Item label="Theme" name="theme"> <Form.Item label="Theme" name="theme">
<Radio.Group> <Radio.Group>
<Radio value="Light">Light</Radio> <Radio value="Light">Light</Radio>
<Radio value="Dark">Dark</Radio> <Radio value="Dark">Dark</Radio>
{ {["darwin", "windows"].includes(platformInfo) && (
(["darwin", "windows"].includes(platformInfo) ) && (
<Radio value="System">System</Radio> <Radio value="System">System</Radio>
) )}
}
</Radio.Group> </Radio.Group>
</Form.Item> </Form.Item>
<Form.Item label="Stay On Top" name="stay_on_top" valuePropName="checked">
<Switch />
</Form.Item>
<Form.Item label={<AutoUpdateLabel />} name="auto_update"> <Form.Item label={<AutoUpdateLabel />} name="auto_update">
<Radio.Group> <Radio.Group>
<Radio value="Prompt">Prompt</Radio> <Radio value="Prompt">Prompt</Radio>
@ -138,11 +141,6 @@ export default function General() {
<Form.Item label={<GlobalShortcut />} name="global_shortcut"> <Form.Item label={<GlobalShortcut />} name="global_shortcut">
<Input placeholder="CmdOrCtrl+Shift+O" {...DISABLE_AUTO_COMPLETE} /> <Input placeholder="CmdOrCtrl+Shift+O" {...DISABLE_AUTO_COMPLETE} />
</Form.Item> </Form.Item>
{platformInfo === 'darwin' && (
<Form.Item label="Titlebar" name="titlebar" valuePropName="checked">
<Switch />
</Form.Item>
)}
<Form.Item label={<OriginLabel url={chatConf?.default_origin} />} name="origin"> <Form.Item label={<OriginLabel url={chatConf?.default_origin} />} name="origin">
<Input placeholder="https://chat.openai.com" {...DISABLE_AUTO_COMPLETE} /> <Input placeholder="https://chat.openai.com" {...DISABLE_AUTO_COMPLETE} />
</Form.Item> </Form.Item>