A photo manager for VRChat.
at main 74 lines 1.9 kB view raw
1use tauri::{ 2 menu::{MenuBuilder, MenuItemBuilder}, 3 tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent}, 4 AppHandle, Emitter, Manager, State, 5}; 6 7use crate::frontend_calls::config::Config; 8 9#[derive(serde::Serialize, Clone)] 10struct EmptyEvent {} 11 12pub fn setup_traymenu(handle: &AppHandle) { 13 // Setup the tray icon and menu buttons 14 let quit = MenuItemBuilder::new("Quit") 15 .id("quit") 16 .build(handle) 17 .unwrap(); 18 19 let hide = MenuItemBuilder::new("Hide / Show") 20 .id("hide") 21 .build(handle) 22 .unwrap(); 23 24 let tray_menu = MenuBuilder::new(handle) 25 .items(&[&quit, &hide]) 26 .build() 27 .unwrap(); 28 29 TrayIconBuilder::with_id("main") 30 .icon(tauri::image::Image::from_bytes(include_bytes!("../../icons/32x32.png")).unwrap()) 31 .menu(&tray_menu) 32 .title("VRChat Photo Manager") 33 .tooltip("VRChat Photo Manager") 34 .on_menu_event(move |app: &AppHandle, event| match event.id().as_ref() { 35 "quit" => { 36 let config: State<Config> = app.state(); 37 config.save(); 38 39 std::process::exit(0); 40 } 41 "hide" => { 42 let window = app.get_webview_window("main").unwrap(); 43 44 if window.is_visible().unwrap() { 45 window.hide().unwrap(); 46 47 window.emit("hide-window", EmptyEvent {}).unwrap(); 48 } else { 49 window.show().unwrap(); 50 window.set_focus().unwrap(); 51 52 window.emit("show-window", EmptyEvent {}).unwrap(); 53 } 54 } 55 _ => {} 56 }) 57 .on_tray_icon_event(|tray, event| { 58 if let TrayIconEvent::Click { 59 button: MouseButton::Left, 60 button_state: MouseButtonState::Up, 61 .. 62 } = event 63 { 64 let window = tray.app_handle().get_webview_window("main").unwrap(); 65 66 window.show().unwrap(); 67 window.set_focus().unwrap(); 68 69 window.emit("show-window", EmptyEvent {}).unwrap(); 70 } 71 }) 72 .build(handle) 73 .unwrap(); 74}