X-Git-Url: https://git.r.bdr.sh/rbdr/lyricli/blobdiff_plain/44e7b4de4073e6dc25681bb2fa6977bf5869689a..862a1dd6547225227b5d2dc403cf0f54626be5dd:/src/sources/apple_music.rs?ds=sidebyside diff --git a/src/sources/apple_music.rs b/src/sources/apple_music.rs index cb36f5c..06412b8 100644 --- a/src/sources/apple_music.rs +++ b/src/sources/apple_music.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 AppleMusic { let app: Id = { let cls = class!(SBApplication); let bundle_identifier = NSString::alloc(nil).init_str("com.apple.Music"); - 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] {