]> git.sesse.net Git - vlc/commitdiff
Sort-by-album patch by Pierre Marc Dumuid
authorClément Stenac <zorglub@videolan.org>
Thu, 15 Sep 2005 17:42:24 +0000 (17:42 +0000)
committerClément Stenac <zorglub@videolan.org>
Thu, 15 Sep 2005 17:42:24 +0000 (17:42 +0000)
THANKS
include/vlc_playlist.h
modules/gui/wxwidgets/playlist.cpp
src/playlist/sort.c
src/playlist/view.c

diff --git a/THANKS b/THANKS
index dada15f94ef8090dd5cb3ada0b21b23bcd0f39e6..cbf020b9a7a8625044b058305a4614f3a01c1352 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -34,7 +34,7 @@ Colin Simmonds <colin_simmonds at Mac.lover.org> - compile fix for Mac OS X
 Damian Ivereigh <damian at cisco.com> - ac3dec uninitialized data structure fix
 Damien Fouilleul <damien.fouilleul at laposte.net> - DirectShow input improvements
 Daniel Fischer <dan at subsignal dot org> - Shoutcast output support
-Daniel Stränger <vlc at schmaller d0t de> - M3U improvements
+Daniel Stränger <vlc at schmaller d0t de> - M3U and playlist improvements
 David Kennedy <dkennedy at tinytoad.com> - X11 fullscreen patch
 David Weber <david_weber at gmx.de> - Mac OS X interface design & graphics (v0.5.0)
 Davor Orel <syntheticamac at yahoo.it> - Mac OS X icons
@@ -89,6 +89,7 @@ Olivier Pomel <pomel at via.ecp.fr> - original VLC code
 Øyvind Kolbu <oyvindk at world-online.no> - FreeBSD patches
 Paul Mackerras <paulus at linuxcare.com.au> - AltiVec IDCT and motion
 Philippe Van Hecke <philippe at belnet dot be> - SAP header hash patch
+Pierre Marc Dumuid <pierre.dumuid at adelaide dot edu dot au> - Playlist patches
 Régis Duchesne <regis at via.ecp.fr> - original VLC code
 Remco Poortinga <poortinga at telin.nl> - IPv6 multicast patch
 Rene Gollent <rgollent at u.arizona.edu> - BeOS interface fix
index 2e4038d5d86de056638a3a982ee2648cf906a96e..aabd612ff6ac0dadfd49356cf3c4f0100bef56e7 100644 (file)
@@ -108,6 +108,7 @@ struct playlist_view_t
 #define VIEW_FIRST_SORTED  4
 #define VIEW_S_AUTHOR 4
 #define VIEW_S_GENRE 5
+#define VIEW_S_ALBUM  6
 
 #define VIEW_LAST_SORTED  10
 
@@ -232,6 +233,7 @@ struct playlist_add_t
 #define SORT_RANDOM 5
 #define SORT_DURATION 6
 #define SORT_TITLE_NUMERIC 7
+#define SORT_ALBUM 8
 
 #define ORDER_NORMAL 0
 #define ORDER_REVERSE 1
@@ -351,6 +353,7 @@ VLC_EXPORT( int, playlist_ItemAddOption, (playlist_item_t *, const char *) );
 #define playlist_SortID(p, i) playlist_Sort( p, SORT_ID, i)
 #define playlist_SortTitle(p, i) playlist_Sort( p, SORT_TITLE, i)
 #define playlist_SortAuthor(p, i) playlist_Sort( p, SORT_AUTHOR, i)
+#define playlist_SortAlbum(p, i) playlist_Sort( p, SORT_ALBUM, i)
 #define playlist_SortGroup(p, i) playlist_Sort( p, SORT_GROUP, i)
 VLC_EXPORT( int,  playlist_Sort, ( playlist_t *, int, int) );
 VLC_EXPORT( int,  playlist_Move, ( playlist_t *, int, int ) );
index 739a9a3899fcfaea1e7d7e3637eaf49796f6c7f8..ade945fd689ae10c0512448ba2b79fdf957486a0 100644 (file)
@@ -1219,6 +1219,8 @@ wxMenu * Playlist::ViewMenu()
                            wxU(_("Normal") ) );
     p_view_menu->Append( FirstView_Event + VIEW_S_AUTHOR,
                            wxU(_("Sorted by artist") ) );
+    p_view_menu->Append( FirstView_Event + VIEW_S_ALBUM,
+                           wxU(_("Sorted by Album") ) );
 
     return p_view_menu;
 }
