X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fcontrol%2Fplaylist.c;h=cb0bbf3658e61a638bd2e7a11cba35e264a2439e;hb=f7e4ba302f5232314320d9a4d7f2e1dd2a109f3a;hp=fa6bebeddd57a7e9d92f5ecca8485e0bca4d6b71;hpb=2cb472dba008f7d877ffe6bae9c5575253365282;p=vlc diff --git a/src/control/playlist.c b/src/control/playlist.c index fa6bebeddd..cb0bbf3658 100644 --- a/src/control/playlist.c +++ b/src/control/playlist.c @@ -4,7 +4,7 @@ * Copyright (C) 2005 the VideoLAN team * $Id$ * - * Authors: Clément Stenac + * Authors: Clément Stenac * * 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 @@ -26,7 +26,7 @@ #include -void libvlc_playlist_play( libvlc_instance_t *p_instance, +void libvlc_playlist_play( libvlc_instance_t *p_instance, int i_id, int i_options, char **ppsz_options, libvlc_exception_t *p_exception ) { @@ -37,7 +37,124 @@ void libvlc_playlist_play( libvlc_instance_t *p_instance, libvlc_exception_raise( p_exception, "Empty playlist" ); return; } - playlist_Play( p_instance->p_playlist ); + if( i_id > 0 ) + { + /* Always use the current view when using libvlc */ + playlist_view_t *p_view; + playlist_item_t *p_item; + + if( p_instance->p_playlist->status.i_view == -1 ) + { + playlist_Control( p_instance->p_playlist, PLAYLIST_GOTO, + i_id ); + } + p_view = playlist_ViewFind( p_instance->p_playlist, + p_instance->p_playlist->status.i_view ); + if( !p_view ) + { + libvlc_exception_raise( p_exception, + "Unable to find current playlist view "); + return; + } + + p_item = playlist_ItemGetById( p_instance->p_playlist, i_id ); + + if( !p_item ) + { + libvlc_exception_raise( p_exception, "Unable to find item " ); + return; + } + + playlist_Control( p_instance->p_playlist, PLAYLIST_VIEWPLAY, + p_instance->p_playlist->status.i_view, + p_view->p_root, p_item ); + } + else + { + playlist_Play( p_instance->p_playlist ); + } +} + +void libvlc_playlist_pause( libvlc_instance_t *p_instance, + libvlc_exception_t *p_exception ) +{ + if( playlist_Pause( p_instance->p_playlist ) != VLC_SUCCESS ) + { + libvlc_exception_raise( p_exception, "Empty playlist" ); + } +} + + +void libvlc_playlist_stop( libvlc_instance_t *p_instance, + libvlc_exception_t *p_exception ) +{ + if( playlist_Stop( p_instance->p_playlist ) != VLC_SUCCESS ) + { + libvlc_exception_raise( p_exception, "Empty playlist" ); + } +} + +void libvlc_playlist_clear( libvlc_instance_t *p_instance, + libvlc_exception_t *p_exception ) +{ + playlist_Clear( p_instance->p_playlist ); +} + +void libvlc_playlist_next( libvlc_instance_t *p_instance, + libvlc_exception_t *p_exception ) +{ + if( playlist_Next( p_instance->p_playlist ) != VLC_SUCCESS ) + { + libvlc_exception_raise( p_exception, "Empty playlist" ); + } +} + +void libvlc_playlist_prev( libvlc_instance_t *p_instance, + libvlc_exception_t *p_exception ) +{ + if( playlist_Prev( p_instance->p_playlist ) != VLC_SUCCESS ) + { + libvlc_exception_raise( p_exception, "Empty playlist" ); + } +} + +int libvlc_playlist_add( libvlc_instance_t *p_instance, const char *psz_uri, + const char *psz_name, libvlc_exception_t *p_exception ) +{ + return libvlc_playlist_add_extended( p_instance, psz_uri, psz_name, + 0, NULL, p_exception ); +} + +int libvlc_playlist_add_extended( libvlc_instance_t *p_instance, + const char *psz_uri, const char *psz_name, + int i_options, const char **ppsz_options, + libvlc_exception_t *p_exception ) +{ + return playlist_AddExt( p_instance->p_playlist, psz_uri, psz_name, + PLAYLIST_INSERT, PLAYLIST_END, -1, ppsz_options, + i_options ); +} + +int libvlc_playlist_isplaying( libvlc_instance_t *p_instance, + libvlc_exception_t *p_exception ) +{ + if( !p_instance->p_playlist ) + { + libvlc_exception_raise( p_exception, "No playlist" ); + return 0; + } + return playlist_IsPlaying( p_instance->p_playlist ); +} + +int libvlc_playlist_items_count( libvlc_instance_t *p_instance, + libvlc_exception_t *p_exception ) +{ + if( !p_instance->p_playlist ) + { + libvlc_exception_raise( p_exception, "No playlist" ); + return 0; + } + return p_instance->p_playlist->i_size; } libvlc_input_t * libvlc_playlist_get_input( libvlc_instance_t *p_instance, @@ -50,7 +167,7 @@ libvlc_input_t * libvlc_playlist_get_input( libvlc_instance_t *p_instance, { libvlc_exception_raise( p_exception, "No active input" ); vlc_mutex_unlock( &p_instance->p_playlist->object_lock ); - return; + return NULL; } p_input = (libvlc_input_t *)malloc( sizeof( libvlc_input_t ) );