From 404db47a1eabffaa5565f857d31e793f78101bc7 Mon Sep 17 00:00:00 2001 From: Corbin Crutchley Date: Fri, 13 Dec 2024 16:32:12 -0800 Subject: [PATCH] chore: refactor thread_local to use AppData --- src-tauri/src/music/commands.rs | 34 +++++++++++++---------- src-tauri/src/music/core.rs | 49 ++++++++++++++------------------- src-tauri/src/state.rs | 18 ++++++++++-- 3 files changed, 57 insertions(+), 44 deletions(-) diff --git a/src-tauri/src/music/commands.rs b/src-tauri/src/music/commands.rs index 76ed0c1..9662a08 100644 --- a/src-tauri/src/music/commands.rs +++ b/src-tauri/src/music/commands.rs @@ -14,7 +14,7 @@ pub fn play(app: AppHandle, path: &str, state: State<'_, Mutex>) -> Res let mut state = state.lock().unwrap(); state.currently_playing_file_path = Some(path.to_string()); - core::play_audio(path)?; + core::play_audio(&state, path)?; app.emit("SERVER_SYNC_EVENT", "").unwrap(); Ok(()) } @@ -24,38 +24,43 @@ pub fn stop(app: AppHandle, state: State<'_, Mutex>) { let mut state = state.lock().unwrap(); state.currently_playing_file_path = None; - core::stop(); + core::stop(&state); app.emit("SERVER_SYNC_EVENT", "").unwrap(); } #[tauri::command] -pub fn set_volume(app: AppHandle, volume: f32) { - core::set_volume(volume); +pub fn set_volume(app: AppHandle, volume: f32, state: State<'_, Mutex>) { + let state = state.lock().unwrap(); + core::set_volume(&state, volume); app.emit("SERVER_SYNC_EVENT", "").unwrap(); } #[tauri::command] -pub fn set_speed(app: AppHandle, speed: f32) { - core::set_speed(speed); +pub fn set_speed(app: AppHandle, speed: f32, state: State<'_, Mutex>) { + let state = state.lock().unwrap(); + core::set_speed(&state, speed); app.emit("SERVER_SYNC_EVENT", "").unwrap(); } #[tauri::command] -pub fn seek_to(app: AppHandle, position: std::time::Duration) -> Result<(), String> { - core::seek_to(position)?; +pub fn seek_to(app: AppHandle, position: std::time::Duration, state: State<'_, Mutex>) -> Result<(), String> { + let state = state.lock().unwrap(); + core::seek_to(&state, position)?; app.emit("SERVER_SYNC_EVENT", "").unwrap(); Ok(()) } #[tauri::command] -pub fn pause(app: AppHandle) { - core::pause(); +pub fn pause(app: AppHandle, state: State<'_, Mutex>) { + let state = state.lock().unwrap(); + core::pause(&state); app.emit("SERVER_SYNC_EVENT", "").unwrap(); } #[tauri::command] -pub fn resume(app: AppHandle) { - core::resume(); +pub fn resume(app: AppHandle, state: State<'_, Mutex>) { + let state = state.lock().unwrap(); + core::resume(&state); app.emit("SERVER_SYNC_EVENT", "").unwrap(); } @@ -66,6 +71,7 @@ pub fn get_redux_store_state(state: State<'_, Mutex>) -> core::PlayerSt } #[tauri::command] -pub fn get_position() -> std::time::Duration { - core::get_position() +pub fn get_position(state: State<'_, Mutex>) -> std::time::Duration { + let state = state.lock().unwrap(); + core::get_position(&state) } diff --git a/src-tauri/src/music/core.rs b/src-tauri/src/music/core.rs index db418c7..e4ab324 100644 --- a/src-tauri/src/music/core.rs +++ b/src-tauri/src/music/core.rs @@ -10,12 +10,6 @@ use symphonia::core::io::MediaSourceStream; use symphonia::core::meta::MetadataOptions; use symphonia::core::probe::Hint; -thread_local! { - static AUDIO: (OutputStream, OutputStreamHandle) = OutputStream::try_default().unwrap(); - pub static STREAM_HANDLE : OutputStreamHandle = AUDIO.with(|(_, h)| h.clone()); - pub static SINK: Sink = STREAM_HANDLE.with(|handle| Sink::try_new(handle).unwrap()); -} - #[derive(Serialize)] pub struct PlayerState { pub volume: f32, @@ -96,49 +90,48 @@ pub fn read_mp3_metadata(path: &str) -> Result { }) } -pub fn play_audio(path: &str) -> Result<(), String> { +pub fn play_audio(app_data: &AppData, path: &str) -> Result<(), String> { let path = Path::new(path); let file = BufReader::new(File::open(path).map_err(|e| e.to_string())?); let source = Decoder::new(file).map_err(|e| e.to_string())?; - SINK.with(|sink| sink.append(source)); + app_data.sink.append(source); Ok(()) } -pub fn stop() { - SINK.with(|sink| sink.stop()); +pub fn stop(app_data: &AppData) { + app_data.sink.stop(); } -pub fn set_volume(volume: f32) { - SINK.with(|sink| sink.set_volume(volume)); +pub fn set_volume(app_data: &AppData, volume: f32) { + app_data.sink.set_volume(volume); } -pub fn set_speed(speed: f32) { - SINK.with(|sink| sink.set_speed(speed)); +pub fn set_speed(app_data: &AppData, speed: f32) { + app_data.sink.set_speed(speed); } -pub fn seek_to(position: std::time::Duration) -> Result<(), String> { - SINK.with(|sink| sink.try_seek(position)) - .map_err(|e| e.to_string()) +pub fn seek_to(app_data: &AppData, position: std::time::Duration) -> Result<(), String> { + app_data.sink.try_seek(position).map_err(|e| e.to_string()) } -pub fn pause() { - SINK.with(|sink| sink.pause()); +pub fn pause(app_data: &AppData) { + app_data.sink.pause(); } -pub fn resume() { - SINK.with(|sink| sink.play()); +pub fn resume(app_data: &AppData) { + app_data.sink.play(); } pub fn get_player_state(app_data: &AppData) -> PlayerState { - SINK.with(|sink| PlayerState { - volume: sink.volume(), - speed: sink.speed(), - paused: sink.is_paused(), + PlayerState { + volume: app_data.sink.volume(), + speed: app_data.sink.speed(), + paused: app_data.sink.is_paused(), currently_playing_file_path: app_data.currently_playing_file_path.clone(), - }) + } } -pub fn get_position() -> std::time::Duration { - SINK.with(|sink| sink.get_pos()) +pub fn get_position(app_data: &AppData) -> std::time::Duration { + app_data.sink.get_pos() } diff --git a/src-tauri/src/state.rs b/src-tauri/src/state.rs index 8ce1041..bbd2297 100644 --- a/src-tauri/src/state.rs +++ b/src-tauri/src/state.rs @@ -1,6 +1,20 @@ -use serde::Serialize; +use rodio::{OutputStream, OutputStreamHandle, Sink}; -#[derive(Default, Serialize)] pub struct AppData { pub currently_playing_file_path: Option, + pub sink: Sink, + pub stream_handle: OutputStreamHandle, +} + +impl Default for AppData { + fn default() -> Self { + let (_stream, stream_handle )= OutputStream::try_default().unwrap(); + let sink: Sink = Sink::try_new(&stream_handle).unwrap(); + + Self { + currently_playing_file_path: None, + sink, + stream_handle, + } + } } -- 2.51.2