From 10c8c1b4bf9a8e23352bc3d4774fc6b77ac36f9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Fri, 10 Jan 2025 22:17:36 +0800 Subject: [PATCH] Media (Linux): use file name as media name if song title is not available --- src/detection/media/media_linux.c | 34 ++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/src/detection/media/media_linux.c b/src/detection/media/media_linux.c index 479fa431d..d9fbe8ad1 100644 --- a/src/detection/media/media_linux.c +++ b/src/detection/media/media_linux.c @@ -8,7 +8,6 @@ #ifdef FF_HAVE_DBUS #include "common/dbus.h" -#include "common/library.h" #define FF_DBUS_ITER_CONTINUE(dbus, iterator) \ { \ @@ -116,10 +115,35 @@ static bool getBusProperties(FFDBusData* data, const char* busName, FFMediaResul if(result->song.length == 0) { - ffStrbufClear(&result->artist); - ffStrbufClear(&result->album); - ffStrbufClear(&result->url); - return false; + if(result->url.length) + { + const char* fileName = memrchr(result->url.chars, '/', result->url.length); + assert(fileName); + ++fileName; + ffStrbufEnsureFixedLengthFree(&result->song, result->url.length - (uint32_t) (fileName - result->url.chars)); + for(; *fileName && *fileName != '?'; ++fileName) + { + if (*fileName != '%') + { + ffStrbufAppendC(&result->song, *fileName); + } + else + { + char str[] = { fileName[1], fileName[2], 0 }; + if (str[0] == 0 || str[1] == 0) + break; + ffStrbufAppendC(&result->song, (char) strtoul(str, NULL, 16)); + fileName += 2; + } + } + } + else + { + ffStrbufClear(&result->artist); + ffStrbufClear(&result->album); + ffStrbufClear(&result->url); + return false; + } } //Set short bus name