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

@@ -4,7 +4,7 @@ use crate::{
};
use tauri::{
AboutMetadata, AppHandle, CustomMenuItem, Manager, Menu, MenuItem, Submenu, SystemTray,
SystemTrayEvent, SystemTrayMenu, WindowMenuEvent,
SystemTrayEvent, SystemTrayMenu, WindowMenuEvent, SystemTrayMenuItem,
};
use tauri_plugin_positioner::{on_tray_event, Position, WindowExt};
@@ -238,13 +238,22 @@ pub fn menu_handler(event: WindowMenuEvent<tauri::Wry>) {
// --- SystemTray Menu
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
pub fn tray_handler(handle: &AppHandle, event: SystemTrayEvent) {
on_tray_event(handle, &event);
let app = handle.clone();
match event {
SystemTrayEvent::LeftClick { .. } => {
let chat_conf = conf::ChatConfJson::get_chat_conf();
@@ -263,36 +272,59 @@ pub fn tray_handler(handle: &AppHandle, event: SystemTrayEvent) {
tray_win.show().unwrap();
}
}
SystemTrayEvent::RightClick { .. } => {
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();
}
},
);
SystemTrayEvent::MenuItemClick { id, .. } => match id.as_str() {
"control_center" => app.get_window("main").unwrap().show().unwrap(),
"restart" => tauri::api::process::restart(&handle.env()),
"show_dock_icon" => {
ChatConfJson::amend(
&serde_json::json!({ "hide_dock_icon": false }),
Some(app),
)
.unwrap();
},
"hide_dock_icon" => {
let chat_conf = conf::ChatConfJson::get_chat_conf();
if !chat_conf.hide_dock_icon {
ChatConfJson::amend(
&serde_json::json!({ "hide_dock_icon": true }),
Some(app),
)
.unwrap();
}
},
"quit" => std::process::exit(0),
_ => (),
}
// 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 searchInput = document.querySelector('form textarea');
searchInput.addEventListener('input', debounce(function() {
const query = this.value;
console.log(query);
// const handle = debounce(function() {
// console.log('«70» /src/assets/cmd.js ~> ', 5667);
// 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)) {
modelDom.innerHTML = '';
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));
if (result.length > 0) {
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,
passive: true,
once: false
@@ -105,9 +141,16 @@ async function cmdTip() {
// .cmd-item
const item = event.target.closest("div");
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();
window.__CHAT_MODEL_CMD__ = val;
modelDom.innerHTML = '';
}
}, {
capture: false,
passive: true,
once: false
});
}, 200);
}