index ad1640001c68cb07939928c7bcee1e119d8e60b3..43ad2dcab501fbd0de808922b082ddd7e5bd2daf 100644 (file)
@@ -40,7 +40,7 @@ int playlist_ItemArraySort( playlist_t *p_playlist, int i_items,
 /**
  * Sort the playlist.
  * \param p_playlist the playlist
- * \param i_mode: SORT_ID, SORT_TITLE, SORT_AUTHOR, SORT_RANDOM
+ * \param i_mode: SORT_ID, SORT_TITLE, SORT_AUTHOR, SORT_ALBUM, SORT_RANDOM
  * \param i_type: ORDER_NORMAL or ORDER_REVERSE (reversed order)
  * \return VLC_SUCCESS on success
  */
@@ -86,7 +86,7 @@ int playlist_Sort( playlist_t * p_playlist , int i_mode, int i_type )
  *
  * \param p_playlist the playlist
  * \param p_node the node to sort
- * \param i_mode: SORT_ID, SORT_TITLE, SORT_AUTHOR, SORT_RANDOM
+ * \param i_mode: SORT_ID, SORT_TITLE, SORT_AUTHOR, SORT_ALBUM, SORT_RANDOM
  * \param i_type: ORDER_NORMAL or ORDER_REVERSE (reversed order)
  * \return VLC_SUCCESS on success
  */
@@ -110,7 +110,7 @@ int playlist_NodeSort( playlist_t * p_playlist , playlist_item_t *p_node,
  *
  * \param p_playlist the playlist
  * \param p_node the node to sort
- * \param i_mode: SORT_ID, SORT_TITLE, SORT_AUTHOR, SORT_RANDOM
+ * \param i_mode: SORT_ID, SORT_TITLE, SORT_AUTHOR, SORT_ALBUM, SORT_RANDOM
  * \param i_type: ORDER_NORMAL or ORDER_REVERSE (reversed order)
  * \return VLC_SUCCESS on success
  */
@@ -226,6 +226,49 @@ int playlist_ItemArraySort( playlist_t *p_playlist, int i_items,
                     i_test = strcmp( psz_b, psz_a );
                 }
             }
+            else if( i_mode == SORT_ALBUM )
+           {
+                char *psz_a = vlc_input_item_GetInfo(
+                                 &pp_items[i]->input,
+                                 _( "Meta-information"), _("Album/movie/show title") );
+                char *psz_b = vlc_input_item_GetInfo(
+                                 &pp_items[i_small]->input,
+                                 _( "Meta-information"), _("Album/movie/show title") );
+                if( pp_items[i]->i_children == -1 &&
+                    pp_items[i_small]->i_children >= 0 )
+                {
+                    i_test = 1;
+                }
+                else if( pp_items[i]->i_children >= 0 &&
+                         pp_items[i_small]->i_children == -1 )
+                {
+                    i_test = -1;
+                }
+                // both are nodes
+                else if( pp_items[i]->i_children >= 0 &&
+                         pp_items[i_small]->i_children >= 0 )
+                {
+                    i_test = strcasecmp( pp_items[i]->input.psz_name,
+                                         pp_items[i_small]->input.psz_name );
+                }
+                else if( psz_a == NULL && psz_b != NULL )
+                {
+                    i_test = 1;
+                }
+                else if( psz_a != NULL && psz_b == NULL )
+                {
+                    i_test = -1;
+                }
+                else if( psz_a == NULL && psz_b == NULL )
+                {
+                    i_test = strcasecmp( pp_items[i]->input.psz_name,
+                                         pp_items[i_small]->input.psz_name );
+                }
+                else
+                {
+                    i_test = strcmp( psz_b, psz_a );
+                }
+           }
             else if( i_mode == SORT_TITLE_NODES_FIRST )
             {
                 /* Alphabetic sort, all nodes first */
@@ -284,6 +327,11 @@ int playlist_NodeGroup( playlist_t * p_playlist , int i_view,
             psz_search = vlc_input_item_GetInfo( &pp_items[i]->input,
                             _("Meta-information"), _( "Artist" ) );
         }
+        else if ( i_mode == SORT_ALBUM )
+        {
+            psz_search = vlc_input_item_GetInfo( &pp_items[i]->input,
+                            _("Meta-information"), _( "Album/movie/show title" ) );
+        }
         else if ( i_mode == SORT_GENRE )
         {
             psz_search = vlc_input_item_GetInfo( &pp_items[i]->input,
index 55adf0769a7acb262562fecee26c3d2abd0fb5d6..3ae05fdc732d0d2d0e6aeee84b34a18639659bba 100644 (file)
@@ -187,6 +187,7 @@ int playlist_ViewUpdate( playlist_t *p_playlist, int i_view)
         switch( i_view )
         {
             case VIEW_S_AUTHOR: i_sort_type = SORT_AUTHOR;break;
+            case VIEW_S_ALBUM: i_sort_type = SORT_ALBUM;break;
             case VIEW_S_GENRE: i_sort_type = SORT_GENRE;break;
             default: i_sort_type = SORT_AUTHOR;
         }