70 lines
2.6 KiB
Rust
70 lines
2.6 KiB
Rust
use crate::{core::handle, utils::i18n};
|
|
use tauri_plugin_notification::NotificationExt;
|
|
|
|
pub enum NotificationEvent<'a> {
|
|
DashboardToggled,
|
|
ClashModeChanged {
|
|
mode: &'a str,
|
|
},
|
|
SystemProxyToggled,
|
|
TunModeToggled,
|
|
LightweightModeEntered,
|
|
AppQuit,
|
|
#[cfg(target_os = "macos")]
|
|
AppHidden,
|
|
}
|
|
|
|
fn notify(title: &str, body: &str) {
|
|
let app_handle = handle::Handle::app_handle();
|
|
app_handle
|
|
.notification()
|
|
.builder()
|
|
.title(title)
|
|
.body(body)
|
|
.show()
|
|
.ok();
|
|
}
|
|
|
|
pub async fn notify_event<'a>(event: NotificationEvent<'a>) {
|
|
i18n::sync_locale().await;
|
|
|
|
match event {
|
|
NotificationEvent::DashboardToggled => {
|
|
let title = rust_i18n::t!("notifications.dashboardToggled.title").to_string();
|
|
let body = rust_i18n::t!("notifications.dashboardToggled.body").to_string();
|
|
notify(&title, &body);
|
|
}
|
|
NotificationEvent::ClashModeChanged { mode } => {
|
|
let title = rust_i18n::t!("notifications.clashModeChanged.title").to_string();
|
|
let body = rust_i18n::t!("notifications.clashModeChanged.body").replace("{mode}", mode);
|
|
notify(&title, &body);
|
|
}
|
|
NotificationEvent::SystemProxyToggled => {
|
|
let title = rust_i18n::t!("notifications.systemProxyToggled.title").to_string();
|
|
let body = rust_i18n::t!("notifications.systemProxyToggled.body").to_string();
|
|
notify(&title, &body);
|
|
}
|
|
NotificationEvent::TunModeToggled => {
|
|
let title = rust_i18n::t!("notifications.tunModeToggled.title").to_string();
|
|
let body = rust_i18n::t!("notifications.tunModeToggled.body").to_string();
|
|
notify(&title, &body);
|
|
}
|
|
NotificationEvent::LightweightModeEntered => {
|
|
let title = rust_i18n::t!("notifications.lightweightModeEntered.title").to_string();
|
|
let body = rust_i18n::t!("notifications.lightweightModeEntered.body").to_string();
|
|
notify(&title, &body);
|
|
}
|
|
NotificationEvent::AppQuit => {
|
|
let title = rust_i18n::t!("notifications.appQuit.title").to_string();
|
|
let body = rust_i18n::t!("notifications.appQuit.body").to_string();
|
|
notify(&title, &body);
|
|
}
|
|
#[cfg(target_os = "macos")]
|
|
NotificationEvent::AppHidden => {
|
|
let title = rust_i18n::t!("notifications.appHidden.title").to_string();
|
|
let body = rust_i18n::t!("notifications.appHidden.body").to_string();
|
|
notify(&title, &body);
|
|
}
|
|
}
|
|
}
|