diff --git a/core/playlists/artist.c b/core/playlists/artist.c index 39429ae9..61f422d6 100644 --- a/core/playlists/artist.c +++ b/core/playlists/artist.c @@ -17,7 +17,8 @@ static struct playlist_ops pl_artist_ops = { static struct playlist *__artist_pl_alloc(struct artist *artist) { return playlist_generic_alloc(artist->ar_name, PL_ARTIST, - artist_index(artist), &pl_artist_ops); + artist_index(artist), &pl_artist_ops, + 3, COMPARE_YEAR, COMPARE_ALBUM, COMPARE_TRACK); } static bool __artist_pl_add(void *data) diff --git a/core/playlists/generic.c b/core/playlists/generic.c index b9e6db3e..0f5625ef 100644 --- a/core/playlists/generic.c +++ b/core/playlists/generic.c @@ -38,10 +38,10 @@ void playlist_generic_set_callbacks(struct playlist_callbacks *cb) callbacks = cb; } -void playlist_generic_init(struct playlist *playlist, unsigned int nargs, ...) +static void __playlist_generic_vinit(struct playlist *playlist, + unsigned int nargs, va_list argp) { unsigned int i; - va_list argp; if (!playlist) return; @@ -53,9 +53,16 @@ void playlist_generic_init(struct playlist *playlist, unsigned int nargs, ...) playlist->pl_sort = NULL; playlist->pl_search = NULL; - va_start(argp, nargs); for (i = 0; i < nargs; i++) playlist_generic_sort(playlist, va_arg(argp, unsigned int)); +} + +void playlist_generic_init(struct playlist *playlist, unsigned int nargs, ...) +{ + va_list argp; + + va_start(argp, nargs); + __playlist_generic_vinit(playlist, nargs, argp); va_end(argp); } @@ -71,19 +78,23 @@ void playlist_generic_deinit(struct playlist *playlist) } struct playlist *playlist_generic_alloc(gchar *name, enum playlist_type_t type, - unsigned int id, struct playlist_ops *ops) + unsigned int id, struct playlist_ops *ops, + unsigned int nargs, ...) { struct playlist *playlist = g_malloc(sizeof(struct playlist)); + va_list argp; playlist->pl_name = name; playlist->pl_type = type; playlist->pl_id = id; playlist->pl_ops = ops; - playlist_generic_init(playlist, 4, COMPARE_ARTIST, COMPARE_YEAR, - COMPARE_ALBUM, COMPARE_TRACK); + va_start(argp, nargs); + __playlist_generic_vinit(playlist, nargs, argp); if (callbacks) callbacks->pl_cb_alloc(playlist); + va_end(argp); + return playlist; } diff --git a/core/playlists/library.c b/core/playlists/library.c index ed75272d..8bb38501 100644 --- a/core/playlists/library.c +++ b/core/playlists/library.c @@ -22,7 +22,9 @@ static struct playlist_ops pl_library_ops; static struct playlist *__lib_pl_alloc(struct library *library) { return playlist_generic_alloc(library->li_path, PL_LIBRARY, - library_index(library), &pl_library_ops); + library_index(library), &pl_library_ops, + 4, COMPARE_ARTIST, COMPARE_YEAR, + COMPARE_ALBUM, COMPARE_TRACK); } static bool __lib_pl_add(void *data) diff --git a/include/core/playlists/generic.h b/include/core/playlists/generic.h index 5bc2b5b5..8cfe8ad4 100644 --- a/include/core/playlists/generic.h +++ b/include/core/playlists/generic.h @@ -47,7 +47,8 @@ void playlist_generic_deinit(struct playlist *); /* Generic playlist alloc function. */ struct playlist *playlist_generic_alloc(gchar *, enum playlist_type_t, - unsigned int, struct playlist_ops *); + unsigned int, struct playlist_ops *, + unsigned int, ...); /* Generic playlist free function. */ void playlist_generic_free(struct playlist *);