diff --git a/src-tauri/src/macos_interop/now_playing.rs b/src-tauri/src/macos_interop/now_playing.rs index 210d42e..189763a 100644 --- a/src-tauri/src/macos_interop/now_playing.rs +++ b/src-tauri/src/macos_interop/now_playing.rs @@ -58,7 +58,7 @@ pub fn setup_handlers(app: &AppHandle, state: State<'static, crate::state::AppDa } #[cfg(target_os = "macos")] -pub fn set_now_playing() { +pub fn set_now_playing(metadata: crate::music::core::MetadataResult) { unsafe { let default = MPNowPlayingInfoCenter::defaultCenter(); @@ -82,11 +82,39 @@ pub fn set_now_playing() { Retained::into_super(Retained::into_super(Retained::into_super( NSNumber::numberWithBool(false), ))), - Retained::into_super(Retained::into_super(NSString::from_str("Title"))), - Retained::into_super(Retained::into_super(NSString::from_str("Artist"))), + Retained::into_super(Retained::into_super(NSString::from_str( + &metadata + .tags + .get("TrackTitle") + .and_then(|v| v.as_str()) + .unwrap_or("Unknown Title") + .to_string(), + ))), + Retained::into_super(Retained::into_super(NSString::from_str( + &metadata + .tags + .get("Artist") + .and_then(|v| v.as_str()) + .unwrap_or("Unknown Artist") + .to_string(), + ))), // Retained::into_super(Retained::into_super(NSString::from_str("Artwork"))), - Retained::into_super(Retained::into_super(NSString::from_str("Album Artist"))), - Retained::into_super(Retained::into_super(NSString::from_str("Album Title"))), + Retained::into_super(Retained::into_super(NSString::from_str( + &metadata + .tags + .get("AlbumArtist") + .and_then(|v| v.as_str()) + .unwrap_or("Unknown Artist") + .to_string(), + ))), + Retained::into_super(Retained::into_super(NSString::from_str( + &metadata + .tags + .get("Album") + .and_then(|v| v.as_str()) + .unwrap_or("Unknown Album") + .to_string(), + ))), ]; let dictionary = objc2_foundation::NSDictionary::from_id_slice(keys, owned_objects); MPNowPlayingInfoCenter::setNowPlayingInfo(&*default, Some(dictionary.as_ref())); diff --git a/src-tauri/src/music/commands.rs b/src-tauri/src/music/commands.rs index b3be2e0..a71e79e 100644 --- a/src-tauri/src/music/commands.rs +++ b/src-tauri/src/music/commands.rs @@ -9,7 +9,14 @@ use super::core; #[tauri::command] pub fn read_metadata(path: &str) -> Result { - core::read_metadata(path) + let metadata = core::read_metadata(path); + match metadata { + Ok(metadata) => { + crate::macos_interop::now_playing::set_now_playing(metadata.clone()); + Ok(metadata.clone()) + }, + Err(e) => Err(e), + } } #[tauri::command] @@ -34,7 +41,6 @@ pub fn play(app: AppHandle, path: &str, state: State<'_, AppData>) -> Result<(), let duration = core::play_audio(&state, path, callback)?; metadata.currently_playing_duration = Some(duration); - crate::macos_interop::now_playing::set_now_playing(); app.emit("SERVER_SYNC_EVENT", "").unwrap(); Ok(()) } diff --git a/src-tauri/src/music/core.rs b/src-tauri/src/music/core.rs index 3528e5d..9dd8b5f 100644 --- a/src-tauri/src/music/core.rs +++ b/src-tauri/src/music/core.rs @@ -24,10 +24,10 @@ pub struct PlayerState { pub currently_playing_duration: Option, } -#[derive(Serialize)] +#[derive(Serialize, Clone)] pub struct MetadataResult { - tags: serde_json::Map, - visuals: serde_json::Map, + pub tags: serde_json::Map, + pub visuals: serde_json::Map, } pub async fn import_file(app_data: &AppData, path: &str) -> Result<(), String> {