From 06dd5c157c6d8e252e5af470cf0413ad077ae63a Mon Sep 17 00:00:00 2001 From: Corbin Crutchley Date: Fri, 3 Jan 2025 01:53:32 -0800 Subject: [PATCH] chore: got things working --- src-tauri/src/lib.rs | 10 ++++------ src-tauri/src/macos_interop/now_playing.rs | 9 ++++----- src-tauri/src/state.rs | 13 +++++++------ 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 9ddc126..8c3f4e0 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1,9 +1,9 @@ // Prevents additional console window on Windows in release, DO NOT REMOVE!! #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] +mod macos_interop; mod music; mod state; -mod macos_interop; use migration::{Migrator, MigratorTrait}; use rodio::OutputStream; @@ -40,14 +40,12 @@ pub async fn run() { .plugin(tauri_plugin_opener::init()) .plugin(tauri_plugin_window_state::Builder::default().build()) .plugin(tauri_plugin_decorum::init()) + // .plugin(macos_interop::now_playing::init()) .setup(|app| { let state = state::AppData::new(AppDataNew { db, stream_handle }); - app.manage(state); + app.manage(state.clone()); - if cfg!(target_os = "macos") { - #[cfg(target_os = "macos")] - macos_interop::now_playing::setup_handlers(state); - } + macos_interop::now_playing::setup_handlers(state.clone()); let main_window = app.get_webview_window("main").unwrap(); main_window.create_overlay_titlebar().unwrap(); diff --git a/src-tauri/src/macos_interop/now_playing.rs b/src-tauri/src/macos_interop/now_playing.rs index 44e3693..dc7f49b 100644 --- a/src-tauri/src/macos_interop/now_playing.rs +++ b/src-tauri/src/macos_interop/now_playing.rs @@ -7,12 +7,11 @@ use objc2_media_player::{ MPNowPlayingInfoPropertyAssetURL, MPNowPlayingInfoPropertyIsLiveStream, MPNowPlayingInfoPropertyMediaType, MPNowPlayingPlaybackState, }; -use tauri::State; -pub fn setup_handlers(mut state: State<'static, crate::state::AppData>) { +pub fn setup_handlers(state: crate::state::AppData) { unsafe { - let shared = objc2_media_player::MPRemoteCommandCenter::sharedCommandCenter(); let state_clone = state.clone(); + let shared = objc2_media_player::MPRemoteCommandCenter::sharedCommandCenter(); let play_handler = block2::StackBlock::new( move |_: core::ptr::NonNull| { crate::music::core::resume(&state_clone); @@ -20,14 +19,14 @@ pub fn setup_handlers(mut state: State<'static, crate::state::AppData>) { }, ); let state_clone = state.clone(); - let pause_handler = block2::StackBlock::new( + let pause_handler = block2::RcBlock::new( move |_: core::ptr::NonNull| { crate::music::core::pause(&state_clone); objc2_media_player::MPRemoteCommandHandlerStatus::Success }, ); let state_clone = state.clone(); - let toggle_play_pause_handler = block2::StackBlock::new( + let toggle_play_pause_handler = block2::RcBlock::new( move |_: core::ptr::NonNull| { if crate::music::core::is_playing(&state_clone) { crate::music::core::pause(&state_clone); diff --git a/src-tauri/src/state.rs b/src-tauri/src/state.rs index 1a4deea..a631ebd 100644 --- a/src-tauri/src/state.rs +++ b/src-tauri/src/state.rs @@ -1,16 +1,17 @@ use rodio::{OutputStreamHandle, Sink}; use sea_orm::DatabaseConnection; -use std::sync::Mutex; +use std::sync::{Arc, Mutex}; pub struct AppMetadata { pub currently_playing_file_path: Option, pub currently_playing_duration: Option, } +#[derive(Clone)] pub struct AppData { - pub metadata: Mutex, + pub metadata: Arc>, pub stream_handle: OutputStreamHandle, - pub sink: Sink, + pub sink: Arc, pub db: DatabaseConnection, } @@ -26,11 +27,11 @@ impl AppData { Self { db, - metadata: Mutex::new(AppMetadata { + metadata: Arc::new(Mutex::new(AppMetadata { currently_playing_duration: None, currently_playing_file_path: None, - }), - sink, + })), + sink: Arc::new(sink), stream_handle, } } -- 2.51.2