]> git.sesse.net Git - vlc/commitdiff
Use the correct meta data to sort the playlist.
authorRémi Duraffort <ivoire@via.ecp.fr>
Tue, 4 Mar 2008 00:45:24 +0000 (01:45 +0100)
committerRémi Duraffort <ivoire@via.ecp.fr>
Tue, 4 Mar 2008 00:47:01 +0000 (01:47 +0100)
The sorting is still strange (wrong ?) but the sort is done on the right meta data.

include/vlc_playlist.h
modules/gui/qt4/components/playlist/playlist_model.cpp
src/playlist/sort.c

index e9033674d772e8729f1206e611ccf947c0d0b4ac..9e8321139d4f6d5b991e4c0520984f2bbe965a82 100644 (file)
@@ -259,6 +259,9 @@ struct playlist_add_t
 #define SORT_DURATION 6
 #define SORT_TITLE_NUMERIC 7
 #define SORT_ALBUM 8
+#define SORT_TRACK_NUMBER 9
+#define SORT_DESCRIPTION 10
+#define SORT_RATING 11
 
 #define ORDER_NORMAL 0
 #define ORDER_REVERSE 1
index 46ffe0aa71d3764cdd1907bbc0dbd27568371123..53d73d21107ead8790dcd44012555fed5dda4ffe 100644 (file)
@@ -715,18 +715,48 @@ void PLModel::doDeleteItem( PLItem *item, QModelIndexList *fullList )
 /******* Volume III: Sorting and searching ********/
 void PLModel::sort( int column, Qt::SortOrder order )
 {
+    int i_index = -1;
+    int i_flag = 0;
+
+#define CHECK_COLUMN( meta )                        \
+{                                                   \
+    if( ( shownFlags() & VLC_META_ENGINE_##meta ) ) \
+        i_index++;                                  \
+    if( column == i_index )                         \
+    {                                               \
+        i_flag = VLC_META_ENGINE_##meta;            \
+        goto next;                                  \
+    }                                               \
+}
+    CHECK_COLUMN( TITLE );
+    CHECK_COLUMN( DURATION );
+    CHECK_COLUMN( ARTIST );
+    CHECK_COLUMN( GENRE );
+    CHECK_COLUMN( COLLECTION );
+    CHECK_COLUMN( SEQ_NUM );
+    CHECK_COLUMN( DESCRIPTION );
+    CHECK_COLUMN( RATING );
+
+#undef CHECK_COLUMN;
+
+next:
     PL_LOCK;
     {
         playlist_item_t *p_root = playlist_ItemGetById( p_playlist,
                                                         rootItem->i_id,
                                                         VLC_TRUE );
         int i_mode;
-        switch( column )
+        switch( i_flag )
         {
-        case 0: i_mode = SORT_TITLE_NODES_FIRST;break;
-        case 1: i_mode = SORT_DURATION; break;
-        case 2: i_mode = SORT_ARTIST;break;
-        default: i_mode = SORT_TITLE_NODES_FIRST; break;
+        case VLC_META_ENGINE_TITLE:      i_mode = SORT_TITLE_NODES_FIRST;break;
+        case VLC_META_ENGINE_DURATION:   i_mode = SORT_DURATION;         break;
+        case VLC_META_ENGINE_ARTIST:     i_mode = SORT_ARTIST;           break;
+        case VLC_META_ENGINE_GENRE:      i_mode = SORT_GENRE;            break;
+        case VLC_META_ENGINE_COLLECTION: i_mode = SORT_ALBUM;            break;
+        case VLC_META_ENGINE_SEQ_NUM:    i_mode = SORT_TRACK_NUMBER;     break;
+        case VLC_META_ENGINE_DESCRIPTION:i_mode = SORT_DESCRIPTION;      break;
+        case VLC_META_ENGINE_RATING:     i_mode = SORT_RATING;           break;
+        default:                         i_mode = SORT_TITLE_NODES_FIRST;break;
         }
         if( p_root )
         {
index 7d57921b856208924d80f06c08795ae052c898f5..c6ddbd8d622c0d536880a6f72b91eaa3b4c05ff2 100644 (file)
@@ -115,7 +115,7 @@ static int playlist_ItemArraySort( playlist_t *p_playlist, int i_items,
     free( psz_i ); \
     free( psz_ismall ); \
 }
+
 
 #define DO_META_SORT( node ) { \
     char *psz_a = input_item_GetMeta( pp_items[i]->p_input, vlc_meta_##node ); \
@@ -179,10 +179,26 @@ static int playlist_ItemArraySort( playlist_t *p_playlist, int i_items,
             {
                 DO_META_SORT( Artist );
             }
+            else if( i_mode == SORT_GENRE )
+            {
+                DO_META_SORT( Genre );
+            }
             else if( i_mode == SORT_ALBUM )
             {
                 DO_META_SORT( Album );
             }
+            else if( i_mode == SORT_TRACK_NUMBER )
+            {
+                DO_META_SORT( TrackNumber );
+            }
+            else if( i_mode == SORT_DESCRIPTION )
+            {
+                DO_META_SORT( Description );
+            }
+            else if( i_mode == SORT_RATING )
+            {
+                DO_META_SORT( Rating );
+            }
             else if( i_mode == SORT_TITLE_NODES_FIRST )
             {
                 /* Alphabetic sort, all nodes first */