[vlc-devel] [PATCH 4/6] Standardise property getters in the D-Bus module

Alex Merry dev at randomguy3.me.uk
Tue Jan 29 01:55:21 CET 2013


There was a lot of repeated code, some of which properly checked return
values and some of which didn't.  This is all replaced and folded into
the GetProperty function of each interface.

A side-effect is that it should be more efficient (we only check the
interface argument once instead of once for each property, and there
should be a smaller overall code size).
---
 modules/control/dbus/dbus_player.c    | 303 +++++-----------------------------
 modules/control/dbus/dbus_root.c      | 201 +++++-----------------
 modules/control/dbus/dbus_tracklist.c |  80 ++++-----
 3 files changed, 110 insertions(+), 474 deletions(-)

diff --git a/modules/control/dbus/dbus_player.c b/modules/control/dbus/dbus_player.c
index 2f9dabd..411e449 100644
--- a/modules/control/dbus/dbus_player.c
+++ b/modules/control/dbus/dbus_player.c
@@ -39,11 +39,10 @@
 #include "dbus_player.h"
 #include "dbus_common.h"
 
-static int MarshalLoopStatus ( intf_thread_t *, DBusMessageIter * );
-
 static int
 MarshalPosition( intf_thread_t *p_intf, DBusMessageIter *container )
 {
+    /* returns position in microseconds */
     dbus_int64_t i_pos;
     input_thread_t *p_input;
     p_input = playlist_CurrentInput( p_intf->p_sys->p_playlist );
@@ -63,23 +62,6 @@ MarshalPosition( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( Position )
-{ /* returns position in microseconds */
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-    DBusMessageIter v;
-
-    if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "x", &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    MarshalPosition( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 DBUS_METHOD( SetPosition )
 { /* set position in microseconds */
 
@@ -188,24 +170,6 @@ MarshalVolume( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( VolumeGet )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-
-    if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "d", &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    MarshalVolume( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 DBUS_METHOD( VolumeSet )
 {
     REPLY_INIT;
@@ -329,24 +293,6 @@ MarshalCanPlay( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( CanPlay )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-
-    if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "b", &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    MarshalCanPlay( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 static int
 MarshalCanPause( intf_thread_t *p_intf, DBusMessageIter *container )
 {
@@ -367,24 +313,6 @@ MarshalCanPause( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( CanPause )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-
-    if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "b", &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    MarshalCanPause( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 static int
 MarshalCanControl( intf_thread_t *p_intf, DBusMessageIter *container )
 {
@@ -397,25 +325,6 @@ MarshalCanControl( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( CanControl )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-
-    if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT,
-                                           "b", &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    MarshalCanControl( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 static int
 MarshalCanSeek( intf_thread_t *p_intf, DBusMessageIter *container )
 {
@@ -435,24 +344,6 @@ MarshalCanSeek( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( CanSeek )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-
-    if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "b", &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    MarshalCanSeek( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 static int
 MarshalShuffle( intf_thread_t *p_intf, DBusMessageIter *container )
 {
@@ -463,24 +354,6 @@ MarshalShuffle( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( ShuffleGet )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-
-    if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "b", &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    MarshalShuffle( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 DBUS_METHOD( ShuffleSet )
 {
     REPLY_INIT;
@@ -527,24 +400,6 @@ MarshalPlaybackStatus( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( PlaybackStatus )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-
-    if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "s", &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    MarshalPlaybackStatus( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 static int
 MarshalRate( intf_thread_t *p_intf, DBusMessageIter *container )
 {
@@ -564,24 +419,6 @@ MarshalRate( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( RateGet )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-
-    if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "d", &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    MarshalRate( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 DBUS_METHOD( RateSet )
 {
     REPLY_INIT;
@@ -615,24 +452,6 @@ MarshalMinimumRate( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( MinimumRate )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-
-    if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "d", &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    MarshalMinimumRate( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 static int
 MarshalMaximumRate( intf_thread_t *p_intf, DBusMessageIter *container )
 {
@@ -645,24 +464,6 @@ MarshalMaximumRate( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( MaximumRate )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-
-    if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "d", &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    MarshalMaximumRate( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 static int
 MarshalLoopStatus( intf_thread_t *p_intf, DBusMessageIter *container )
 {
@@ -684,24 +485,6 @@ MarshalLoopStatus( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( LoopStatusGet )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-
-    if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "s", &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    MarshalLoopStatus( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 DBUS_METHOD( LoopStatusSet )
 {
     REPLY_INIT;
@@ -758,24 +541,6 @@ MarshalMetadata( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( Metadata )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-
-    if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT,
-                                           "a{sv}", &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    if( MarshalMetadata( p_this, &v ) != VLC_SUCCESS ||
-        !dbus_message_iter_close_container( &args, &v ) ) {
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-    }
-
-    REPLY_SEND;
-}
 
 /******************************************************************************
  * Seeked: non-linear playback signal
@@ -803,11 +568,22 @@ DBUS_SIGNAL( SeekedSignal )
 }
 
 #define PROPERTY_MAPPING_BEGIN if( 0 ) {}
-#define PROPERTY_FUNC( interface, property, function ) \
-    else if( !strcmp( psz_interface_name, interface ) && \
-             !strcmp( psz_property_name,  property ) ) \
-        return function( p_conn, p_from, p_this );
-#define PROPERTY_MAPPING_END return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+#define PROPERTY_GET_FUNC( prop, signature ) \
+    else if( !strcmp( psz_property_name,  #prop ) ) { \
+        if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, signature, &v ) ) \
+            return DBUS_HANDLER_RESULT_NEED_MEMORY; \
+        if( VLC_SUCCESS != Marshal##prop( p_this, &v ) ) { \
+            dbus_message_iter_abandon_container( &args, &v ); \
+            return DBUS_HANDLER_RESULT_NEED_MEMORY; \
+        } \
+        if( !dbus_message_iter_close_container( &args, &v ) ) \
+            return DBUS_HANDLER_RESULT_NEED_MEMORY; \
+    }
+#define PROPERTY_SET_FUNC( prop ) \
+    else if( !strcmp( psz_property_name,  #prop ) ) { \
+        return prop##Set( p_conn, p_from, p_this ); \
+    }
+#define PROPERTY_MAPPING_END else { return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; }
 
 DBUS_METHOD( GetProperty )
 {
@@ -833,21 +609,31 @@ DBUS_METHOD( GetProperty )
     msg_Dbg( (vlc_object_t*) p_this, "Getting property %s",
                                      psz_property_name );
 
+    if( strcmp( psz_interface_name, DBUS_MPRIS_PLAYER_INTERFACE ) ) {
+        return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+    }
+
+    REPLY_INIT;
+    OUT_ARGUMENTS;
+    DBusMessageIter v;
+
     PROPERTY_MAPPING_BEGIN
-    PROPERTY_FUNC( DBUS_MPRIS_PLAYER_INTERFACE, "Metadata", Metadata )
-    PROPERTY_FUNC( DBUS_MPRIS_PLAYER_INTERFACE, "Position", Position )
-    PROPERTY_FUNC( DBUS_MPRIS_PLAYER_INTERFACE, "PlaybackStatus", PlaybackStatus )
-    PROPERTY_FUNC( DBUS_MPRIS_PLAYER_INTERFACE, "LoopStatus", LoopStatusGet )
-    PROPERTY_FUNC( DBUS_MPRIS_PLAYER_INTERFACE, "Shuffle", ShuffleGet )
-    PROPERTY_FUNC( DBUS_MPRIS_PLAYER_INTERFACE, "Volume", VolumeGet )
-    PROPERTY_FUNC( DBUS_MPRIS_PLAYER_INTERFACE, "Rate", RateGet )
-    PROPERTY_FUNC( DBUS_MPRIS_PLAYER_INTERFACE, "MinimumRate", MinimumRate )
-    PROPERTY_FUNC( DBUS_MPRIS_PLAYER_INTERFACE, "MaximumRate", MaximumRate )
-    PROPERTY_FUNC( DBUS_MPRIS_PLAYER_INTERFACE, "CanControl", CanControl )
-    PROPERTY_FUNC( DBUS_MPRIS_PLAYER_INTERFACE, "CanPlay", CanPlay )
-    PROPERTY_FUNC( DBUS_MPRIS_PLAYER_INTERFACE, "CanPause", CanPause )
-    PROPERTY_FUNC( DBUS_MPRIS_PLAYER_INTERFACE, "CanSeek", CanSeek )
+    PROPERTY_GET_FUNC( Metadata,       "a{sv}" )
+    PROPERTY_GET_FUNC( Position,       "x" )
+    PROPERTY_GET_FUNC( PlaybackStatus, "s" )
+    PROPERTY_GET_FUNC( LoopStatus,     "s" )
+    PROPERTY_GET_FUNC( Shuffle,        "b" )
+    PROPERTY_GET_FUNC( Volume,         "d" )
+    PROPERTY_GET_FUNC( Rate,           "d" )
+    PROPERTY_GET_FUNC( MinimumRate,    "d" )
+    PROPERTY_GET_FUNC( MaximumRate,    "d" )
+    PROPERTY_GET_FUNC( CanControl,     "b" )
+    PROPERTY_GET_FUNC( CanPlay,        "b" )
+    PROPERTY_GET_FUNC( CanPause,       "b" )
+    PROPERTY_GET_FUNC( CanSeek,        "b" )
     PROPERTY_MAPPING_END
+
+    REPLY_SEND;
 }
 
 DBUS_METHOD( SetProperty )
@@ -872,15 +658,16 @@ DBUS_METHOD( SetProperty )
     }
 
     PROPERTY_MAPPING_BEGIN
-    PROPERTY_FUNC( DBUS_MPRIS_PLAYER_INTERFACE, "LoopStatus", LoopStatusSet )
-    PROPERTY_FUNC( DBUS_MPRIS_PLAYER_INTERFACE, "Shuffle",    ShuffleSet )
-    PROPERTY_FUNC( DBUS_MPRIS_PLAYER_INTERFACE, "Volume",     VolumeSet )
-    PROPERTY_FUNC( DBUS_MPRIS_PLAYER_INTERFACE, "Rate",       RateSet )
+    PROPERTY_SET_FUNC( LoopStatus )
+    PROPERTY_SET_FUNC( Shuffle )
+    PROPERTY_SET_FUNC( Volume )
+    PROPERTY_SET_FUNC( Rate )
     PROPERTY_MAPPING_END
 }
 
 #undef PROPERTY_MAPPING_BEGIN
 #undef PROPERTY_GET_FUNC
+#undef PROPERTY_SET_FUNC
 #undef PROPERTY_MAPPING_END
 
 #define METHOD_FUNC( interface, method, function ) \
diff --git a/modules/control/dbus/dbus_root.c b/modules/control/dbus/dbus_root.c
index 4a0ca4f..3bfa291 100644
--- a/modules/control/dbus/dbus_root.c
+++ b/modules/control/dbus/dbus_root.c
@@ -86,22 +86,6 @@ MarshalIdentity( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( Identity )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-    dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "s", &v );
-
-    MarshalIdentity( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 static int
 MarshalCanSetFullscreen( intf_thread_t *p_intf, DBusMessageIter *container )
 {
@@ -127,22 +111,6 @@ MarshalCanSetFullscreen( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( CanSetFullscreen )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-    dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "b", &v );
-
-    MarshalCanSetFullscreen( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 static int
 MarshalFullscreen( intf_thread_t *p_intf, DBusMessageIter *container )
 {
@@ -160,24 +128,6 @@ MarshalFullscreen( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( FullscreenGet )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-
-    if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "b", &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    MarshalFullscreen( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 DBUS_METHOD( FullscreenSet )
 {
     REPLY_INIT;
@@ -214,22 +164,6 @@ MarshalCanQuit( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( CanQuit )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-    dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "b", &v );
-
-    MarshalCanQuit( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 static int
 MarshalCanRaise( intf_thread_t *p_intf, DBusMessageIter *container )
 {
@@ -242,22 +176,6 @@ MarshalCanRaise( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( CanRaise )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-    dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "b", &v );
-
-    MarshalCanRaise( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 static int
 MarshalHasTrackList( intf_thread_t *p_intf, DBusMessageIter *container )
 {
@@ -270,22 +188,6 @@ MarshalHasTrackList( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( HasTrackList )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-    dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "b", &v );
-
-    MarshalHasTrackList( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 static int
 MarshalDesktopEntry( intf_thread_t *p_intf, DBusMessageIter *container )
 {
@@ -298,22 +200,6 @@ MarshalDesktopEntry( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( DesktopEntry )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-    dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "s", &v );
-
-    MarshalDesktopEntry( p_this, &v );
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 static int
 MarshalSupportedMimeTypes( intf_thread_t *p_intf, DBusMessageIter *container )
 {
@@ -343,23 +229,6 @@ MarshalSupportedMimeTypes( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( SupportedMimeTypes )
-{
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-    dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "as", &v );
-
-    if( VLC_SUCCESS != MarshalSupportedMimeTypes( p_this, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 static int
 MarshalSupportedUriSchemes( intf_thread_t *p_intf, DBusMessageIter *container )
 {
@@ -389,24 +258,6 @@ MarshalSupportedUriSchemes( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( SupportedUriSchemes )
-{
-    VLC_UNUSED( p_this );
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-    dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "as", &v );
-
-    if( VLC_SUCCESS != MarshalSupportedUriSchemes( p_this, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 DBUS_METHOD( Quit )
 { /* exits vlc */
     REPLY_INIT;
@@ -422,11 +273,22 @@ DBUS_METHOD( Raise )
 }
 
 #define PROPERTY_MAPPING_BEGIN if( 0 ) {}
-#define PROPERTY_FUNC( interface, property, function ) \
-    else if( !strcmp( psz_interface_name, interface ) && \
-             !strcmp( psz_property_name,  property ) ) \
-        return function( p_conn, p_from, p_this );
-#define PROPERTY_MAPPING_END return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+#define PROPERTY_GET_FUNC( prop, signature ) \
+    else if( !strcmp( psz_property_name,  #prop ) ) { \
+        if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, signature, &v ) ) \
+            return DBUS_HANDLER_RESULT_NEED_MEMORY; \
+        if( VLC_SUCCESS != Marshal##prop( p_this, &v ) ) { \
+            dbus_message_iter_abandon_container( &args, &v ); \
+            return DBUS_HANDLER_RESULT_NEED_MEMORY; \
+        } \
+        if( !dbus_message_iter_close_container( &args, &v ) ) \
+            return DBUS_HANDLER_RESULT_NEED_MEMORY; \
+    }
+#define PROPERTY_SET_FUNC( prop ) \
+    else if( !strcmp( psz_property_name,  #prop ) ) { \
+        return prop##Set( p_conn, p_from, p_this ); \
+    }
+#define PROPERTY_MAPPING_END else { return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; }
 
 DBUS_METHOD( GetProperty )
 {
@@ -452,17 +314,27 @@ DBUS_METHOD( GetProperty )
     msg_Dbg( (vlc_object_t*) p_this, "Getting property %s",
                                      psz_property_name );
 
+    if( strcmp( psz_interface_name, DBUS_MPRIS_ROOT_INTERFACE ) ) {
+        return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+    }
+
+    REPLY_INIT;
+    OUT_ARGUMENTS;
+    DBusMessageIter v;
+
     PROPERTY_MAPPING_BEGIN
-    PROPERTY_FUNC( DBUS_MPRIS_ROOT_INTERFACE, "Identity",            Identity )
-    PROPERTY_FUNC( DBUS_MPRIS_ROOT_INTERFACE, "DesktopEntry",        DesktopEntry )
-    PROPERTY_FUNC( DBUS_MPRIS_ROOT_INTERFACE, "SupportedMimeTypes",  SupportedMimeTypes )
-    PROPERTY_FUNC( DBUS_MPRIS_ROOT_INTERFACE, "SupportedUriSchemes", SupportedUriSchemes )
-    PROPERTY_FUNC( DBUS_MPRIS_ROOT_INTERFACE, "HasTrackList",        HasTrackList )
-    PROPERTY_FUNC( DBUS_MPRIS_ROOT_INTERFACE, "CanQuit",             CanQuit )
-    PROPERTY_FUNC( DBUS_MPRIS_ROOT_INTERFACE, "CanSetFullscreen",    CanSetFullscreen )
-    PROPERTY_FUNC( DBUS_MPRIS_ROOT_INTERFACE, "Fullscreen",          FullscreenGet )
-    PROPERTY_FUNC( DBUS_MPRIS_ROOT_INTERFACE, "CanRaise",            CanRaise )
+    PROPERTY_GET_FUNC( Identity,            "s" )
+    PROPERTY_GET_FUNC( CanSetFullscreen,    "b" )
+    PROPERTY_GET_FUNC( Fullscreen,          "b" )
+    PROPERTY_GET_FUNC( CanQuit,             "b" )
+    PROPERTY_GET_FUNC( CanRaise,            "b" )
+    PROPERTY_GET_FUNC( HasTrackList,        "b" )
+    PROPERTY_GET_FUNC( DesktopEntry,        "s" )
+    PROPERTY_GET_FUNC( SupportedMimeTypes,  "as" )
+    PROPERTY_GET_FUNC( SupportedUriSchemes, "as" )
     PROPERTY_MAPPING_END
+
+    REPLY_SEND;
 }
 
 DBUS_METHOD( SetProperty )
@@ -487,12 +359,13 @@ DBUS_METHOD( SetProperty )
     }
 
     PROPERTY_MAPPING_BEGIN
-    PROPERTY_FUNC( DBUS_MPRIS_ROOT_INTERFACE, "Fullscreen",    FullscreenSet )
+    PROPERTY_SET_FUNC( Fullscreen )
     PROPERTY_MAPPING_END
 }
 
 #undef PROPERTY_MAPPING_BEGIN
 #undef PROPERTY_GET_FUNC
+#undef PROPERTY_SET_FUNC
 #undef PROPERTY_MAPPING_END
 
 #define ADD_PROPERTY( prop, signature ) \
diff --git a/modules/control/dbus/dbus_tracklist.c b/modules/control/dbus/dbus_tracklist.c
index 3199710..58df41f 100644
--- a/modules/control/dbus/dbus_tracklist.c
+++ b/modules/control/dbus/dbus_tracklist.c
@@ -328,27 +328,6 @@ MarshalTracks( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-
-DBUS_METHOD( Tracks )
-{ /* Tracks property */
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-
-    dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "ao", &v );
-
-    if( MarshalTracks( p_this, &v ) != VLC_SUCCESS ) {
-        dbus_message_iter_abandon_container( &args, &v );
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-    }
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    REPLY_SEND;
-}
-
 static int
 MarshalCanEditTracks( intf_thread_t *p_intf, DBusMessageIter *container )
 {
@@ -361,36 +340,23 @@ MarshalCanEditTracks( intf_thread_t *p_intf, DBusMessageIter *container )
     return VLC_SUCCESS;
 }
 
-DBUS_METHOD( CanEditTracks )
-{ /* CanEditTracks property */
-    REPLY_INIT;
-    OUT_ARGUMENTS;
-
-    DBusMessageIter v;
-
-    if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "b", &v ) )
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
-    if( MarshalCanEditTracks( p_this, &v ) != VLC_SUCCESS ) {
-        dbus_message_iter_abandon_container( &args, &v );
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
+#define PROPERTY_MAPPING_BEGIN if( 0 ) {}
+#define PROPERTY_GET_FUNC( prop, signature ) \
+    else if( !strcmp( psz_property_name,  #prop ) ) { \
+        if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, signature, &v ) ) \
+            return DBUS_HANDLER_RESULT_NEED_MEMORY; \
+        if( VLC_SUCCESS != Marshal##prop( p_this, &v ) ) { \
+            dbus_message_iter_abandon_container( &args, &v ); \
+            return DBUS_HANDLER_RESULT_NEED_MEMORY; \
+        } \
+        if( !dbus_message_iter_close_container( &args, &v ) ) \
+            return DBUS_HANDLER_RESULT_NEED_MEMORY; \
     }
-
-    if( !dbus_message_iter_close_container( &args, &v ) )
-    {
-        dbus_message_iter_abandon_container( &args, &v );
-        return DBUS_HANDLER_RESULT_NEED_MEMORY;
+#define PROPERTY_SET_FUNC( prop ) \
+    else if( !strcmp( psz_property_name,  #prop ) ) { \
+        return prop##Set( p_conn, p_from, p_this ); \
     }
-
-    REPLY_SEND;
-}
-
-#define PROPERTY_MAPPING_BEGIN if( 0 ) {}
-#define PROPERTY_FUNC( interface, property, function ) \
-    else if( !strcmp( psz_interface_name, interface ) && \
-             !strcmp( psz_property_name,  property ) ) \
-        return function( p_conn, p_from, p_this );
-#define PROPERTY_MAPPING_END return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+#define PROPERTY_MAPPING_END else { return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; }
 
 DBUS_METHOD( GetProperty )
 {
@@ -416,15 +382,25 @@ DBUS_METHOD( GetProperty )
     msg_Dbg( (vlc_object_t*) p_this, "Getting property %s",
                                      psz_property_name );
 
+    if( strcmp( psz_interface_name, DBUS_MPRIS_TRACKLIST_INTERFACE ) ) {
+        return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+    }
+
+    REPLY_INIT;
+    OUT_ARGUMENTS;
+    DBusMessageIter v;
+
     PROPERTY_MAPPING_BEGIN
-    PROPERTY_FUNC( DBUS_MPRIS_TRACKLIST_INTERFACE, "Tracks", Tracks )
-    PROPERTY_FUNC( DBUS_MPRIS_TRACKLIST_INTERFACE, "CanEditTracks",
-                                                   CanEditTracks )
+    PROPERTY_GET_FUNC( Tracks, "ao" )
+    PROPERTY_GET_FUNC( CanEditTracks, "b" )
     PROPERTY_MAPPING_END
+
+    REPLY_SEND;
 }
 
 #undef PROPERTY_MAPPING_BEGIN
 #undef PROPERTY_GET_FUNC
+#undef PROPERTY_SET_FUNC
 #undef PROPERTY_MAPPING_END
 
 #define METHOD_FUNC( interface, method, function ) \
-- 
1.8.1.1




More information about the vlc-devel mailing list