]> git.sesse.net Git - vlc/commitdiff
Fix CDDA and a corner-case in playlist handling
authorClément Stenac <zorglub@videolan.org>
Thu, 25 May 2006 19:38:45 +0000 (19:38 +0000)
committerClément Stenac <zorglub@videolan.org>
Thu, 25 May 2006 19:38:45 +0000 (19:38 +0000)
configure.ac
modules/access/cdda.c
src/playlist/control.c
src/playlist/engine.c

index 4c95aa42b10720ec30c40553fc9c3b60eeca05fb..146a3092bbea297e660e785b355bee77711cf5bf 100644 (file)
@@ -5494,6 +5494,7 @@ AC_CONFIG_FILES([
   modules/gui/pda/Makefile
   modules/gui/macosx/Makefile
   modules/gui/qnx/Makefile
+  modules/gui/qt4/Makefile
   modules/gui/skins2/Makefile
   modules/gui/wxwidgets/Makefile
   modules/gui/wince/Makefile
index 30a5d959e8833b7e8a84eabe6331234e95c72fb7..76cb40991ee98a53429d2088aeed82d5a80c9ba6 100644 (file)
@@ -235,7 +235,7 @@ static int Open( vlc_object_t *p_this )
             if( !p_item )
             {
                 msg_Dbg( p_playlist, "unable to find item in playlist");
-               return -1;
+                return -1;
             }
             b_play = VLC_FALSE;
         }
@@ -291,8 +291,9 @@ static int Open( vlc_object_t *p_this )
 
     if( b_play )
     {
-        playlist_Control( p_playlist, PLAYLIST_VIEWPLAY,
-                          p_playlist->status.p_item, NULL );
+          playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, 1242,
+                            p_playlist->request.p_node, NULL );
+//        playlist_Play( p_playlist );
     }
 
     if( p_playlist ) vlc_object_release( p_playlist );
@@ -535,6 +536,7 @@ static int GetTracks( access_t *p_access, vlc_bool_t b_separate,
     access_sys_t *p_sys = p_access->p_sys;
     int i;
     input_item_t *p_input_item;
+    playlist_item_t *p_item_in_category;
     char *psz_name;
     p_sys->i_titles = ioctl_GetTracksMap( VLC_OBJECT(p_access),
                                           p_sys->vcddev, &p_sys->p_sectors );
@@ -551,10 +553,7 @@ static int GetTracks( access_t *p_access, vlc_bool_t b_separate,
 
     if( b_separate )
     {
-        if( p_parent->i_children == -1 )
-        {
-            playlist_LockItemToNode( p_playlist, p_parent );
-        }
+        p_item_in_category = playlist_LockItemToNode( p_playlist, p_parent );
         psz_name = strdup( "Audio CD" );
         vlc_mutex_lock( &p_playlist->object_lock );
         playlist_ItemSetName( p_parent, psz_name );
@@ -648,8 +647,8 @@ static int GetTracks( access_t *p_access, vlc_bool_t b_separate,
                 }
             }
 #endif
-            playlist_BothAddInput( p_playlist, p_input_item, p_parent,
-                                   PLAYLIST_APPEND, PLAYLIST_END );
+            playlist_AddWhereverNeeded( p_playlist, p_input_item, p_parent,
+                               p_item_in_category, VLC_FALSE, PLAYLIST_APPEND );
             free( psz_uri ); free( psz_opt ); free( psz_name );
         }
     }
index aec26adae516bf8ba947b604be5eaaf666098068..9e453490c4c1a19deea22e83dc4d23c03d8e9d33 100644 (file)
@@ -113,10 +113,14 @@ int PlaylistVAControl( playlist_t * p_playlist, int i_query, va_list args )
         p_item = (playlist_item_t *)va_arg( args, playlist_item_t * );
         if ( p_node == NULL )
         {
-            p_playlist->status.i_status = PLAYLIST_STOPPED;
-            p_playlist->request.b_request = VLC_TRUE;
-            msg_Err( p_playlist, "null node" );
-            return VLC_SUCCESS;
+            p_node = p_playlist->status.p_node;
+            if( !p_node )
+            {
+                p_playlist->status.i_status = PLAYLIST_STOPPED;
+                p_playlist->request.b_request = VLC_TRUE;
+                msg_Err( p_playlist, "null node" );
+                return VLC_SUCCESS;
+            }
         }
         p_playlist->request.i_status = PLAYLIST_RUNNING;
         p_playlist->request.i_skip = 0;
index 8be880dd37b05a5dcc15633414bbdb3293e911c0..a094dbb42616520f813773a28884d00d91c7ac59 100644 (file)
@@ -231,6 +231,8 @@ void playlist_MainLoop( playlist_t *p_playlist )
                 & PLAYLIST_REMOVE_FLAG )
             {
                  playlist_ItemDelete( p_playlist->status.p_item );
+                 if( p_playlist->request.p_item == p_playlist->status.p_item )
+                     p_playlist->request.p_item = NULL;
                  p_playlist->status.p_item = NULL;
             }