diff --git a/src/detection/media/media.c b/src/detection/media/media.c index e82d3a522..d1cc6ab76 100644 --- a/src/detection/media/media.c +++ b/src/detection/media/media.c @@ -13,6 +13,7 @@ const FFMediaResult* ffDetectMedia(const FFinstance* instance) ffStrbufInit(&result.artist); ffStrbufInit(&result.album); ffStrbufInit(&result.url); + ffStrbufInit(&result.status); ffDetectMediaImpl(instance, &result); diff --git a/src/detection/media/media.h b/src/detection/media/media.h index 4c29779ac..7261ca246 100644 --- a/src/detection/media/media.h +++ b/src/detection/media/media.h @@ -14,6 +14,7 @@ typedef struct FFMediaResult FFstrbuf artist; FFstrbuf album; FFstrbuf url; + FFstrbuf status; } FFMediaResult; const FFMediaResult* ffDetectMedia(const FFinstance* instance); diff --git a/src/detection/media/media_apple.m b/src/detection/media/media_apple.m index 4c4da1b54..6db70d048 100644 --- a/src/detection/media/media_apple.m +++ b/src/detection/media/media_apple.m @@ -11,6 +11,7 @@ extern void MRMediaRemoteGetNowPlayingInfo(dispatch_queue_t dispatcher, void(^ca extern void MRMediaRemoteGetNowPlayingClient(dispatch_queue_t dispatcher, void (^callback)(_Nullable id clientObj)) __attribute__((weak_import)); extern CFStringRef MRNowPlayingClientGetBundleIdentifier(id clientObj) __attribute__((weak_import)); extern CFStringRef MRNowPlayingClientGetParentAppBundleIdentifier(id clientObj) __attribute__((weak_import)); +void MRMediaRemoteGetNowPlayingApplicationIsPlaying(dispatch_queue_t queue, void (^callback)(BOOL playing)); static const char* getMedia(FFMediaResult* result) { @@ -24,6 +25,12 @@ static const char* getMedia(FFMediaResult* result) dispatch_group_t group = dispatch_group_create(); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); + dispatch_group_enter(group); + MRMediaRemoteGetNowPlayingApplicationIsPlaying(queue, ^(BOOL playing) { + ffStrbufAppendS(&result->status, playing ? "Playing" : "Paused"); + dispatch_group_leave(group); + }); + dispatch_group_enter(group); MRMediaRemoteGetNowPlayingInfo(queue, ^(_Nullable CFDictionaryRef info) { if(info != nil) { diff --git a/src/modules/song.c b/src/modules/song.c index b1477020c..e4d174e5a 100644 --- a/src/modules/song.c +++ b/src/modules/song.c @@ -5,7 +5,7 @@ #include #define FF_SONG_MODULE_NAME "Media" -#define FF_SONG_NUM_FORMAT_ARGS 4 +#define FF_SONG_NUM_FORMAT_ARGS 5 static bool shouldIgoreChar(char c) { @@ -89,6 +89,9 @@ void ffPrintSong(FFinstance* instance) fputs(" - ", stdout); } + if (media->status.length > 0) + ffStrbufAppendF(&songPretty, " (%s)", media->status.chars); + ffStrbufPutTo(&songPretty, stdout); } else @@ -97,7 +100,8 @@ void ffPrintSong(FFinstance* instance) {FF_FORMAT_ARG_TYPE_STRBUF, &songPretty}, {FF_FORMAT_ARG_TYPE_STRBUF, &media->song}, {FF_FORMAT_ARG_TYPE_STRBUF, &media->artist}, - {FF_FORMAT_ARG_TYPE_STRBUF, &media->album} + {FF_FORMAT_ARG_TYPE_STRBUF, &media->album}, + {FF_FORMAT_ARG_TYPE_STRBUF, &media->status} }); }