aboutsummaryrefslogtreecommitdiff
path: root/src/sources/spotify.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/sources/spotify.rs')
-rw-r--r--src/sources/spotify.rs31
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![&current_track, name];
- let artist_raw: Option<Retained<NSString>> = msg_send![&current_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 });
}
}