mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-13 02:42:09 +02:00
Media (Linux): adds media cover extraction
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
#include "common/io/io.h"
|
||||
#include "fastfetch.h"
|
||||
#include "detection/media/media.h"
|
||||
#include "util/stringUtils.h"
|
||||
@@ -52,21 +53,53 @@ static bool parseMprisMetadata(FFDBusData* data, DBusMessageIter* rootIterator,
|
||||
|
||||
data->lib->ffdbus_message_iter_next(&dictIterator);
|
||||
|
||||
if(!ffStrStartsWith(key, "xesam:"))
|
||||
FF_DBUS_ITER_CONTINUE(data, &arrayIterator)
|
||||
if(ffStrStartsWith(key, "xesam:"))
|
||||
{
|
||||
const char* xesam = key + strlen("xesam:");
|
||||
if(ffStrEquals(xesam, "title"))
|
||||
ffDBusGetString(data, &dictIterator, &result->song);
|
||||
else if(ffStrEquals(xesam, "album"))
|
||||
ffDBusGetString(data, &dictIterator, &result->album);
|
||||
else if(ffStrEquals(xesam, "artist"))
|
||||
ffDBusGetString(data, &dictIterator, &result->artist);
|
||||
else if(ffStrEquals(xesam, "url"))
|
||||
ffDBusGetString(data, &dictIterator, &result->url);
|
||||
|
||||
key += strlen("xesam:");
|
||||
if(ffStrEquals(key, "title"))
|
||||
ffDBusGetString(data, &dictIterator, &result->song);
|
||||
else if(ffStrEquals(key, "album"))
|
||||
ffDBusGetString(data, &dictIterator, &result->album);
|
||||
else if(ffStrEquals(key, "artist"))
|
||||
ffDBusGetString(data, &dictIterator, &result->artist);
|
||||
else if(ffStrEquals(key, "url"))
|
||||
ffDBusGetString(data, &dictIterator, &result->url);
|
||||
|
||||
if(result->song.length > 0 && result->artist.length > 0 && result->album.length > 0 && result->url.length > 0)
|
||||
break;
|
||||
if(result->song.length > 0 && result->artist.length > 0 && result->album.length > 0 && result->url.length > 0)
|
||||
break;
|
||||
}
|
||||
else if (ffStrStartsWith(key, "mpris:"))
|
||||
{
|
||||
const char* xesam = key + strlen("mpris:");
|
||||
if(ffStrEquals(xesam, "artUrl"))
|
||||
{
|
||||
FF_STRBUF_AUTO_DESTROY path = ffStrbufCreate();
|
||||
ffDBusGetString(data, &dictIterator, &path);
|
||||
if (ffStrbufStartsWithS(&path, "file:///"))
|
||||
{
|
||||
uint32_t j = 0;
|
||||
for (uint32_t i = (uint32_t) strlen("file:///") - 1; i < path.length; ++i, ++j)
|
||||
{
|
||||
if (path.chars[i] == '%')
|
||||
{
|
||||
if (i + 2 >= path.length)
|
||||
break;
|
||||
char str[] = { path.chars[i + 1], path.chars[i + 2], 0 };
|
||||
const char decodedChar = (char) strtoul(str, NULL, 16);
|
||||
path.chars[j] = decodedChar;
|
||||
i += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
path.chars[j] = path.chars[i];
|
||||
}
|
||||
}
|
||||
path.chars[j] = '\0';
|
||||
path.length = j;
|
||||
ffReadFileBuffer(path.chars, &result->cover);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FF_DBUS_ITER_CONTINUE(data, &arrayIterator)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user