From 03c2d1781333840932c6b663fa8ea9846770d72e Mon Sep 17 00:00:00 2001 From: hanaTsuk1 <101488209+hanaTsuk1@users.noreply.github.com> Date: Mon, 24 Jun 2024 10:46:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E6=9C=BA=E6=89=98=E7=9B=98=E6=9C=AA?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src-tauri/capabilities/main.json | 1 + src-tauri/gen/schemas/capabilities.json | 2 +- src-tauri/src/lib.rs | 71 ++++++++++++++----------- src/App.vue | 3 ++ src/modules/tray/index.ts | 32 +++++++++++ 5 files changed, 76 insertions(+), 33 deletions(-) create mode 100644 src/modules/tray/index.ts diff --git a/src-tauri/capabilities/main.json b/src-tauri/capabilities/main.json index 64a1337..fc92050 100644 --- a/src-tauri/capabilities/main.json +++ b/src-tauri/capabilities/main.json @@ -16,6 +16,7 @@ "resources:default", "menu:default", "tray:default", + "tray:allow-get-by-id", "autostart:allow-disable", "autostart:allow-enable", "autostart:allow-is-enabled", diff --git a/src-tauri/gen/schemas/capabilities.json b/src-tauri/gen/schemas/capabilities.json index 340d01a..ba9d8d1 100644 --- a/src-tauri/gen/schemas/capabilities.json +++ b/src-tauri/gen/schemas/capabilities.json @@ -1 +1 @@ -{"main-capability":{"identifier":"main-capability","description":"Capability for the main window","local":true,"windows":["main"],"permissions":["path:default","event:default","window:default","window:allow-start-dragging","window:allow-hide","window:allow-minimize","app:default","resources:default","menu:default","tray:default","autostart:allow-disable","autostart:allow-enable","autostart:allow-is-enabled","clipboard-manager:allow-write-text","dialog:allow-open","fs:allow-copy-file","fs:allow-mkdir","fs:allow-write-file","fs:allow-write-text-file","fs:allow-read-text-file","fs:allow-exists","fs:allow-remove","fs:scope-appdata-recursive","log:allow-log","process:allow-restart","process:allow-exit","shell:allow-open","sql:allow-load","sql:allow-select","sql:allow-execute","sql:allow-close","store:allow-length","store:allow-entries","store:allow-set","store:allow-save","updater:default","shion-history:allow-get-config","shion-history:allow-set-config","shion-history:allow-read-history","shion-watcher:allow-resume","shion-watcher:allow-suspend","shion-watcher:allow-get-program-list","shion-watcher:allow-get-program-by-path"]}} \ No newline at end of file +{"main-capability":{"identifier":"main-capability","description":"Capability for the main window","local":true,"windows":["main"],"permissions":["path:default","event:default","window:default","window:allow-start-dragging","window:allow-hide","window:allow-minimize","app:default","resources:default","menu:default","tray:default","tray:allow-get-by-id","autostart:allow-disable","autostart:allow-enable","autostart:allow-is-enabled","clipboard-manager:allow-write-text","dialog:allow-open","fs:allow-copy-file","fs:allow-mkdir","fs:allow-write-file","fs:allow-write-text-file","fs:allow-read-text-file","fs:allow-exists","fs:allow-remove","fs:scope-appdata-recursive","log:allow-log","process:allow-restart","process:allow-exit","shell:allow-open","sql:allow-load","sql:allow-select","sql:allow-execute","sql:allow-close","store:allow-length","store:allow-entries","store:allow-set","store:allow-save","updater:default","shion-history:allow-get-config","shion-history:allow-set-config","shion-history:allow-read-history","shion-watcher:allow-resume","shion-watcher:allow-suspend","shion-watcher:allow-get-program-list","shion-watcher:allow-get-program-by-path"]}} \ No newline at end of file diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index f02319a..04ccdf8 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -6,7 +6,10 @@ pub use error::Result; mod autostart; use parse_changelog::Changelog; -use tauri::menu::{Menu, MenuItem}; +use tauri::{ + menu::{Menu, MenuItem}, + tray::{ClickType, TrayIconBuilder}, +}; use tauri_plugin_log::{Target, TargetKind, TimezoneStrategy}; use tauri_plugin_sql::{Migration, MigrationKind}; @@ -119,6 +122,37 @@ pub fn run() { autostart::disable() } + #[tauri::command] + fn create_tray(app: tauri::AppHandle) -> tauri::Result<()> { + let title = if tauri::dev() { "shion-dev" } else { "shion" }; + + let quit = MenuItem::with_id(&app, "quit", "Quit", true, None::<&str>)?; + let menu = Menu::with_items(&app, &[&quit])?; + + TrayIconBuilder::with_id("tray") + .tooltip(title) + .icon(app.default_window_icon().unwrap().clone()) + .menu(&menu) + .menu_on_left_click(false) + .on_menu_event(move |app, event| match event.id().as_ref() { + "quit" => { + let window = app.get_webview_window("main").unwrap(); + window.hide().unwrap(); + app.emit_to("main", "quit", ()).unwrap(); + } + _ => (), + }) + .on_tray_icon_event(|tray, event| { + if event.click_type == ClickType::Double { + let app = tray.app_handle(); + let window = app.get_webview_window("main").unwrap(); + window.show().unwrap(); + } + }) + .build(&app)?; + Ok(()) + } + builder = builder .plugin(tauri_plugin_updater::Builder::new().build()) .plugin(tauri_plugin_single_instance::init(|app, argv, cwd| { @@ -148,6 +182,7 @@ pub fn run() { parse_changelog_from_text, enable_autostart, disable_autostart, + create_tray ]); } @@ -155,39 +190,9 @@ pub fn run() { .setup(|app| { #[cfg(desktop)] { - use tauri::{ - tray::{ClickType, TrayIconBuilder}, - Manager, WebviewUrl, WebviewWindowBuilder, Wry, - }; + use tauri::{Manager, WebviewUrl, WebviewWindowBuilder, Wry}; use tauri_plugin_store::{with_store, StoreCollection}; - let title = if tauri::dev() { "shion-dev" } else { "shion" }; - - let quit = MenuItem::with_id(app, "quit", "Quit", true, None::<&str>)?; - let menu = Menu::with_items(app, &[&quit])?; - - let _ = TrayIconBuilder::with_id("tray") - .tooltip(title) - .icon(app.default_window_icon().unwrap().clone()) - .menu(&menu) - .menu_on_left_click(false) - .on_menu_event(move |app, event| match event.id().as_ref() { - "quit" => { - let window = app.get_webview_window("main").unwrap(); - window.hide().unwrap(); - app.emit_to("main", "quit", ()).unwrap(); - } - _ => (), - }) - .on_tray_icon_event(|tray, event| { - if event.click_type == ClickType::Double { - let app = tray.app_handle(); - let window = app.get_webview_window("main").unwrap(); - window.show().unwrap(); - } - }) - .build(app); - let stores = app.app_handle().state::>(); let launch_visible = @@ -200,6 +205,8 @@ pub fn run() { Ok(true) })?; + let title = if tauri::dev() { "shion-dev" } else { "shion" }; + WebviewWindowBuilder::new(app, "main", WebviewUrl::default()) .visible(launch_visible) .center() diff --git a/src/App.vue b/src/App.vue index 341e07e..d0b4b60 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,6 +1,8 @@