+/*****************************************************************************
+ * VlcPlugin playlist replacement methods
+ *****************************************************************************/
+void VlcPlugin::set_player_window( libvlc_exception_t *ex )
+{
+#ifdef XP_UNIX
+ libvlc_media_player_set_xwindow(libvlc_media_player,
+ (libvlc_drawable_t)getVideoWindow(),
+ ex);
+#endif
+#ifdef XP_MACOSX
+ // XXX FIXME insert appropriate call here
+#endif
+#ifdef XP_WIN
+ libvlc_media_player_set_hwnd(libvlc_media_player,
+ getWindow().window,
+ ex);
+#endif
+}
+
+int VlcPlugin::playlist_add( const char *mrl, libvlc_exception_t *ex )
+{
+ int item = -1;
+ libvlc_media_t *p_m = libvlc_media_new(libvlc_instance,mrl,ex);
+ if( libvlc_exception_raised(ex) )
+ return -1;
+
+ libvlc_media_list_lock(libvlc_media_list);
+ libvlc_media_list_add_media(libvlc_media_list,p_m,ex);
+ if( !libvlc_exception_raised(ex) )
+ item = libvlc_media_list_count(libvlc_media_list,ex)-1;
+ libvlc_media_list_unlock(libvlc_media_list);
+
+ libvlc_media_release(p_m);
+
+ return item;
+}
+
+int VlcPlugin::playlist_add_extended_untrusted( const char *mrl, const char *name,
+ int optc, const char **optv, libvlc_exception_t *ex )
+{
+ libvlc_media_t *p_m = libvlc_media_new(libvlc_instance, mrl,ex);
+ int item = -1;
+ if( libvlc_exception_raised(ex) )
+ return -1;
+
+ for( int i = 0; i < optc; ++i )
+ {
+ libvlc_media_add_option_untrusted(p_m, optv[i],ex);
+ if( libvlc_exception_raised(ex) )
+ {
+ libvlc_media_release(p_m);
+ return -1;
+ }
+ }
+
+ libvlc_media_list_lock(libvlc_media_list);
+ libvlc_media_list_add_media(libvlc_media_list,p_m,ex);
+ if( !libvlc_exception_raised(ex) )
+ item = libvlc_media_list_count(libvlc_media_list,ex)-1;
+ libvlc_media_list_unlock(libvlc_media_list);
+ libvlc_media_release(p_m);
+
+ return item;
+}
+
+bool VlcPlugin::playlist_select( int idx, libvlc_exception_t *ex )
+{
+ libvlc_media_t *p_m = NULL;
+
+ libvlc_media_list_lock(libvlc_media_list);
+
+ int count = libvlc_media_list_count(libvlc_media_list,ex);
+ if( libvlc_exception_raised(ex) )
+ goto bad_unlock;
+
+ if( idx<0||idx>=count )
+ goto bad_unlock;
+
+ playlist_index = idx;
+
+ p_m = libvlc_media_list_item_at_index(libvlc_media_list,playlist_index,ex);
+ libvlc_media_list_unlock(libvlc_media_list);
+
+ if( libvlc_exception_raised(ex) )
+ return false;
+
+ if( libvlc_media_player )
+ {
+ libvlc_media_player_release( libvlc_media_player );
+ libvlc_media_player = NULL;
+ }
+
+ libvlc_media_player = libvlc_media_player_new_from_media(p_m,ex);
+ if( libvlc_media_player )
+ set_player_window(ex);
+
+ libvlc_media_release( p_m );
+ return !libvlc_exception_raised(ex);
+
+bad_unlock:
+ libvlc_media_list_unlock(libvlc_media_list);
+ return false;
+}
+
+void VlcPlugin::playlist_delete_item( int idx, libvlc_exception_t *ex )
+{
+ libvlc_media_list_lock(libvlc_media_list);
+ libvlc_media_list_remove_index(libvlc_media_list,idx,ex);
+ libvlc_media_list_unlock(libvlc_media_list);
+}
+
+void VlcPlugin::playlist_clear( libvlc_exception_t *ex )
+{
+ if( libvlc_media_list )
+ libvlc_media_list_release(libvlc_media_list);
+ libvlc_media_list = libvlc_media_list_new(getVLC(),ex);
+}
+
+int VlcPlugin::playlist_count( libvlc_exception_t *ex )
+{
+ int items_count = 0;
+ libvlc_media_list_lock(libvlc_media_list);
+ items_count = libvlc_media_list_count(libvlc_media_list,ex);
+ libvlc_media_list_unlock(libvlc_media_list);
+ return items_count;
+}
+
+void VlcPlugin::toggle_fullscreen( libvlc_exception_t *ex )
+{
+ if( playlist_isplaying(ex) )
+ libvlc_toggle_fullscreen(libvlc_media_player,ex);
+}
+void VlcPlugin::set_fullscreen( int yes, libvlc_exception_t *ex )
+{
+ if( playlist_isplaying(ex) )
+ libvlc_set_fullscreen(libvlc_media_player,yes,ex);
+}
+int VlcPlugin::get_fullscreen( libvlc_exception_t *ex )
+{
+ int r = 0;
+ if( playlist_isplaying(ex) )
+ r = libvlc_get_fullscreen(libvlc_media_player,ex);
+ return r;
+}
+
+int VlcPlugin::player_has_vout( libvlc_exception_t *ex )
+{
+ int r = 0;
+ if( playlist_isplaying(ex) )
+ r = libvlc_media_player_has_vout(libvlc_media_player, ex);
+ return r;
+}
+