diff --git a/core/playlists/generic.c b/core/playlists/generic.c index aeba78c1..c3c3bc11 100644 --- a/core/playlists/generic.c +++ b/core/playlists/generic.c @@ -50,15 +50,21 @@ void playlist_generic_init(struct playlist *playlist) } } -void playlist_generic_init_sorted(struct playlist *playlist) +void playlist_generic_init_sorted(struct playlist *playlist, + unsigned int nargs, ...) { - if (playlist) { - playlist_generic_init(playlist); - playlist_generic_sort(playlist, COMPARE_ARTIST); - playlist_generic_sort(playlist, COMPARE_YEAR); - playlist_generic_sort(playlist, COMPARE_ALBUM); - playlist_generic_sort(playlist, COMPARE_TRACK); - } + unsigned int i; + va_list argp; + + if (!playlist) + return; + + playlist_generic_init(playlist); + + va_start(argp, nargs); + for (i = 0; i < nargs; i++) + playlist_generic_sort(playlist, va_arg(argp, unsigned int)); + va_end(argp); } void playlist_generic_deinit(struct playlist *playlist) @@ -82,7 +88,8 @@ struct playlist *playlist_generic_alloc(gchar *name, enum playlist_type_t type, playlist->pl_id = id; playlist->pl_ops = ops; - playlist_generic_init_sorted(playlist); + playlist_generic_init_sorted(playlist, 4, COMPARE_ARTIST, COMPARE_YEAR, + COMPARE_ALBUM, COMPARE_TRACK); if (callbacks) callbacks->pl_cb_alloc(playlist); return playlist; diff --git a/core/playlists/system.c b/core/playlists/system.c index 58e7d718..c15d7968 100644 --- a/core/playlists/system.c +++ b/core/playlists/system.c @@ -423,7 +423,9 @@ void pl_system_init(void) sys_pl_update(playlist); case SYS_PL_FAVORITES: case SYS_PL_HIDDEN: - playlist_generic_init_sorted(playlist); + playlist_generic_init_sorted(playlist, 4, + COMPARE_ARTIST, COMPARE_YEAR, + COMPARE_ALBUM, COMPARE_TRACK); break; } } diff --git a/include/core/playlists/generic.h b/include/core/playlists/generic.h index 4d167047..54bfe564 100644 --- a/include/core/playlists/generic.h +++ b/include/core/playlists/generic.h @@ -41,7 +41,7 @@ void playlist_generic_set_callbacks(struct playlist_callbacks *); /* Generic playlist init functions. */ void playlist_generic_init(struct playlist *); -void playlist_generic_init_sorted(struct playlist *); +void playlist_generic_init_sorted(struct playlist *, unsigned int, ...); /* Generic playlist deinit function. */ void playlist_generic_deinit(struct playlist *); diff --git a/tests/core/playlist.c b/tests/core/playlist.c index 7ba779bd..8633e5a6 100644 --- a/tests/core/playlist.c +++ b/tests/core/playlist.c @@ -50,7 +50,7 @@ static void test_null() playlist_generic_free(NULL); playlist_generic_init(NULL); - playlist_generic_init_sorted(NULL); + playlist_generic_init_sorted(NULL, 0); playlist_generic_deinit(NULL); g_assert_null(playlist_lookup(PL_MAX_TYPE, "NULL")); @@ -202,7 +202,8 @@ static void test_sorting() struct track *track; unsigned int i; - playlist_generic_init_sorted(&p); + playlist_generic_init_sorted(&p, 4, COMPARE_ARTIST, COMPARE_YEAR, + COMPARE_ALBUM, COMPARE_TRACK); g_assert_cmpuint(g_slist_length(p.pl_sort), ==, 4); playlist_clear_sort(&p); g_assert_cmpuint(g_slist_length(p.pl_sort), ==, 0);