Compare commits

..

18 Commits

Author SHA1 Message Date
lencx
b6deb67845 v0.1.7 2022-12-10 22:25:51 +08:00
lencx
9478211397 feat: tray window 2022-12-10 22:25:29 +08:00
lencx
8339dc281c Merge pull request #10 from lencx/doc 2022-12-10 12:22:20 +08:00
lencx
17ee85eeff chore: download 2022-12-10 12:20:40 +08:00
lencx
8cdc944d70 Merge pull request #9 from lencx/doc 2022-12-10 12:19:30 +08:00
lencx
423664caa6 chore: download 2022-12-10 12:18:35 +08:00
lencx
7dc3d88871 Merge pull request #8 from lencx/doc 2022-12-10 10:50:26 +08:00
lencx
a805468a73 readme 2022-12-10 10:47:17 +08:00
lencx
99729dd45d Merge pull request #6 from lencx/doc 2022-12-10 10:45:28 +08:00
lencx
3ca5315c7e readme 2022-12-10 10:44:11 +08:00
lencx
6901f88b41 Merge pull request #5 from lencx/dev 2022-12-10 03:53:10 +08:00
lencx
078413f9a0 v0.1.6 2022-12-10 03:52:26 +08:00
lencx
1b6d11eede chore: export 2022-12-10 03:52:26 +08:00
lencx
955a7ab227 readme 2022-12-10 03:52:26 +08:00
lencx
7f480b4943 feat: export history 2022-12-10 03:52:26 +08:00
lencx
b4d764abbe feat: export 2022-12-10 03:51:59 +08:00
lencx
aad5faa269 Merge pull request #3 from lencx/awesome 2022-12-09 14:03:15 +08:00
lencx
3839b50891 feat: add awesome 2022-12-09 14:02:13 +08:00
15 changed files with 115 additions and 17 deletions

19
AWESOME.md Normal file
View File

@@ -0,0 +1,19 @@
# Awesome ChatGPT
- [Awesome ChatGPT](https://github.com/humanloop/awesome-chatgpt) - Curated list of awesome tools, demos, docs for ChatGPT and GPT-3
## Extension
`Browser`
- [ChatGPT Export and Share](https://github.com/liady/ChatGPT-pdf) - A Chrome extension for downloading your ChatGPT history to PNG, PDF or creating a sharable link
- [ChatGPT for Google](https://github.com/wong2/chat-gpt-google-extension) - A browser extension to display ChatGPT response alongside Google Search results
- [ChatGPT Extension](https://github.com/kazuki-sf/ChatGPT_Extension) - ChatGPT Extension is a really simple Chrome Extension (manifest v3) that you can access OpenAI's ChatGPT from anywhere on the web.
`VSCode`
- [ChatGPT Extension for VSCode](https://github.com/mpociot/chatgpt-vscode) - A VSCode extension that allows you to use ChatGPT
`Bot`
- [ChatGPT Telegram Bot](https://github.com/altryne/chatGPT-telegram-bot) - This is a very early attempt at having chatGPT work within a telegram bot

View File

@@ -5,18 +5,24 @@
> ChatGPT Desktop Application
[Awesome ChatGPT](./AWESOME.md)
## Downloads
[![ChatGPT downloads](https://img.shields.io/github/downloads/lencx/ChatGPT/total.svg?style=flat-square)](https://github.com/lencx/ChatGPT/releases)
<!-- download start -->
**Latest:**
- `Mac`: [ChatGPT_0.1.6_x64.dmg](https://github.com/lencx/ChatGPT/releases/download/v0.1.5/ChatGPT_0.1.6_x64.dmg)
- `Linux`: [chat-gpt_0.1.6_amd64.deb](https://github.com/lencx/ChatGPT/releases/download/v0.1.5/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.5/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)
<!-- download end -->
## Features
- multi-platform: `macOS` `Linux` `Windows`
@@ -25,14 +31,14 @@
- inject script
- auto updater
- app menu
- system tray
- tray window
- shortcut
## Preview
<img width="360" src="./assets/install.png" alt="install"> <img width="360" src="./assets/chat.png" alt="chat">
<img width="360" src="./assets/export.png" alt="export"> <img width="360" src="./assets/auto-update.png" alt="auto update">
<img width="360" src="./assets/export.png" alt="export"> <img width="360" src="./assets/tray.png" alt="tray">
<img width="360" src="./assets/auto-update.png" alt="auto update">
## FAQ
### Is it safe?
@@ -74,4 +80,6 @@ yarn build
## Related
- [ChatGPT Export and Share](https://github.com/liady/ChatGPT-pdf) - A Chrome extension for downloading your ChatGPT history to PNG, PDF or creating a sharable link
- [Tauri](https://tauri.app) - Build an optimized, secure, and frontend-independent application for multi-platform deployment.
- [ChatGPT](https://openai.com/blog/chatgpt) - ChatGPT: Optimizing Language Models for Dialogue.
- [ChatGPT Export and Share](https://github.com/liady/ChatGPT-pdf) - A Chrome extension for downloading your ChatGPT history to PNG, PDF or creating a sharable link.

View File

@@ -1,5 +1,9 @@
# UPDATE LOG
## v0.1.7
feat: tray window
## v0.1.6
feat:

BIN
assets/tray.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 KiB

View File

@@ -6,6 +6,7 @@
"build": "yarn tauri build",
"updater": "tr updater",
"release": "tr release --git",
"download": "node ./scripts/download.js",
"tr": "tr",
"tauri": "tauri"
},

26
scripts/download.js vendored Normal file
View File

@@ -0,0 +1,26 @@
const fs = require('fs');
const argv = process.argv.slice(2);
async function init() {
const content = fs.readFileSync('README.md', 'utf8').split('\n');
const startRe = /<!-- download start -->/;
const endRe = /<!-- download end -->/;
let flag = false;
for (let i = 0; i < content.length; i++) {
if (startRe.test(content[i])) {
flag = true;
}
if (flag) {
content[i] = content[i].replace(/(\d+).(\d+).(\d+)/g, argv[0]);
}
if (endRe.test(content[i])) {
break;
}
}
fs.writeFileSync('README.md', content.join('\n'), 'utf8');
}
init().catch(console.error);

View File

@@ -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]

View File

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

View File

@@ -1,3 +1,4 @@
pub mod cmd;
pub mod menu;
pub mod setup;
pub mod window;

View File

@@ -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<dyn std::error::Error>> {
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()))

View File

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

View File

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

View File

@@ -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";

View File

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

View File

@@ -7,7 +7,7 @@
},
"package": {
"productName": "ChatGPT",
"version": "0.1.6"
"version": "0.1.7"
},
"tauri": {
"allowlist": {