* Preamble
*****************************************************************************/
-#include <dbus/dbus.h>
-
-#include "dbus.h"
-
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
+#include <dbus/dbus.h>
+#include "dbus.h"
+
#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_aout.h>
* Module descriptor
*****************************************************************************/
-vlc_module_begin();
- set_shortname( N_("dbus"));
- set_category( CAT_INTERFACE );
- set_subcategory( SUBCAT_INTERFACE_CONTROL );
- set_description( N_("D-Bus control interface") );
- set_capability( "interface", 0 );
- set_callbacks( Open, Close );
-vlc_module_end();
+vlc_module_begin ()
+ set_shortname( N_("dbus"))
+ set_category( CAT_INTERFACE )
+ set_subcategory( SUBCAT_INTERFACE_CONTROL )
+ set_description( N_("D-Bus control interface") )
+ set_capability( "interface", 0 )
+ set_callbacks( Open, Close )
+vlc_module_end ()
/*****************************************************************************
* Methods
DBUS_METHOD( Quit )
{ /* exits vlc */
REPLY_INIT;
- playlist_t *p_playlist = pl_Hold( (vlc_object_t*) p_this );
- playlist_Stop( p_playlist );
- pl_Release( ((vlc_object_t*) p_this) );
- vlc_object_kill(((vlc_object_t*)p_this)->p_libvlc);
+ libvlc_Quit(((vlc_object_t*)p_this)->p_libvlc);
REPLY_SEND;
}
dbus_int32_t i_pos;
playlist_t *p_playlist = pl_Hold( ((vlc_object_t*) p_this) );
- PL_LOCK;
input_thread_t *p_input = playlist_CurrentInput( p_playlist );
if( !p_input )
{
var_Get( p_input, "time", &position );
i_pos = position.i_time / 1000;
+ vlc_object_release( p_input );
}
- PL_UNLOCK;
pl_Release( ((vlc_object_t*) p_this) );
ADD_INT32( &i_pos );
REPLY_SEND;
if( dbus_error_is_set( &error ) )
{
- msg_Err( (vlc_object_t*) p_this, "D-Bus message reading : %s\n",
+ msg_Err( (vlc_object_t*) p_this, "D-Bus message reading : %s",
error.message );
dbus_error_free( &error );
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
p_playlist = pl_Hold( ((vlc_object_t*) p_this) );
- PL_LOCK;
input_thread_t *p_input = playlist_CurrentInput( p_playlist );
if( p_input )
{
position.i_time = i_pos * 1000;
var_Set( p_input, "time", position );
+ vlc_object_release( p_input );
}
- PL_UNLOCK;
pl_Release( ((vlc_object_t*) p_this) );
REPLY_SEND;
}
if( dbus_error_is_set( &error ) )
{
- msg_Err( (vlc_object_t*) p_this, "D-Bus message reading : %s\n",
+ msg_Err( (vlc_object_t*) p_this, "D-Bus message reading : %s",
error.message );
dbus_error_free( &error );
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
REPLY_INIT;
playlist_t *p_playlist = pl_Hold( (vlc_object_t*) p_this );
- PL_LOCK;
input_thread_t *p_input = playlist_CurrentInput( p_playlist );
- if( p_input )
- vlc_object_hold( p_input );
- PL_UNLOCK;
if( p_input )
{
if( dbus_error_is_set( &error ) )
{
- msg_Err( (vlc_object_t*) p_this, "D-Bus message reading : %s\n",
+ msg_Err( (vlc_object_t*) p_this, "D-Bus message reading : %s",
error.message );
dbus_error_free( &error );
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
{
PL_UNLOCK;
pl_Release( (vlc_object_t*) p_this );
- msg_Err( (vlc_object_t*) p_this, "D-Bus message reading : %s\n",
+ msg_Err( (vlc_object_t*) p_this, "D-Bus message reading : %s",
error.message );
dbus_error_free( &error );
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
if( dbus_error_is_set( &error ) )
{
- msg_Err( (vlc_object_t*) p_this, "D-Bus message reading : %s\n",
+ msg_Err( (vlc_object_t*) p_this, "D-Bus message reading : %s",
error.message );
dbus_error_free( &error );
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
if( dbus_error_is_set( &error ) )
{
- msg_Err( (vlc_object_t*) p_this, "D-Bus message reading : %s\n",
+ msg_Err( (vlc_object_t*) p_this, "D-Bus message reading : %s",
error.message );
dbus_error_free( &error );
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
if( dbus_error_is_set( &error ) )
{
- msg_Err( (vlc_object_t*) p_this, "D-Bus message reading : %s\n",
+ msg_Err( (vlc_object_t*) p_this, "D-Bus message reading : %s",
error.message );
dbus_error_free( &error );
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
if( dbus_error_is_set( &error ) )
{
- msg_Err( (vlc_object_t*) p_this, "D-Bus message reading : %s\n",
+ msg_Err( (vlc_object_t*) p_this, "D-Bus message reading : %s",
error.message );
dbus_error_free( &error );
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
p_playlist = pl_Hold( p_intf );
PL_LOCK;
- var_AddCallback( p_playlist, "playlist-current", TrackChange, p_intf );
+ var_AddCallback( p_playlist, "item-current", TrackChange, p_intf );
var_AddCallback( p_playlist, "intf-change", TrackListChangeEmit, p_intf );
var_AddCallback( p_playlist, "item-append", TrackListChangeEmit, p_intf );
var_AddCallback( p_playlist, "item-deleted", TrackListChangeEmit, p_intf );
playlist_t *p_playlist = pl_Hold( p_intf );;
input_thread_t *p_input;
- PL_LOCK;
- var_DelCallback( p_playlist, "playlist-current", TrackChange, p_intf );
+ var_DelCallback( p_playlist, "item-current", TrackChange, p_intf );
var_DelCallback( p_playlist, "intf-change", TrackListChangeEmit, p_intf );
var_DelCallback( p_playlist, "item-append", TrackListChangeEmit, p_intf );
var_DelCallback( p_playlist, "item-deleted", TrackListChangeEmit, p_intf );
p_input = playlist_CurrentInput( p_playlist );
if ( p_input )
{
- vlc_object_hold( p_input );
var_DelCallback( p_input, "state", StateChange, p_intf );
vlc_object_release( p_input );
}
- PL_UNLOCK;
pl_Release( p_intf );
dbus_connection_unref( p_intf->p_sys->p_conn );
VLC_UNUSED(oldval);
intf_thread_t *p_intf = p_data;
- if( !strcmp( psz_var, "item-append" ) || !strcmp( psz_var, "item-remove" ) )
+ if( !strcmp( psz_var, "item-append" ) )
{
/* don't signal when items are added/removed in p_category */
playlist_t *p_playlist = (playlist_t*)p_this;
playlist_add_t *p_add = newval.p_address;
playlist_item_t *p_item;
- p_item = playlist_ItemGetById( p_playlist, p_add->i_node, pl_Locked );
+ p_item = playlist_ItemGetById( p_playlist, p_add->i_node );
assert( p_item );
while( p_item->p_parent )
p_item = p_item->p_parent;
}
if( newval.i_int == PLAYING_S || newval.i_int == PAUSE_S ||
- newval.i_int == STOP_S || newval.i_int == END_S )
+ newval.i_int == END_S )
{
StatusChangeSignal( p_sys->p_conn, (void*) p_intf );
}
}
/*****************************************************************************
- * TrackChange: callback on playlist "playlist-current"
+ * TrackChange: callback on playlist "item-current"
*****************************************************************************/
static int TrackChange( vlc_object_t *p_this, const char *psz_var,
vlc_value_t oldval, vlc_value_t newval, void *p_data )
p_playlist = pl_Hold( p_intf );
p_input = playlist_CurrentInput( p_playlist );
-
if( !p_input )
{
- PL_UNLOCK;
pl_Release( p_intf );
return VLC_SUCCESS;
}
- vlc_object_hold( p_input );
pl_Release( p_intf );
p_item = input_GetItem( p_input );
if( p_playlist->current.i_size > 0 )
i_caps |= CAPS_CAN_PLAY | CAPS_CAN_GO_PREV | CAPS_CAN_GO_NEXT;
-
+ if( !b_playlist_locked ) PL_UNLOCK;
+
input_thread_t* p_input = playlist_CurrentInput( p_playlist );
if( p_input )
{
* unconditionnaly true */
if( var_GetBool( p_input, "can-pause" ) )
i_caps |= CAPS_CAN_PAUSE;
- if( var_GetBool( p_input, "seekable" ) )
+ if( var_GetBool( p_input, "can-seek" ) )
i_caps |= CAPS_CAN_SEEK;
+ vlc_object_release( p_input );
}
- if( !b_playlist_locked ) PL_UNLOCK;
pl_Release( p_intf );
if( p_sys->b_meta_read )
input_thread_t* p_input = NULL;
p_playlist = pl_Hold( p_intf );
- if( lock )
- PL_LOCK;
i_state = 2;
i_state = 1;
else if( val.i_int <= PLAYING_S )
i_state = 0;
+ vlc_object_release( p_input );
}
i_random = var_CreateGetBool( p_playlist, "random" );
i_loop = var_CreateGetBool( p_playlist, "loop" );
- if( lock )
- PL_UNLOCK;
pl_Release( p_intf );
dbus_message_iter_open_container( args, DBUS_TYPE_STRUCT, NULL, &status );