vlc | branch: master | Mirsal Ennaime <[email protected]> | Thu May 19 12:50:04 2011 +0200| [a9dd52e433243bbe44bf847910002e48a8ae2048] | committer: Mirsal Ennaime
dbus: make the RemoveTrack method compliant with MPRIS2 > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a9dd52e433243bbe44bf847910002e48a8ae2048 --- modules/control/dbus/dbus_tracklist.c | 35 ++++++++++++++++++++++---------- 1 files changed, 24 insertions(+), 11 deletions(-) diff --git a/modules/control/dbus/dbus_tracklist.c b/modules/control/dbus/dbus_tracklist.c index 6fa8178..183fe14 100644 --- a/modules/control/dbus/dbus_tracklist.c +++ b/modules/control/dbus/dbus_tracklist.c @@ -1,8 +1,8 @@ /***************************************************************************** * dbus-tracklist.c : dbus control module (mpris v1.0) - /TrackList object ***************************************************************************** - * Copyright © 2006-2008 Rafaël Carré - * Copyright © 2007-2010 Mirsal Ennaime + * Copyright © 2006-2011 Rafaël Carré + * Copyright © 2007-2011 Mirsal Ennaime * Copyright © 2009-2010 The VideoLAN team * $Id$ * @@ -129,18 +129,20 @@ DBUS_METHOD( GetLength ) REPLY_SEND; } -DBUS_METHOD( DelTrack ) +DBUS_METHOD( RemoveTrack ) { REPLY_INIT; DBusError error; dbus_error_init( &error ); - dbus_int32_t i_position; + int i_id = -1, i; + char *psz_id = NULL; playlist_t *p_playlist = PL; + input_item_t *p_input = NULL; dbus_message_get_args( p_from, &error, - DBUS_TYPE_INT32, &i_position, + DBUS_TYPE_OBJECT_PATH, &psz_id, DBUS_TYPE_INVALID ); if( dbus_error_is_set( &error ) ) @@ -151,15 +153,26 @@ DBUS_METHOD( DelTrack ) return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } + if( 1 != sscanf( psz_id, MPRIS_TRACKID_FORMAT, &i_id ) ) + { + msg_Err( (vlc_object_t*) p_this, "Invalid track id: %s", psz_id ); + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; + } + PL_LOCK; - if( i_position < p_playlist->current.i_size ) + + for( i = 0; i < playlist_CurrentSize( p_playlist ); i++ ) { - playlist_DeleteFromInput( p_playlist, - p_playlist->current.p_elems[i_position]->p_input, - pl_Locked ); + p_input = p_playlist->current.p_elems[i]->p_input; + + if( i_id == p_input->i_id ) + { + playlist_DeleteFromInput( p_playlist, p_input, true ); + break; + } } - PL_UNLOCK; + PL_UNLOCK; REPLY_SEND; } @@ -254,7 +267,7 @@ handle_tracklist ( DBusConnection *p_conn, DBusMessage *p_from, void *p_this ) METHOD_FUNC( DBUS_MPRIS_TRACKLIST_INTERFACE, "GetCurrentTrack", GetCurrentTrack ); METHOD_FUNC( DBUS_MPRIS_TRACKLIST_INTERFACE, "GetLength", GetLength ); METHOD_FUNC( DBUS_MPRIS_TRACKLIST_INTERFACE, "AddTrack", AddTrack ); - METHOD_FUNC( DBUS_MPRIS_TRACKLIST_INTERFACE, "DelTrack", DelTrack ); + METHOD_FUNC( DBUS_MPRIS_TRACKLIST_INTERFACE, "RemoveTrack", RemoveTrack ); METHOD_FUNC( DBUS_MPRIS_TRACKLIST_INTERFACE, "SetLoop", SetLoop ); METHOD_FUNC( DBUS_MPRIS_TRACKLIST_INTERFACE, "SetRandom", SetRandom ); _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
