[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