Media (macOS): adds media cover extraction

This commit is contained in:
李通洲
2025-10-20 16:05:12 +08:00
parent 5cf3ab23b0
commit 64afaa07e7
3 changed files with 10 additions and 0 deletions
+1
View File
@@ -16,6 +16,7 @@ const FFMediaResult* ffDetectMedia(void)
ffStrbufInit(&result.album);
ffStrbufInit(&result.url);
ffStrbufInit(&result.status);
ffStrbufInit(&result.cover);
ffDetectMediaImpl(&result);
if(result.song.length == 0 && result.error.length == 0)
+1
View File
@@ -13,6 +13,7 @@ typedef struct FFMediaResult
FFstrbuf album;
FFstrbuf url;
FFstrbuf status;
FFstrbuf cover;
} FFMediaResult;
const FFMediaResult* ffDetectMedia();
+8
View File
@@ -30,6 +30,7 @@ static const char* getMediaByMediaRemote(FFMediaResult* result)
ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoTitle"), &result->song);
ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoArtist"), &result->artist);
ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoAlbum"), &result->album);
ffCfDictGetDataAsString(info, CFSTR("kMRMediaRemoteNowPlayingInfoArtworkData"), &result->cover);
}
else
error = "MRMediaRemoteGetNowPlayingInfo() failed";
@@ -80,6 +81,7 @@ int ffPrintMediaByMediaRemote(void)
.album = ffStrbufCreate(),
.playerId = ffStrbufCreate(),
.player = ffStrbufCreate(),
.cover = ffStrbufCreate(),
};
if (getMediaByMediaRemote(&media) != NULL)
return 1;
@@ -89,12 +91,14 @@ int ffPrintMediaByMediaRemote(void)
ffStrbufPutTo(&media.album, stdout);
ffStrbufPutTo(&media.playerId, stdout);
ffStrbufPutTo(&media.player, stdout);
ffStrbufWriteTo(&media.cover, stdout); // Raw data
ffStrbufDestroy(&media.status);
ffStrbufDestroy(&media.song);
ffStrbufDestroy(&media.artist);
ffStrbufDestroy(&media.album);
ffStrbufDestroy(&media.playerId);
ffStrbufDestroy(&media.player);
ffStrbufDestroy(&media.cover);
return 0;
}
@@ -119,6 +123,10 @@ static const char* getMediaByAuthorizedProcess(FFMediaResult* result)
size_t len = 0;
for (uint32_t i = 0; i < ARRAY_SIZE(varList) && ffStrbufGetline(&line, &len, &buffer); ++i)
ffStrbufSetS(varList[i], line);
ffStrbufGetlineRestore(&line, &len, &buffer);
line++; // Skip the newline before the cover data
if (line < buffer.chars + buffer.length)
ffStrbufSetNS(&result->cover, buffer.length - (uint32_t) (line - buffer.chars), line);
return NULL;
}