]> git.sesse.net Git - vlc/blobdiff - modules/control/dbus.c
Renamed playlist "playlist-current" to "item-current".
[vlc] / modules / control / dbus.c
index 6fc8cf36f4613ee4ebb8142db7a4413921637e4e..5897acfad7688987fcf6ac5d3e211e1c9d14e74b 100644 (file)
  * 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>
@@ -108,14 +107,14 @@ struct intf_sys_t
  * 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
@@ -126,10 +125,7 @@ vlc_module_end();
 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;
 }
 
@@ -167,7 +163,6 @@ DBUS_METHOD( PositionGet )
     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 )
@@ -176,8 +171,8 @@ DBUS_METHOD( PositionGet )
     {
         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;
@@ -200,21 +195,20 @@ DBUS_METHOD( PositionSet )
 
     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;
 }
@@ -249,7 +243,7 @@ DBUS_METHOD( VolumeSet )
 
     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;
@@ -319,11 +313,7 @@ DBUS_METHOD( Play )
     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 )
     {
@@ -402,7 +392,7 @@ DBUS_METHOD( AddTrack )
 
     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;
@@ -453,7 +443,7 @@ DBUS_METHOD( GetMetadata )
     {
         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;
@@ -498,7 +488,7 @@ DBUS_METHOD( DelTrack )
 
     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;
@@ -535,7 +525,7 @@ DBUS_METHOD( SetLoop )
 
     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;
@@ -566,7 +556,7 @@ DBUS_METHOD( Repeat )
 
     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;
@@ -598,7 +588,7 @@ DBUS_METHOD( SetRandom )
 
     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;
@@ -767,7 +757,7 @@ static int Open( vlc_object_t *p_this )
 
     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 );
@@ -796,8 +786,7 @@ static void Close   ( vlc_object_t *p_this )
     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 );
@@ -808,12 +797,10 @@ static void Close   ( vlc_object_t *p_this )
     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 );
@@ -874,13 +861,13 @@ static int TrackListChangeEmit( vlc_object_t *p_this, const char *psz_var,
     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;
@@ -952,7 +939,7 @@ static int StateChange( vlc_object_t *p_this, const char* psz_var,
     }
 
     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 );
     }
@@ -979,7 +966,7 @@ static int StatusChangeEmit( vlc_object_t *p_this, const char *psz_var,
 }
 
 /*****************************************************************************
- * 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 )
@@ -999,15 +986,12 @@ static int TrackChange( vlc_object_t *p_this, const char *psz_var,
 
     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 );
@@ -1041,7 +1025,8 @@ static int UpdateCaps( intf_thread_t* p_intf, bool b_playlist_locked )
     
     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 )
     {
@@ -1049,11 +1034,11 @@ static int UpdateCaps( intf_thread_t* p_intf, bool b_playlist_locked )
          * 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 )
@@ -1163,8 +1148,6 @@ static int MarshalStatus( intf_thread_t* p_intf, DBusMessageIter* args,
     input_thread_t* p_input = NULL;
 
     p_playlist = pl_Hold( p_intf );
-    if( lock )
-        PL_LOCK;
 
     i_state = 2;
 
@@ -1178,6 +1161,7 @@ static int MarshalStatus( intf_thread_t* p_intf, DBusMessageIter* args,
             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" );
@@ -1186,8 +1170,6 @@ static int MarshalStatus( intf_thread_t* p_intf, DBusMessageIter* args,
 
     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 );