X-Git-Url: https://git.r.bdr.sh/rbdr/lyricli/blobdiff_plain/f5a040da21ff2bf594e50d886b5e485cdfdc4a70..8d584ce755e90c6f5260f7f2828e5a294004148b:/src/sources/spotify.rs?ds=sidebyside diff --git a/src/sources/spotify.rs b/src/sources/spotify.rs index b23ea73..e4bf19c 100644 --- a/src/sources/spotify.rs +++ b/src/sources/spotify.rs @@ -1,8 +1,8 @@ use std::ffi::CStr; use std::io::Result; -use cocoa::{base::nil, foundation::NSString}; -use objc::{class, msg_send, sel, sel_impl, runtime::Object}; +use cocoa::{base::{nil, id}, foundation::NSString}; +use objc::{class, msg_send, sel, sel_impl, runtime::{Class, Object}}; use objc_id::Id; use crate::Track; @@ -28,8 +28,17 @@ impl LyricsSource for Spotify { let app: Id = { let cls = class!(SBApplication); let bundle_identifier = NSString::alloc(nil).init_str("com.spotify.Client"); - let app: *mut Object = msg_send![cls, applicationWithBundleIdentifier:bundle_identifier]; - Id::from_ptr(app) + + let workspace_class = Class::get("NSWorkspace").unwrap(); + let shared_workspace: id = msg_send![workspace_class, sharedWorkspace]; + let app_url: id = msg_send![shared_workspace, URLForApplicationWithBundleIdentifier:bundle_identifier]; + + if app_url != nil { + let app: *mut Object = msg_send![cls, applicationWithBundleIdentifier:bundle_identifier]; + Id::from_ptr(app) + } else { + return None + } }; if msg_send![app, isRunning] {