[vlc-devel] [PATCH] dbus: decode uri when sending PropertiesChanged

Conor Smith conormartindale at gmail.com
Tue Sep 30 07:32:31 UTC 2025


Also updated out of date links to dbus and mpris documentation
---
 modules/control/dbus/dbus.c | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/modules/control/dbus/dbus.c b/modules/control/dbus/dbus.c
index cc7eae5d6e..a102ae825c 100644
--- a/modules/control/dbus/dbus.c
+++ b/modules/control/dbus/dbus.c
@@ -27,14 +27,14 @@
 
 /*
  * D-Bus Specification:
- *      http://dbus.freedesktop.org/doc/dbus-specification.html
+ *      https://dbus.freedesktop.org/doc/dbus-specification.html
  * D-Bus low-level C API (libdbus)
- *      http://dbus.freedesktop.org/doc/dbus/api/html/index.html
+ *      https://dbus.freedesktop.org/doc/api/html/
  *  extract:
  *   "If you use this low-level API directly, you're signing up for some pain."
  *
- * MPRIS Specification version 1.0
- *      http://wiki.xmms2.xmms.se/index.php/MPRIS
+ * MPRIS Specification:
+ *      https://specifications.freedesktop.org/mpris-spec/latest/
  */
 
 /*****************************************************************************
@@ -61,6 +61,7 @@
 #include <vlc_meta.h>
 #include <vlc_tick.h>
 #include <vlc_fs.h>
+#include <vlc_url.h>
 
 #include <assert.h>
 #include <limits.h>
@@ -1394,11 +1395,17 @@ int GetInputMeta(size_t index, vlc_playlist_item_t *item, DBusMessageIter *args)
     dbus_int64_t i_mtime = input_item_GetDuration( p_input );
     dbus_uint32_t i_time = i_mtime / 1000000;
     dbus_int64_t i_length = i_mtime / 1000;
-    char *psz_trackid;
+    char *psz_trackid, *psz_uri, *decoded_uri;
 
     if (asprintf(&psz_trackid, MPRIS_TRACKID_FORMAT, index) == -1)
         return VLC_ENOMEM;
 
+    psz_uri = input_item_GetURI(p_input);
+    if((decoded_uri = vlc_uri_decode_duplicate(psz_uri)))
+        free(psz_uri);
+    else
+        decoded_uri = psz_uri;
+
     const char* ppsz_meta_items[] =
     {
         "mpris:trackid", "xesam:url", "xesam:title", "xesam:artist",
@@ -1414,7 +1421,7 @@ int GetInputMeta(size_t index, vlc_playlist_item_t *item, DBusMessageIter *args)
     dbus_message_iter_open_container( args, DBUS_TYPE_ARRAY, "{sv}", &dict );
 
     ADD_META( 0, DBUS_TYPE_OBJECT_PATH, psz_trackid );
-    ADD_VLC_META_STRING( 1,  URI );
+    ADD_META( 1, DBUS_TYPE_STRING, decoded_uri);
     ADD_VLC_META_STRING( 2,  Title );
     ADD_META_SINGLETON_STRING_LIST( 3,  Artist );
     ADD_VLC_META_STRING( 4,  Album );
@@ -1438,6 +1445,8 @@ int GetInputMeta(size_t index, vlc_playlist_item_t *item, DBusMessageIter *args)
     ADD_VLC_META_STRING( 25, URL );
 
     free( psz_trackid );
+    if(decoded_uri != NULL)
+        free( decoded_uri );
 
     vlc_mutex_lock( &p_input->lock );
     if( p_input->p_meta )
-- 
2.51.0



More information about the vlc-devel mailing list