1
0
mirror of https://github.com/lencx/ChatGPT.git synced 2024-10-01 01:06:13 -04:00

chore: chatgpt prompts & tray menu

This commit is contained in:
lencx 2022-12-17 16:23:35 +08:00
parent 1e7c0fe02a
commit 4df09113b5
6 changed files with 126 additions and 50 deletions

View File

@ -79,7 +79,7 @@ cask "popcorn-time", args: { "no-quarantine": true }
- `Titlebar`: 是否显示 `Titlebar`,仅 macOS 支持 - `Titlebar`: 是否显示 `Titlebar`,仅 macOS 支持
- `Inject Script`: 用于修改网站的用户自定义脚本 - `Inject Script`: 用于修改网站的用户自定义脚本
- `Hide Dock Icon` ([#35](https://github.com/lencx/ChatGPT/issues/35)): 隐藏 Dock 中的应用图标 (仅 macOS 支持) - `Hide Dock Icon` ([#35](https://github.com/lencx/ChatGPT/issues/35)): 隐藏 Dock 中的应用图标 (仅 macOS 支持)
- 右键单击系统托盘图标来显示或隐藏在 Dock 里的应用图标 - 系统图盘右键单击打开菜单,然后在菜单项中点击 `Show Dock Icon` 可以重新将应用图标显示在 Dock`SystemTrayMenu -> Show Dock Icon`
- `Control Center`: ChatGPT 应用的控制中心,它将为应用提供无限的可能 - `Control Center`: ChatGPT 应用的控制中心,它将为应用提供无限的可能
- 设置 `Theme``Stay On Top``Titlebar` 等 - 设置 `Theme``Stay On Top``Titlebar` 等
- `User Agent` ([#17](https://github.com/lencx/ChatGPT/issues/17)): 自定义 `user agent` 防止网站安全检测,默认值为空 - `User Agent` ([#17](https://github.com/lencx/ChatGPT/issues/17)): 自定义 `user agent` 防止网站安全检测,默认值为空

View File

@ -79,7 +79,7 @@ In the chatgpt text input area, type a character starting with `/` to bring up t
- `Stay On Top`: The window is stay on top of other windows. - `Stay On Top`: The window is stay on top of other windows.
- `Titlebar`: Whether to display the titlebar, supported by macOS only. - `Titlebar`: Whether to display the titlebar, supported by macOS only.
- `Hide Dock Icon` ([#35](https://github.com/lencx/ChatGPT/issues/35)): Hide application icons from the Dock(support macOS only). - `Hide Dock Icon` ([#35](https://github.com/lencx/ChatGPT/issues/35)): Hide application icons from the Dock(support macOS only).
- Right-click on the system tray icon to show or hide the application icons in the Dock - Right-click on the SystemTray to open the menu, then click `Show Dock Icon` in the menu item to re-display the application icon in the Dock (`SystemTrayMenu -> Show Dock Icon`).
- `Inject Script`: Using scripts to modify pages. - `Inject Script`: Using scripts to modify pages.
- `Control Center`: The control center of ChatGPT application, it will give unlimited imagination to the application. - `Control Center`: The control center of ChatGPT application, it will give unlimited imagination to the application.
- `Theme`, `Stay On Top`, `Titlebar`, ... - `Theme`, `Stay On Top`, `Titlebar`, ...

Binary file not shown.

Before

Width:  |  Height:  |  Size: 294 KiB

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@ -4,7 +4,7 @@ use crate::{
}; };
use tauri::{ use tauri::{
AboutMetadata, AppHandle, CustomMenuItem, Manager, Menu, MenuItem, Submenu, SystemTray, AboutMetadata, AppHandle, CustomMenuItem, Manager, Menu, MenuItem, Submenu, SystemTray,
SystemTrayEvent, SystemTrayMenu, WindowMenuEvent, SystemTrayEvent, SystemTrayMenu, WindowMenuEvent, SystemTrayMenuItem,
}; };
use tauri_plugin_positioner::{on_tray_event, Position, WindowExt}; use tauri_plugin_positioner::{on_tray_event, Position, WindowExt};
@ -238,13 +238,22 @@ pub fn menu_handler(event: WindowMenuEvent<tauri::Wry>) {
// --- SystemTray Menu // --- SystemTray Menu
pub fn tray_menu() -> SystemTray { pub fn tray_menu() -> SystemTray {
SystemTray::new().with_menu(SystemTrayMenu::new()) SystemTray::new().with_menu(
SystemTrayMenu::new()
.add_item(CustomMenuItem::new("control_center".to_string(), "Control Center"))
.add_item(CustomMenuItem::new("show_dock_icon".to_string(), "Show Dock Icon"))
.add_item(CustomMenuItem::new("hide_dock_icon".to_string(), "Hide Dock Icon"))
.add_native_item(SystemTrayMenuItem::Separator)
.add_item(CustomMenuItem::new("quit".to_string(), "Quit ChatGPT"))
)
} }
// --- SystemTray Event // --- SystemTray Event
pub fn tray_handler(handle: &AppHandle, event: SystemTrayEvent) { pub fn tray_handler(handle: &AppHandle, event: SystemTrayEvent) {
on_tray_event(handle, &event); on_tray_event(handle, &event);
let app = handle.clone();
match event { match event {
SystemTrayEvent::LeftClick { .. } => { SystemTrayEvent::LeftClick { .. } => {
let chat_conf = conf::ChatConfJson::get_chat_conf(); let chat_conf = conf::ChatConfJson::get_chat_conf();
@ -263,36 +272,59 @@ pub fn tray_handler(handle: &AppHandle, event: SystemTrayEvent) {
tray_win.show().unwrap(); tray_win.show().unwrap();
} }
} }
SystemTrayEvent::RightClick { .. } => { SystemTrayEvent::MenuItemClick { id, .. } => match id.as_str() {
let chat_conf = conf::ChatConfJson::get_chat_conf(); "control_center" => app.get_window("main").unwrap().show().unwrap(),
let hide_dock = !chat_conf.hide_dock_icon; "restart" => tauri::api::process::restart(&handle.env()),
let title; "show_dock_icon" => {
let msg; ChatConfJson::amend(
&serde_json::json!({ "hide_dock_icon": false }),
if !hide_dock { Some(app),
title = "Show Dock Icon"; )
msg = "Are you sure you want to show the ChatGPT icon in the Dock?"; .unwrap();
} else { },
title = "Hide Dock Icon"; "hide_dock_icon" => {
msg = "Are you sure you want to hide the ChatGPT icon in the Dock?"; let chat_conf = conf::ChatConfJson::get_chat_conf();
} if !chat_conf.hide_dock_icon {
ChatConfJson::amend(
let app = handle.clone(); &serde_json::json!({ "hide_dock_icon": true }),
tauri::api::dialog::ask( Some(app),
handle.get_window("tray").as_ref(), )
title, .unwrap();
msg, }
move |is_ok| { },
if is_ok { "quit" => std::process::exit(0),
ChatConfJson::amend( _ => (),
&serde_json::json!({ "hide_dock_icon": hide_dock }),
Some(app),
)
.unwrap();
}
},
);
} }
// SystemTrayEvent::RightClick { tray_id, .. } => {
// let chat_conf = conf::ChatConfJson::get_chat_conf();
// let hide_dock = !chat_conf.hide_dock_icon;
// let title;
// let msg;
// if !hide_dock {
// title = "Show Dock Icon";
// msg = "Are you sure you want to show the ChatGPT icon in the Dock?";
// } else {
// title = "Hide Dock Icon";
// msg = "Are you sure you want to hide the ChatGPT icon in the Dock?";
// }
// let app = handle.clone();
// tauri::api::dialog::ask(
// handle.get_window("tray").as_ref(),
// title,
// msg,
// move |is_ok| {
// if is_ok {
// ChatConfJson::amend(
// &serde_json::json!({ "hide_dock_icon": hide_dock }),
// Some(app),
// )
// .unwrap();
// }
// },
// );
// }
_ => (), _ => (),
} }

View File

@ -66,29 +66,65 @@ async function cmdTip() {
const itemDom = (v) => `<div class="cmd-item" data-prompt="${encodeURIComponent(v.prompt)}"><b>/${v.cmd}</b><i>${v.act}</i></div>`; const itemDom = (v) => `<div class="cmd-item" data-prompt="${encodeURIComponent(v.prompt)}"><b>/${v.cmd}</b><i>${v.act}</i></div>`;
const searchInput = document.querySelector('form textarea'); const searchInput = document.querySelector('form textarea');
searchInput.addEventListener('input', debounce(function() { // const handle = debounce(function() {
const query = this.value; // console.log('«70» /src/assets/cmd.js ~> ', 5667);
console.log(query);
// const query = this.value;
// console.log(query);
// if (!query || !/^\//.test(query)) {
// modelDom.innerHTML = '';
// return;
// }
// const result = data.filter(i => i.enable && new RegExp(query.substring(1)).test(i.cmd));
// if (result.length > 0) {
// modelDom.innerHTML = `<div>${result.map(itemDom).join('')}</div>`;
// }
// }, 250);
// Enter a command starting with `/` and press a space to automatically fill `chatgpt prompt`.
// If more than one command appears in the search results, the first one will be used by default.
searchInput.addEventListener('keydown', (event) => {
if (!window.__CHAT_MODEL_CMD__) {
return;
}
if (event.keyCode === 32) {
searchInput.value = window.__CHAT_MODEL_CMD__;
modelDom.innerHTML = '';
delete window.__CHAT_MODEL_CMD__;
}
if (event.keyCode === 13) {
modelDom.innerHTML = '';
delete window.__CHAT_MODEL_CMD__;
}
});
searchInput.addEventListener('input', (event) => {
const query = searchInput.value;
// console.log(query);
if (!query || !/^\//.test(query)) { if (!query || !/^\//.test(query)) {
modelDom.innerHTML = ''; modelDom.innerHTML = '';
return; return;
} }
// all cmd result
if (query === '/') {
const result = data.filter(i => i.enable);
modelDom.innerHTML = `<div>${result.map(itemDom).join('')}</div>`;
window.__CHAT_MODEL_CMD__ = result[0]?.prompt.trim();
return;
}
const result = data.filter(i => i.enable && new RegExp(query.substring(1)).test(i.cmd)); const result = data.filter(i => i.enable && new RegExp(query.substring(1)).test(i.cmd));
if (result.length > 0) { if (result.length > 0) {
modelDom.innerHTML = `<div>${result.map(itemDom).join('')}</div>`; modelDom.innerHTML = `<div>${result.map(itemDom).join('')}</div>`;
window.__CHAT_MODEL_CMD__ = result[0]?.prompt.trim();
} else {
modelDom.innerHTML = '';
delete window.__CHAT_MODEL_CMD__;
} }
// Enter a command starting with `/` and press a space to automatically fill `chatgpt prompt`. }, {
// If more than one command appears in the search results, the first one will be used by default.
searchInput.addEventListener('keydown', (event) => {
if (event.keyCode === 32) {
searchInput.value = result[0]?.prompt.trim();
}
if (event.keyCode = 13) {
modelDom.innerHTML = '';
}
});
}, 250),
{
capture: false, capture: false,
passive: true, passive: true,
once: false once: false
@ -105,9 +141,16 @@ async function cmdTip() {
// .cmd-item // .cmd-item
const item = event.target.closest("div"); const item = event.target.closest("div");
if (item) { if (item) {
document.querySelector('form textarea').value = decodeURIComponent(item.getAttribute('data-prompt')); const val = decodeURIComponent(item.getAttribute('data-prompt'));
searchInput.value = val;
document.querySelector('form textarea').focus(); document.querySelector('form textarea').focus();
window.__CHAT_MODEL_CMD__ = val;
modelDom.innerHTML = '';
} }
}, {
capture: false,
passive: true,
once: false
}); });
}, 200); }, 200);
} }

View File

@ -19,7 +19,8 @@
}, },
"systemTray": { "systemTray": {
"iconPath": "icons/tray-icon.png", "iconPath": "icons/tray-icon.png",
"iconAsTemplate": true "iconAsTemplate": true,
"menuOnLeftClick": false
}, },
"bundle": { "bundle": {
"active": true, "active": true,