From ddba4504754340773080d1ca30ed5a1f5e49aced Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Wed, 21 Feb 2024 21:27:09 +0100 Subject: [PATCH] notification sounds --- src/backend/notifications.rs | 69 ++++++++++++++++++++++------------- src/overlays/keyboard.rs | 35 +++++------------- src/overlays/toast.rs | 30 +++++++++++---- src/overlays/watch.rs | 16 +++++++- src/res/380885.wav | Bin 0 -> 75860 bytes src/res/557297.wav | Bin 0 -> 34130 bytes src/state.rs | 30 +++++++++++++++ 7 files changed, 121 insertions(+), 59 deletions(-) create mode 100644 src/res/380885.wav create mode 100644 src/res/557297.wav diff --git a/src/backend/notifications.rs b/src/backend/notifications.rs index 8c55049..60eeae2 100644 --- a/src/backend/notifications.rs +++ b/src/backend/notifications.rs @@ -4,7 +4,13 @@ use dbus::{ message::MatchRule, }; use serde::Deserialize; -use std::sync::{mpsc, Arc}; +use std::{ + sync::{ + mpsc::{self}, + Arc, + }, + time::Duration, +}; use crate::{overlays::toast::Toast, state::AppState}; @@ -25,6 +31,10 @@ impl NotificationManager { } pub fn submit_pending(&self, app: &mut AppState) { + if let Some((c, _)) = &self.dbus_data { + let _ = c.process(Duration::ZERO); + } + self.rx_toast.try_iter().for_each(|toast| { toast.submit(app); }); @@ -44,20 +54,20 @@ impl NotificationManager { let sender = self.tx_toast.clone(); - let token = c.start_receive( - rule, - Box::new(move |msg, _| { - if let Ok(toast) = parse_dbus(&msg) { - match sender.try_send(toast) { - Ok(_) => {} - Err(e) => { - log::error!("Failed to send notification: {:?}", e); - } + let Ok(token) = c.add_match(rule, move |_: (), _, msg| { + if let Ok(toast) = parse_dbus(&msg) { + match sender.try_send(toast) { + Ok(_) => {} + Err(e) => { + log::error!("Failed to send notification: {:?}", e); } } - true - }), - ); + } + true + }) else { + log::error!("Failed to add dbus match. Desktop notifications will not work."); + return; + }; self.dbus_data = Some((c, token)); } @@ -73,7 +83,7 @@ impl NotificationManager { return; } }; - let mut buf = [0u8; 1500]; + let mut buf = [0u8; 1024 * 16]; // vrcx embeds icons as b64 loop { if let Ok((num_bytes, _)) = socket.recv_from(&mut buf) { @@ -84,6 +94,7 @@ impl NotificationManager { continue; } }; + log::info!("Received notification message: {}", json_str); let msg = match serde_json::from_str::(json_str) { Ok(m) => m, Err(e) => { @@ -92,10 +103,13 @@ impl NotificationManager { } }; + if msg.messageType != 1 { + continue; + } + let toast = Toast::new(msg.title, msg.content.unwrap_or_else(|| "".into())) - .with_timeout(msg.timeout) - .with_volume(msg.volume) - .with_opacity(msg.opacity); + .with_timeout(msg.timeout.unwrap_or(5.)) + .with_sound(msg.volume.unwrap_or(0.) > 0.1); match sender.try_send(toast) { Ok(_) => {} @@ -131,23 +145,26 @@ fn parse_dbus(msg: &dbus::Message) -> anyhow::Result { summary }; - Ok(Toast::new(title.into(), body.into())) + Ok(Toast::new(title.into(), body.into()) + .with_sound(true) + .with_timeout(5.0) + .with_opacity(1.0)) } #[allow(non_snake_case)] #[derive(Debug, Deserialize)] struct XsoMessage { messageType: i32, - index: i32, - volume: f32, - audioPath: Arc, - timeout: f32, + index: Option, + volume: Option, + audioPath: Option>, + timeout: Option, title: Arc, content: Option>, icon: Option>, - height: f32, - opacity: f32, - useBase64Icon: bool, + height: Option, + opacity: Option, + useBase64Icon: Option, sourceApp: Option>, - alwaysShow: bool, + alwaysShow: Option, } diff --git a/src/overlays/keyboard.rs b/src/overlays/keyboard.rs index b7d9870..6911572 100644 --- a/src/overlays/keyboard.rs +++ b/src/overlays/keyboard.rs @@ -13,12 +13,12 @@ use crate::{ config, gui::{color_parse, CanvasBuilder, Control}, hid::{KeyModifier, VirtualKey, ALT, CTRL, KEYS_TO_MODS, META, SHIFT, SUPER}, - state::{AppSession, AppState}, + state::AppState, }; use glam::{vec2, vec3a, Affine2, Vec4}; use once_cell::sync::Lazy; use regex::Regex; -use rodio::{Decoder, OutputStream, OutputStreamHandle, Source}; +use rodio::{Decoder, Source}; use serde::{Deserialize, Serialize}; const PIXELS_PER_UNIT: f32 = 80.; @@ -39,9 +39,6 @@ where let data = KeyboardData { modifiers: 0, processes: vec![], - audio_stream: None, - first_try: true, - audio_handle: None, }; let mut canvas = CanvasBuilder::new( @@ -142,7 +139,7 @@ fn key_press( ) { match control.state.as_mut() { Some(KeyButtonData::Key { vk, pressed }) => { - data.key_click(&app.session); + data.key_click(app); if let PointerMode::Right = mode { data.modifiers |= SHIFT; @@ -155,11 +152,11 @@ fn key_press( Some(KeyButtonData::Modifier { modifier, sticky }) => { *sticky = data.modifiers & *modifier == 0; data.modifiers |= *modifier; - data.key_click(&app.session); + data.key_click(app); app.hid_provider.set_modifiers(data.modifiers); } Some(KeyButtonData::Macro { verbs }) => { - data.key_click(&app.session); + data.key_click(app); for (vk, press) in verbs { app.hid_provider.send_key(*vk as _, *press); } @@ -169,7 +166,7 @@ fn key_press( data.processes .retain_mut(|child| !matches!(child.try_wait(), Ok(Some(_)))); - data.key_click(&app.session); + data.key_click(app); if let Ok(child) = Command::new(program).args(args).spawn() { data.processes.push(child); } @@ -228,28 +225,16 @@ fn test_highlight( struct KeyboardData { modifiers: KeyModifier, processes: Vec, - audio_stream: Option, - audio_handle: Option, - first_try: bool, } impl KeyboardData { - fn key_click(&mut self, session: &AppSession) { - if !session.config.keyboard_sound_enabled { + fn key_click(&mut self, app: &mut AppState) { + if !app.session.config.keyboard_sound_enabled { return; } - if self.audio_stream.is_none() && self.first_try { - self.first_try = false; - if let Ok((stream, handle)) = OutputStream::try_default() { - self.audio_stream = Some(stream); - self.audio_handle = Some(handle); - } else { - log::error!("Failed to open audio stream"); - } - } - - if let Some(handle) = &self.audio_handle { + if let Some(handle) = app.audio.get_handle() { + // https://freesound.org/people/UberBosser/sounds/421581/ let wav = include_bytes!("../res/421581.wav"); let cursor = Cursor::new(wav); let source = Decoder::new_wav(cursor).unwrap(); diff --git a/src/overlays/toast.rs b/src/overlays/toast.rs index 22784e3..fb7d591 100644 --- a/src/overlays/toast.rs +++ b/src/overlays/toast.rs @@ -1,8 +1,11 @@ use std::{ + io::Cursor, ops::Add, sync::{atomic::AtomicUsize, Arc}, }; +use rodio::{Decoder, Source}; + use glam::vec3a; use crate::{ @@ -24,8 +27,8 @@ pub struct Toast { pub title: Arc, pub body: Arc, pub opacity: f32, - pub volume: f32, pub timeout: f32, + pub sound: bool, } #[allow(dead_code)] @@ -36,7 +39,7 @@ impl Toast { body, opacity: 1.0, timeout: 3.0, - volume: 0.0, + sound: false, } } pub fn with_timeout(mut self, timeout: f32) -> Self { @@ -47,8 +50,8 @@ impl Toast { self.opacity = opacity; self } - pub fn with_volume(mut self, volume: f32) -> Self { - self.volume = volume; + pub fn with_sound(mut self, sound: bool) -> Self { + self.sound = sound; self } pub fn submit(self, app: &mut AppState) { @@ -59,6 +62,8 @@ impl Toast { let destroy_at = std::time::Instant::now().add(std::time::Duration::from_secs_f32(self.timeout)); + let has_sound = self.sound; + app.tasks.enqueue(TaskType::CreateOverlay( selector.clone(), Box::new(move |app| new_toast(self, name, app)), @@ -66,6 +71,15 @@ impl Toast { app.tasks .enqueue_at(TaskType::DropOverlay(selector), destroy_at); + + if has_sound { + if let Some(handle) = app.audio.get_handle() { + let wav = include_bytes!("../res/557297.wav"); + let cursor = Cursor::new(wav); + let source = Decoder::new_wav(cursor).unwrap(); + let _ = handle.play_raw(source.convert_samples()); + } + } } } @@ -91,9 +105,11 @@ fn new_toast( .ok()?; (w0.max(w1), h1 + 50.) } else { - app.fc + let (w, h) = app + .fc .get_text_size(&title, FONT_SIZE, app.graphics.clone()) - .ok()? + .ok()?; + (w, h + 20.) }; let og_width = size.0; @@ -123,7 +139,7 @@ fn new_toast( canvas.label_centered(PADDING.0, 16., og_width, FONT_SIZE as f32 + 2., title); } else { log::info!("Toast: {}", title); - canvas.label(0., 0., size.0, size.1, title); + canvas.label_centered(PADDING.0, 0., og_width, size.1, title); } let state = OverlayState { diff --git a/src/overlays/watch.rs b/src/overlays/watch.rs index c959a70..f9ed2c0 100644 --- a/src/overlays/watch.rs +++ b/src/overlays/watch.rs @@ -1,6 +1,6 @@ use std::{ f32::consts::PI, - io::Read, + io::{Cursor, Read}, process::{self, Stdio}, sync::Arc, time::Instant, @@ -9,6 +9,7 @@ use std::{ use chrono::Local; use chrono_tz::Tz; use glam::{Quat, Vec3, Vec3A}; +use rodio::{Decoder, Source}; use serde::Deserialize; use crate::{ @@ -395,6 +396,15 @@ fn btn_mirror_dn( } } +fn audio_thump(app: &mut AppState) { + if let Some(handle) = app.audio.get_handle() { + let wav = include_bytes!("../res/380885.wav"); + let cursor = Cursor::new(wav); + let source = Decoder::new_wav(cursor).unwrap(); + let _ = handle.play_raw(source.convert_samples()); + } +} + fn btn_func_dn( control: &mut Control<(), ElemState>, _: &mut (), @@ -434,6 +444,7 @@ fn btn_func_dn( .submit(app); }), )); + audio_thump(app); } ButtonFunc::SwitchWatchHand => { app.tasks.enqueue(TaskType::Overlay( @@ -456,6 +467,7 @@ fn btn_func_dn( .submit(app); }), )); + audio_thump(app); } } } @@ -736,6 +748,7 @@ fn overlay_button_up(control: &mut Control<(), ElemState>, _: &mut (), app: &mut } }), )); + audio_thump(app); } PointerMode::Middle => { app.tasks.enqueue(TaskType::Overlay( @@ -751,6 +764,7 @@ fn overlay_button_up(control: &mut Control<(), ElemState>, _: &mut (), app: &mut } }), )); + audio_thump(app); } _ => {} } diff --git a/src/res/380885.wav b/src/res/380885.wav new file mode 100644 index 0000000000000000000000000000000000000000..be1b8046d133b7db3649c9cff566e05f19689604 GIT binary patch literal 75860 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�g#0x*_G~A$jp? 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 h&aRjAf3QdY>$, + pub audio: AudioOutput, } impl AppState { @@ -59,6 +61,7 @@ impl AppState { format: Format::R8G8B8A8_UNORM, input_state: InputState::new(), hid_provider: crate::hid::initialize(), + audio: AudioOutput::new(), }) } } @@ -115,3 +118,30 @@ impl AppSession { } } } + +pub struct AudioOutput { + audio_stream: Option<(OutputStream, OutputStreamHandle)>, + first_try: bool, +} + +impl AudioOutput { + pub fn new() -> Self { + AudioOutput { + audio_stream: None, + first_try: true, + } + } + + pub fn get_handle(&mut self) -> Option<&OutputStreamHandle> { + if self.audio_stream.is_none() && self.first_try { + self.first_try = false; + if let Ok((stream, handle)) = OutputStream::try_default() { + self.audio_stream = Some((stream, handle)); + } else { + log::error!("Failed to open audio stream"); + return None; + } + } + self.audio_stream.as_ref().map(|(_, h)| h) + } +}