diff options
Diffstat (limited to 'src/sources/spotify.rs')
| -rw-r--r-- | src/sources/spotify.rs | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/src/sources/spotify.rs b/src/sources/spotify.rs index cd37491..8010ad1 100644 --- a/src/sources/spotify.rs +++ b/src/sources/spotify.rs @@ -1,10 +1,6 @@ use std::io::Result; -use objc2::{ - msg_send, - rc::{Retained, autoreleasepool}, - runtime::AnyObject, -}; +use objc2::{msg_send, rc::Retained, runtime::AnyObject}; use objc2_foundation::NSString; use objc2_scripting_bridge::SBApplication; @@ -28,19 +24,22 @@ impl LyricsSource for Spotify { fn current_track(&self) -> Option<Track> { unsafe { let bundle_identifier = NSString::from_str("com.spotify.Client"); - let app = SBApplication::applicationWithBundleIdentifier(&bundle_identifier); - if let Some(app) = app - && app.isRunning() - { - let current_track: Option<Retained<AnyObject>> = msg_send![&app, currentTrack]; - if let Some(current_track) = current_track { - let name_raw: Option<Retained<NSString>> = msg_send![¤t_track, name]; - let artist_raw: Option<Retained<NSString>> = msg_send![¤t_track, artist]; + if let Some(app) = SBApplication::applicationWithBundleIdentifier(&bundle_identifier) { + let key = NSString::from_str("currentTrack"); + let current_track: Option<Retained<AnyObject>> = msg_send![&app, valueForKey:&*key]; - if let (Some(name_raw), Some(artist_raw)) = (name_raw, artist_raw) { - let name = autoreleasepool(|pool| name_raw.to_str(pool).to_string()); - let artist = autoreleasepool(|pool| artist_raw.to_str(pool).to_string()); + if let Some(track) = current_track { + let name_key = NSString::from_str("name"); + let artist_key = NSString::from_str("artist"); + let name: Option<Retained<NSString>> = + msg_send![&track, valueForKey:&*name_key]; + let artist: Option<Retained<NSString>> = + msg_send![&track, valueForKey:&*artist_key]; + + if let Some(name) = name.map(|s| s.to_string()) + && let Some(artist) = artist.map(|s| s.to_string()) + { return Some(Track { name, artist }); } } |