Commit 3aa9a4ad authored by Alex Merry's avatar Alex Merry Committed by Mirsal Ennaime

dbus: Separate out property marshalling code in D-Bus interfaces

Pull out code to marshal the various properties into separate functions
(and make sure the return type of those functions is int).  This is in
preparation for adding org.freedesktop.DBus.Properties.GetAll support.
Signed-off-by: default avatarMirsal Ennaime <mirsal@videolan.org>
parent 52903263
......@@ -41,17 +41,12 @@
static int MarshalLoopStatus ( intf_thread_t *, DBusMessageIter * );
DBUS_METHOD( Position )
{ /* returns position in microseconds */
REPLY_INIT;
OUT_ARGUMENTS;
DBusMessageIter v;
static int
MarshalPosition( intf_thread_t *p_intf, DBusMessageIter *container )
{
dbus_int64_t i_pos;
if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "x", &v ) )
return DBUS_HANDLER_RESULT_NEED_MEMORY;
input_thread_t *p_input = playlist_CurrentInput( PL );
input_thread_t *p_input;
p_input = playlist_CurrentInput( p_intf->p_sys->p_playlist );
if( !p_input )
i_pos = 0;
......@@ -62,9 +57,23 @@ DBUS_METHOD( Position )
vlc_object_release( p_input );
}
if( !dbus_message_iter_append_basic( &v, DBUS_TYPE_INT64, &i_pos ) )
if( !dbus_message_iter_append_basic( container, DBUS_TYPE_INT64, &i_pos ) )
return VLC_ENOMEM;
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;
......@@ -378,23 +387,31 @@ DBUS_METHOD( CanPause )
REPLY_SEND;
}
DBUS_METHOD( CanControl )
static int
MarshalCanControl( intf_thread_t *p_intf, DBusMessageIter *container )
{
VLC_UNUSED( p_this );
VLC_UNUSED( p_intf );
dbus_bool_t b_can_control = TRUE;
if( !dbus_message_iter_append_basic( container, DBUS_TYPE_BOOLEAN,
&b_can_control ) )
return VLC_ENOMEM;
return VLC_SUCCESS;
}
DBUS_METHOD( CanControl )
{
REPLY_INIT;
OUT_ARGUMENTS;
DBusMessageIter v;
dbus_bool_t b_can_control = TRUE;
if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT,
"b", &v ) )
return DBUS_HANDLER_RESULT_NEED_MEMORY;
if( !dbus_message_iter_append_basic( &v, DBUS_TYPE_BOOLEAN,
&b_can_control ) )
return DBUS_HANDLER_RESULT_NEED_MEMORY;
MarshalCanControl( p_this, &v );
if( !dbus_message_iter_close_container( &args, &v ) )
return DBUS_HANDLER_RESULT_NEED_MEMORY;
......@@ -594,21 +611,29 @@ DBUS_METHOD( RateSet )
REPLY_SEND;
}
DBUS_METHOD( MinimumRate )
static int
MarshalMinimumRate( intf_thread_t *p_intf, DBusMessageIter *container )
{
VLC_UNUSED( p_this );
VLC_UNUSED( p_intf );
double d_min_rate = (double) INPUT_RATE_MIN / INPUT_RATE_DEFAULT;
if( !dbus_message_iter_append_basic( container, DBUS_TYPE_DOUBLE, &d_min_rate ) )
return VLC_ENOMEM;
return VLC_SUCCESS;
}
DBUS_METHOD( MinimumRate )
{
REPLY_INIT;
OUT_ARGUMENTS;
DBusMessageIter v;
double d_min_rate = (double) INPUT_RATE_MIN / INPUT_RATE_DEFAULT;
if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "d", &v ) )
return DBUS_HANDLER_RESULT_NEED_MEMORY;
if( !dbus_message_iter_append_basic( &v, DBUS_TYPE_DOUBLE, &d_min_rate ) )
return DBUS_HANDLER_RESULT_NEED_MEMORY;
MarshalMinimumRate( p_this, &v );
if( !dbus_message_iter_close_container( &args, &v ) )
return DBUS_HANDLER_RESULT_NEED_MEMORY;
......@@ -616,21 +641,29 @@ DBUS_METHOD( MinimumRate )
REPLY_SEND;
}
DBUS_METHOD( MaximumRate )
static int
MarshalMaximumRate( intf_thread_t *p_intf, DBusMessageIter *container )
{
VLC_UNUSED( p_this );
VLC_UNUSED( p_intf );
double d_max_rate = (double) INPUT_RATE_MAX / INPUT_RATE_DEFAULT;
if( !dbus_message_iter_append_basic( container, DBUS_TYPE_DOUBLE, &d_max_rate ) )
return VLC_ENOMEM;
return VLC_SUCCESS;
}
DBUS_METHOD( MaximumRate )
{
REPLY_INIT;
OUT_ARGUMENTS;
DBusMessageIter v;
double d_max_rate = (double) INPUT_RATE_MAX / INPUT_RATE_DEFAULT;
if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "d", &v ) )
return DBUS_HANDLER_RESULT_NEED_MEMORY;
if( !dbus_message_iter_append_basic( &v, DBUS_TYPE_DOUBLE, &d_max_rate ) )
return DBUS_HANDLER_RESULT_NEED_MEMORY;
MarshalMaximumRate( p_this, &v );
if( !dbus_message_iter_close_container( &args, &v ) )
return DBUS_HANDLER_RESULT_NEED_MEMORY;
......
......@@ -4,10 +4,12 @@
* Copyright © 2006-2011 Rafaël Carré
* Copyright © 2007-2011 Mirsal Ennaime
* Copyright © 2009-2011 The VideoLAN team
* Copyright © 2013 Alex Merry
* $Id$
*
* Authors: Mirsal Ennaime <mirsal at mirsal fr>
* Rafaël Carré <funman at videolanorg>
* Alex Merry <dev at randomguy3 me uk>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
......@@ -286,20 +288,16 @@ DBUS_METHOD( RemoveTrack )
REPLY_SEND;
}
DBUS_METHOD( Tracks )
{ /* Tracks property */
VLC_UNUSED( p_this );
REPLY_INIT;
OUT_ARGUMENTS;
DBusMessageIter tracks, v;
char *psz_track_id = NULL;
playlist_t *p_playlist = PL;
static int
MarshalTracks( intf_thread_t *p_intf, DBusMessageIter *container )
{
DBusMessageIter tracks;
char *psz_track_id = NULL;
playlist_t *p_playlist = p_intf->p_sys->p_playlist;
input_item_t *p_input = NULL;
dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "ao", &v );
dbus_message_iter_open_container( &v, DBUS_TYPE_ARRAY, "o", &tracks );
dbus_message_iter_open_container( container, DBUS_TYPE_ARRAY, "o",
&tracks );
PL_LOCK;
......@@ -315,9 +313,8 @@ DBUS_METHOD( Tracks )
&psz_track_id ) )
{
PL_UNLOCK;
dbus_message_iter_abandon_container( &v, &tracks );
dbus_message_iter_abandon_container( &args, &v );
return DBUS_HANDLER_RESULT_NEED_MEMORY;
dbus_message_iter_abandon_container( container, &tracks );
return VLC_ENOMEM;
}
free( psz_track_id );
......@@ -325,26 +322,57 @@ DBUS_METHOD( Tracks )
PL_UNLOCK;
if( !dbus_message_iter_close_container( &v, &tracks ) ||
!dbus_message_iter_close_container( &args, &v ) )
if( !dbus_message_iter_close_container( container, &tracks ) )
return VLC_ENOMEM;
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 )
{
VLC_UNUSED( p_intf );
const dbus_bool_t b_ret = TRUE;
if( !dbus_message_iter_append_basic( container, DBUS_TYPE_BOOLEAN, &b_ret ) )
return VLC_ENOMEM;
return VLC_SUCCESS;
}
DBUS_METHOD( CanEditTracks )
{ /* CanEditTracks property */
VLC_UNUSED( p_this );
REPLY_INIT;
OUT_ARGUMENTS;
DBusMessageIter v;
const dbus_bool_t b_ret = TRUE;
if( !dbus_message_iter_open_container( &args, DBUS_TYPE_VARIANT, "b", &v ) )
return DBUS_HANDLER_RESULT_NEED_MEMORY;
if( !dbus_message_iter_append_basic( &v, DBUS_TYPE_BOOLEAN, &b_ret ) )
if( MarshalCanEditTracks( p_this, &v ) != VLC_SUCCESS )
{
dbus_message_iter_abandon_container( &args, &v );
return DBUS_HANDLER_RESULT_NEED_MEMORY;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment