Skip to content

Commit ee7231d

Browse files
committed
Media: fix detecting songs with CJK chars
1 parent 371b3a2 commit ee7231d

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

src/detection/media/media_apple.m

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,27 @@
3232
});
3333

3434
dispatch_group_enter(group);
35+
__block const char* error = NULL;
3536
MRMediaRemoteGetNowPlayingInfo(queue, ^(_Nullable CFDictionaryRef info) {
36-
if(info != nil) {
37-
ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoTitle"), &result->song);
38-
ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoArtist"), &result->artist);
39-
ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoAlbum"), &result->album);
37+
if(info != nil)
38+
{
39+
error = ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoTitle"), &result->song);
40+
if(!error)
41+
{
42+
ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoArtist"), &result->artist);
43+
ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoAlbum"), &result->album);
44+
}
4045
}
46+
else
47+
error = "MRMediaRemoteGetNowPlayingInfo() failed";
48+
4149
dispatch_group_leave(group);
4250
});
4351

4452
dispatch_group_enter(group);
4553
MRMediaRemoteGetNowPlayingClient(queue, ^(_Nullable id clientObj) {
46-
if (clientObj != nil) {
54+
if (clientObj != nil)
55+
{
4756
CFStringRef identifier = MRNowPlayingClientGetBundleIdentifier(clientObj);
4857
if (identifier == nil)
4958
identifier = MRNowPlayingClientGetParentAppBundleIdentifier(clientObj);
@@ -65,7 +74,7 @@
6574
if(result->song.length > 0)
6675
return NULL;
6776

68-
return "MediaRemote failed";
77+
return error;
6978
}
7079

7180
void ffDetectMediaImpl(const FFinstance* instance, FFMediaResult* media)

src/util/apple/cf_helpers.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ const char* ffCfStrGetString(CFStringRef str, FFstrbuf* result)
66
//CFString stores UTF16 characters, therefore may require larger buffer to convert to UTF8 string
77
ffStrbufEnsureFree(result, length * 2);
88
if(!CFStringGetCString(str, result->chars, result->allocated, kCFStringEncodingUTF8))
9-
return "CFStringGetCString() failed";
9+
{
10+
ffStrbufEnsureFree(result, length * 4);
11+
if(!CFStringGetCString(str, result->chars, result->allocated, kCFStringEncodingUTF8))
12+
return "CFStringGetCString() failed";
13+
}
1014
// CFStringGetCString ensures the buffer is NUL terminated
1115
// https://developer.apple.com/documentation/corefoundation/1542721-cfstringgetcstring
1216
result->length = (uint32_t) strnlen(result->chars, (uint32_t)result->allocated);

0 commit comments

Comments
 (0)