]> git.sesse.net Git - vlc/commitdiff
Fix a bug when sorting the playlist:
authorRémi Duraffort <ivoire@videolan.org>
Sun, 17 May 2009 20:18:08 +0000 (22:18 +0200)
committerRémi Duraffort <ivoire@videolan.org>
Sun, 17 May 2009 20:46:12 +0000 (22:46 +0200)
Actually sort is well done but when the user ask for the next/previous item in
the playlist, it will get the one without the sort and not the right
previous/next item.

This is caused by the fact that the table which describe previous/next isn't
rebuilded after a call to the sort function. This commit force the rebuild to
be done (b_reset_currently_playing = true)

src/playlist/sort.c

index b6e59f28dd97103eb6a3ed99cfdb59b09f020c33..5cbf2ac370fc1bd7444326b0976a3f3311281b4b 100644 (file)
@@ -54,32 +54,54 @@ static int playlist_NodeSort( playlist_t * p_playlist , playlist_item_t *p_node,
 }
 
 /**
- * Sort a node recursively.
- *
- * This function must be entered with the playlist lock !
- *
+ * Sort a node recursively
  * \param p_playlist the playlist
  * \param p_node the node to sort
  * \param i_mode: SORT_ID, SORT_TITLE, SORT_ARTIST, SORT_ALBUM, SORT_RANDOM
  * \param i_type: ORDER_NORMAL or ORDER_REVERSE (reversed order)
  * \return VLC_SUCCESS on success
  */
-int playlist_RecursiveNodeSort( playlist_t *p_playlist, playlist_item_t *p_node,
-                                int i_mode, int i_type )
+static int recursiveNodeSort( playlist_t *p_playlist, playlist_item_t *p_node,
+                              int i_mode, int i_type )
 {
     int i;
+    /* Sort the current node */
     playlist_NodeSort( p_playlist, p_node, i_mode, i_type );
+
+    /* And all the children */
     for( i = 0 ; i< p_node->i_children; i++ )
     {
         if( p_node->pp_children[i]->i_children != -1 )
         {
-            playlist_RecursiveNodeSort( p_playlist, p_node->pp_children[i],
-                                        i_mode,i_type );
+            recursiveNodeSort( p_playlist, p_node->pp_children[i],
+                               i_mode, i_type );
         }
     }
     return VLC_SUCCESS;
 }
 
+
+/**
+ * Sort a node recursively.
+ *
+ * This function must be entered with the playlist lock !
+ *
+ * \param p_playlist the playlist
+ * \param p_node the node to sort
+ * \param i_mode: SORT_ID, SORT_TITLE, SORT_ARTIST, SORT_ALBUM, SORT_RANDOM
+ * \param i_type: ORDER_NORMAL or ORDER_REVERSE (reversed order)
+ * \return VLC_SUCCESS on success
+ */
+int playlist_RecursiveNodeSort( playlist_t *p_playlist, playlist_item_t *p_node,
+                                int i_mode, int i_type )
+{
+    /* Ask the playlist to reset as we are changing the order */
+    pl_priv(p_playlist)->b_reset_currently_playing = true;
+
+    /* Do the real job recursively */
+    return recursiveNodeSort( p_playlist, p_node, i_mode, i_type );
+}
+
 static int sort_mode = 0;
 static int sort_type = 0;