use crate::persistence::app_state as prefs;
#[derive(Clone, Debug, PartialEq)]
pub enum NotificationSound {
Default,
Ping,
Pop,
Chime,
None,
}
pub async fn play_notification_sound() {
let enabled = match prefs::load_preferences().await {
Ok(p) => p.notification_sounds,
Err(_) => true,
};
if !enabled {
return;
}
#[cfg(target_os = "windows")]
{
play_windows_sound();
}
#[cfg(target_os = "macos")]
{
play_macos_sound();
}
#[cfg(target_os = "linux")]
{
play_linux_sound();
}
#[cfg(target_family = "wasm")]
{
play_web_sound();
}
}
#[cfg(target_os = "windows")]
fn play_windows_sound() {
let _ = std::process::Command::new("powershell")
.args([
"-WindowStyle", "Hidden",
"-Command",
"[System.Media.SystemSounds]::Asterisk.Play()"
])
.spawn();
}
#[cfg(target_os = "macos")]
fn play_macos_sound() {
let _ = std::process::Command::new("afplay")
.args(["/System/Library/Sounds/Glass.aiff"])
.spawn();
}
#[cfg(target_os = "linux")]
fn play_linux_sound() {
let result = std::process::Command::new("paplay")
.args(["/usr/share/sounds/freedesktop/stereo/message.oga"])
.spawn();
if result.is_err() {
let _ = std::process::Command::new("aplay")
.args(["/usr/share/sounds/freedesktop/stereo/message.oga"])
.spawn();
}
}
#[cfg(target_family = "wasm")]
fn play_web_sound() {
tracing::debug!("Web notification sound requested");
}