Commit 54ece28f authored by Mirsal Ennaime's avatar Mirsal Ennaime

dbus: Update the TrackList interface implementation

 * Remove legacy methods
 * Implement the GoTo method
parent 7b77afbc
/***************************************************************************** /*****************************************************************************
* dbus-tracklist.c : dbus control module (mpris v1.0) - /TrackList object * dbus-tracklist.c : dbus control module (mpris v2.1) - TrackList interface
***************************************************************************** *****************************************************************************
* Copyright © 2006-2011 Rafaël Carré * Copyright © 2006-2011 Rafaël Carré
* Copyright © 2007-2011 Mirsal Ennaime * Copyright © 2007-2011 Mirsal Ennaime
* Copyright © 2009-2010 The VideoLAN team * Copyright © 2009-2011 The VideoLAN team
* $Id$ * $Id$
* *
* Authors: Mirsal Ennaime <mirsal at mirsal fr> * Authors: Mirsal Ennaime <mirsal at mirsal fr>
...@@ -68,21 +68,6 @@ DBUS_METHOD( AddTrack ) ...@@ -68,21 +68,6 @@ DBUS_METHOD( AddTrack )
REPLY_SEND; REPLY_SEND;
} }
DBUS_METHOD( GetCurrentTrack )
{
REPLY_INIT;
OUT_ARGUMENTS;
playlist_t *p_playlist = PL;
PL_LOCK;
dbus_int32_t i_position = PL->i_current_index;
PL_UNLOCK;
ADD_INT32( &i_position );
REPLY_SEND;
}
DBUS_METHOD( GetTracksMetadata ) DBUS_METHOD( GetTracksMetadata )
{ {
REPLY_INIT; REPLY_INIT;
...@@ -95,7 +80,6 @@ DBUS_METHOD( GetTracksMetadata ) ...@@ -95,7 +80,6 @@ DBUS_METHOD( GetTracksMetadata )
input_item_t *p_input = NULL; input_item_t *p_input = NULL;
DBusMessageIter in_args, track_ids, meta; DBusMessageIter in_args, track_ids, meta;
dbus_message_iter_init( p_from, &in_args ); dbus_message_iter_init( p_from, &in_args );
if( DBUS_TYPE_ARRAY != dbus_message_iter_get_arg_type( &in_args ) ) if( DBUS_TYPE_ARRAY != dbus_message_iter_get_arg_type( &in_args ) )
...@@ -139,34 +123,19 @@ DBUS_METHOD( GetTracksMetadata ) ...@@ -139,34 +123,19 @@ DBUS_METHOD( GetTracksMetadata )
REPLY_SEND; REPLY_SEND;
} }
DBUS_METHOD( GetLength ) DBUS_METHOD( GoTo )
{ {
REPLY_INIT; REPLY_INIT;
OUT_ARGUMENTS;
playlist_t *p_playlist = PL;
PL_LOCK;
dbus_int32_t i_elements = PL->current.i_size;
PL_UNLOCK;
ADD_INT32( &i_elements );
REPLY_SEND;
}
DBUS_METHOD( RemoveTrack ) int i_track_id = -1;
{ const char *psz_track_id = NULL;
REPLY_INIT; playlist_t *p_playlist = PL;
DBusError error; DBusError error;
dbus_error_init( &error ); dbus_error_init( &error );
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_message_get_args( p_from, &error,
DBUS_TYPE_OBJECT_PATH, &psz_id, DBUS_TYPE_OBJECT_PATH, &psz_track_id,
DBUS_TYPE_INVALID ); DBUS_TYPE_INVALID );
if( dbus_error_is_set( &error ) ) if( dbus_error_is_set( &error ) )
...@@ -177,21 +146,21 @@ DBUS_METHOD( RemoveTrack ) ...@@ -177,21 +146,21 @@ DBUS_METHOD( RemoveTrack )
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
} }
if( 1 != sscanf( psz_id, MPRIS_TRACKID_FORMAT, &i_id ) ) if( 1 != sscanf( psz_track_id, MPRIS_TRACKID_FORMAT, &i_track_id ) )
{ {
msg_Err( (vlc_object_t*) p_this, "Invalid track id: %s", psz_id ); msg_Err( (vlc_object_t*) p_this, "Invalid track id %s", psz_track_id );
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
} }
PL_LOCK; PL_LOCK;
for( i = 0; i < playlist_CurrentSize( p_playlist ); i++ ) for( int i = 0; i < playlist_CurrentSize( p_playlist ); i++ )
{ {
p_input = p_playlist->current.p_elems[i]->p_input; if( i_track_id == p_playlist->current.p_elems[i]->p_input->i_id )
if( i_id == p_input->i_id )
{ {
playlist_DeleteFromInput( p_playlist, p_input, true ); playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, true,
p_playlist->current.p_elems[i]->p_parent,
p_playlist->current.p_elems[i] );
break; break;
} }
} }
...@@ -200,17 +169,20 @@ DBUS_METHOD( RemoveTrack ) ...@@ -200,17 +169,20 @@ DBUS_METHOD( RemoveTrack )
REPLY_SEND; REPLY_SEND;
} }
DBUS_METHOD( SetLoop ) DBUS_METHOD( RemoveTrack )
{ {
REPLY_INIT; REPLY_INIT;
OUT_ARGUMENTS;
DBusError error; DBusError error;
dbus_bool_t b_loop;
dbus_error_init( &error ); dbus_error_init( &error );
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_message_get_args( p_from, &error,
DBUS_TYPE_BOOLEAN, &b_loop, DBUS_TYPE_OBJECT_PATH, &psz_id,
DBUS_TYPE_INVALID ); DBUS_TYPE_INVALID );
if( dbus_error_is_set( &error ) ) if( dbus_error_is_set( &error ) )
...@@ -221,34 +193,26 @@ DBUS_METHOD( SetLoop ) ...@@ -221,34 +193,26 @@ DBUS_METHOD( SetLoop )
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
} }
var_SetBool( PL, "loop", ( b_loop == TRUE ) ); if( 1 != sscanf( psz_id, MPRIS_TRACKID_FORMAT, &i_id ) )
REPLY_SEND;
}
DBUS_METHOD( SetRandom )
{
REPLY_INIT;
OUT_ARGUMENTS;
DBusError error;
dbus_bool_t b_random;
dbus_error_init( &error );
dbus_message_get_args( p_from, &error,
DBUS_TYPE_BOOLEAN, &b_random,
DBUS_TYPE_INVALID );
if( dbus_error_is_set( &error ) )
{ {
msg_Err( (vlc_object_t*) p_this, "D-Bus message reading : %s", msg_Err( (vlc_object_t*) p_this, "Invalid track id: %s", psz_id );
error.message );
dbus_error_free( &error );
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
} }
var_SetBool( PL, "random", ( b_random == TRUE ) ); PL_LOCK;
for( i = 0; i < playlist_CurrentSize( p_playlist ); i++ )
{
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;
REPLY_SEND; REPLY_SEND;
} }
...@@ -288,12 +252,9 @@ handle_tracklist ( DBusConnection *p_conn, DBusMessage *p_from, void *p_this ) ...@@ -288,12 +252,9 @@ handle_tracklist ( DBusConnection *p_conn, DBusMessage *p_from, void *p_this )
/* here D-Bus method names are associated to an handler */ /* here D-Bus method names are associated to an handler */
METHOD_FUNC( DBUS_MPRIS_TRACKLIST_INTERFACE, "GetTracksMetadata", GetTracksMetadata ); METHOD_FUNC( DBUS_MPRIS_TRACKLIST_INTERFACE, "GetTracksMetadata", GetTracksMetadata );
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, "AddTrack", AddTrack );
METHOD_FUNC( DBUS_MPRIS_TRACKLIST_INTERFACE, "RemoveTrack", RemoveTrack ); METHOD_FUNC( DBUS_MPRIS_TRACKLIST_INTERFACE, "RemoveTrack", RemoveTrack );
METHOD_FUNC( DBUS_MPRIS_TRACKLIST_INTERFACE, "SetLoop", SetLoop ); METHOD_FUNC( DBUS_MPRIS_TRACKLIST_INTERFACE, "GoTo", GoTo );
METHOD_FUNC( DBUS_MPRIS_TRACKLIST_INTERFACE, "SetRandom", SetRandom );
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
} }
......
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