]> git.sesse.net Git - vlc/commitdiff
Fix an issu when sorting with the track number : the track numbers were in alphabetic...
authorRémi Duraffort <ivoire@via.ecp.fr>
Tue, 4 Mar 2008 18:22:16 +0000 (19:22 +0100)
committerRémi Duraffort <ivoire@via.ecp.fr>
Tue, 4 Mar 2008 18:25:06 +0000 (19:25 +0100)
src/playlist/sort.c

index 7478f1eb7c952c42d6202c6745253ff04946685e..c81a2ecb49dad8e1914a4831b095a67c95d53447 100644 (file)
@@ -117,7 +117,7 @@ static int playlist_ItemArraySort( playlist_t *p_playlist, int i_items,
 }
 
 
-#define DO_META_SORT( node ) { \
+#define DO_META_SORT_ADV( node, integer ) { \
     char *psz_a = input_item_GetMeta( pp_items[i]->p_input, vlc_meta_##node ); \
     char *psz_b = input_item_GetMeta( pp_items[i_small]->p_input, vlc_meta_##node ); \
     /* Nodes go first */ \
@@ -144,11 +144,13 @@ static int playlist_ItemArraySort( playlist_t *p_playlist, int i_items,
     } \
     else \
     { \
-        i_test = strcmp( psz_a, psz_b ); \
+        if( !integer ) i_test = strcmp( psz_a, psz_b ); \
+        else           i_test = atoi( psz_a ) - atoi( psz_b ); \
     } \
     free( psz_a ); \
     free( psz_b ); \
 }
+#define DO_META_SORT( node ) DO_META_SORT_ADV( node, VLC_FALSE )
 
     for( i_position = 0; i_position < i_items -1 ; i_position ++ )
     {
@@ -189,7 +191,7 @@ static int playlist_ItemArraySort( playlist_t *p_playlist, int i_items,
             }
             else if( i_mode == SORT_TRACK_NUMBER )
             {
-                DO_META_SORT( TrackNumber );
+                DO_META_SORT_ADV( TrackNumber, VLC_TRUE );
             }
             else if( i_mode == SORT_DESCRIPTION )
             {
@@ -234,5 +236,8 @@ static int playlist_ItemArraySort( playlist_t *p_playlist, int i_items,
         pp_items[i_position] = pp_items[i_small];
         pp_items[i_small] = p_temp;
     }
+#undef DO_META_SORT
+#undef DO_META_SORT_ADV
+
     return VLC_SUCCESS;
 }