X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fplaylist%2Fsort.c;h=5cbf2ac370fc1bd7444326b0976a3f3311281b4b;hb=29ab3b29df89fcd92973a404f2d8495039853899;hp=e9d1e43482f2b8ca16e8a047aad2b45718e6fb39;hpb=832f2aa82f23ab4c481e3457dddd427eb097d66f;p=vlc diff --git a/src/playlist/sort.c b/src/playlist/sort.c index e9d1e43482..5cbf2ac370 100644 --- a/src/playlist/sort.c +++ b/src/playlist/sort.c @@ -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; @@ -119,10 +141,8 @@ static int playlist_cmp(const void *first, const void *second) { #define META_STRCASECMP_NAME( ) { \ - char *psz_i = input_item_GetTitle( (*(playlist_item_t **)first)->p_input ); \ - char *psz_ismall = input_item_GetTitle( (*(playlist_item_t **)second)->p_input ); \ - if(EMPTY_STR(psz_i)) {free(psz_i); psz_i = input_item_GetName( (*(playlist_item_t **)first)->p_input ); }\ - if(EMPTY_STR(psz_ismall)) {free(psz_ismall); psz_ismall = input_item_GetName( (*(playlist_item_t **)second)->p_input ); }\ + char *psz_i = input_item_GetTitleFbName( (*(playlist_item_t **)first)->p_input ); \ + char *psz_ismall = input_item_GetTitleFbName( (*(playlist_item_t **)second)->p_input ); \ if( psz_i != NULL && psz_ismall != NULL ) i_test = strcasecmp( psz_i, psz_ismall ); \ else if ( psz_i == NULL && psz_ismall != NULL ) i_test = 1; \ else if ( psz_ismall == NULL && psz_i != NULL ) i_test = -1; \ @@ -175,9 +195,10 @@ static int playlist_cmp(const void *first, const void *second) } else if( sort_mode == SORT_TITLE_NUMERIC ) { - char *psz_i = input_item_GetName( (*(playlist_item_t **)first)->p_input ); - char *psz_ismall = - input_item_GetName( (*(playlist_item_t **)second)->p_input ); + char *psz_i = input_item_GetTitleFbName( + (*(playlist_item_t **)first)->p_input ); + char *psz_ismall = input_item_GetTitleFbName( + (*(playlist_item_t **)second)->p_input ); i_test = atoi( psz_i ) - atoi( psz_ismall ); free( psz_i ); free( psz_ismall );