core/playlist: playlist_add() uses a playlist-level function pointer

Rather than going through playlist-type operations.  Additionally, I
take this opportunity to change playlist_add() to take a playlist struct
directly.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2016-09-10 12:08:11 -04:00
parent 066027ecb6
commit 1b9cdf5a5c
21 changed files with 165 additions and 153 deletions

View File

@ -60,7 +60,7 @@ static struct track *__audio_load_basic(struct track *track, GstState state)
static struct track *__audio_load(struct track *track, GstState state)
{
if (__audio_load_basic(track, state))
playlist_add(PL_SYSTEM, "History", track);
playlist_add(playlist_get(PL_SYSTEM, "History"), track);
return track;
}

View File

@ -85,16 +85,17 @@ bool playlist_delete(struct playlist *playlist)
return ret;
}
bool playlist_add(enum playlist_type_t type, const gchar *name,
struct track *track)
bool playlist_add(struct playlist *playlist, struct track *track)
{
bool ret;
if (!track)
if (!track || !playlist || !playlist->pl_ops->pl_add)
return false;
ret = playlist_types[type]->pl_add_track(name, track);
if (type == PL_SYSTEM && string_match(name, "Queued Tracks"))
ret = playlist->pl_ops->pl_add(playlist, track);
if (ret)
playlist_types[playlist->pl_type]->pl_save();
if (playlist == playlist_get(PL_SYSTEM, "Queued Tracks"))
playlist_select(PL_SYSTEM, "Queued Tracks");
return ret;
}

View File

@ -120,7 +120,7 @@ static gchar *pl_artist_get_name(unsigned int id)
return artist ? g_strdup(artist->ar_name) : NULL;
}
static bool pl_artist_add_rm(const gchar *name, struct track *track)
static bool pl_artist_rm(const gchar *name, struct track *track)
{
return false;
}
@ -159,8 +159,7 @@ struct playlist_type pl_artist = {
.pl_get_id = pl_artist_get_id,
.pl_get_name = pl_artist_get_name,
.pl_can_select = pl_artist_can_select,
.pl_add_track = pl_artist_add_rm,
.pl_remove_track = pl_artist_add_rm,
.pl_remove_track = pl_artist_rm,
.pl_update = pl_artist_update,
.pl_set_flag = pl_artist_set_flag,
.pl_sort = pl_artist_sort,

View File

@ -252,7 +252,7 @@ static struct playlist *pl_library_new(const gchar *name)
return library->li_playlist;
}
static bool pl_library_add_rm(const gchar *name, struct track *track)
static bool pl_library_rm(const gchar *name, struct track *track)
{
return false;
}
@ -295,8 +295,7 @@ struct playlist_type pl_library = {
.pl_get_name = pl_library_get_name,
.pl_can_select = pl_library_can_select,
.pl_new = pl_library_new,
.pl_add_track = pl_library_add_rm,
.pl_remove_track = pl_library_add_rm,
.pl_remove_track = pl_library_rm,
.pl_update = pl_library_update,
.pl_set_flag = pl_library_set_flag,
.pl_sort = pl_library_sort,

View File

@ -5,7 +5,7 @@
#include <core/playlists/system.h>
#include <core/string.h>
static bool pl_system_add_track(const gchar *, struct track *);
static struct playlist *pl_system_get_playlist(const gchar *);
static bool pl_system_remove_track(const gchar *, struct track *);
static void pl_system_update(const gchar *);
static inline struct queue *__sys_pl_queue(enum sys_playlist_t);
@ -65,13 +65,6 @@ static void sys_pl_load_full(struct playlist *playlist, struct file *file)
queue_load_tracks(&playlist->pl_queue, file);
}
static bool sys_pl_generic_add(struct playlist *playlist, struct track *track)
{
if (queue_has(__sys_pl_queue(SYS_PL_HIDDEN), track))
return false;
return playlist_generic_add_track(playlist, track);
}
static bool sys_pl_generic_add_front(struct playlist *playlist,
struct track *track)
{
@ -86,6 +79,7 @@ static bool sys_pl_generic_add_front(struct playlist *playlist,
* Favorite tracks playlist operations.
*/
static struct playlist_ops favorites_ops = {
.pl_add = playlist_generic_add_track,
.pl_delete = sys_pl_delete_clear,
};
@ -95,7 +89,6 @@ static struct sys_playlist sys_favorites = {
.spl_save = sys_pl_save_full,
.spl_load = sys_pl_load_full,
.spl_can_select = playlist_generic_can_select,
.spl_add = playlist_generic_add_track,
.spl_remove = playlist_generic_remove_track,
.spl_set_flag = playlist_generic_set_flag,
.spl_sort = playlist_generic_sort,
@ -119,10 +112,17 @@ static bool sys_pl_hidden_add(struct playlist *playlist, struct track *track)
static bool sys_pl_hidden_remove(struct playlist *playlist, struct track *track)
{
bool ret = playlist_generic_remove_track(playlist, track);
pl_system_add_track("Collection", track);
pl_system_add_track("Unplayed", track);
pl_system_add_track("Most Played", track);
pl_system_add_track("Least Played", track);
struct playlist *add;
if (track->tr_count == 0)
add = pl_system_get_playlist("Unplayed");
else if (track->tr_count > track_db_average_plays())
add = pl_system_get_playlist("Most Played");
else
add = pl_system_get_playlist("Least Played");
playlist_generic_add_track(pl_system_get_playlist("Collection"), track);
playlist_generic_add_track(add, track);
return ret;
}
@ -140,6 +140,7 @@ static bool sys_pl_hidden_clear(struct playlist *playlist)
}
static struct playlist_ops hidden_ops = {
.pl_add = sys_pl_hidden_add,
.pl_delete = sys_pl_hidden_clear,
};
@ -149,7 +150,6 @@ static struct sys_playlist sys_hidden = {
.spl_save = sys_pl_save_full,
.spl_load = sys_pl_load_full,
.spl_can_select = playlist_generic_can_select,
.spl_add = sys_pl_hidden_add,
.spl_remove = sys_pl_hidden_remove,
.spl_set_flag = playlist_generic_set_flag,
.spl_sort = playlist_generic_sort,
@ -190,6 +190,7 @@ static void sys_pl_queued_init(struct playlist *playlist,
}
static struct playlist_ops queued_ops = {
.pl_add = playlist_generic_add_track,
.pl_delete = sys_pl_delete_clear,
};
@ -199,7 +200,6 @@ static struct sys_playlist sys_queued = {
.spl_save = sys_pl_save_full,
.spl_load = sys_pl_load_full,
.spl_can_select = playlist_generic_can_select,
.spl_add = playlist_generic_add_track,
.spl_remove = playlist_generic_remove_track,
.spl_set_flag = playlist_generic_set_flag,
.spl_sort = playlist_generic_sort,
@ -231,7 +231,7 @@ static bool sys_pl_collection_can_select(struct playlist *playlist)
static bool sys_pl_collection_update(struct playlist *playlist,
struct track *track)
{
return sys_pl_generic_add(playlist, track) || true;
return sys_pl_generic_add_front(playlist, track) || true;
}
static struct playlist_ops collection_ops;
@ -243,7 +243,6 @@ static struct sys_playlist sys_collection = {
.spl_save = sys_pl_save_partial,
.spl_load = sys_pl_load_partial,
.spl_can_select = sys_pl_collection_can_select,
.spl_add = sys_pl_generic_add,
.spl_remove = playlist_generic_remove_track,
.spl_update = sys_pl_collection_update,
.spl_set_flag = playlist_generic_set_flag,
@ -268,7 +267,9 @@ static bool sys_pl_history_add(struct playlist *playlist, struct track *track)
return true;
}
static struct playlist_ops history_ops;
static struct playlist_ops history_ops = {
.pl_add = sys_pl_history_add,
};
static struct sys_playlist sys_history = {
.spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "History", &history_ops),
@ -276,7 +277,6 @@ static struct sys_playlist sys_history = {
.spl_save = sys_pl_save_partial,
.spl_load = sys_pl_load_partial,
.spl_can_select = playlist_noop_can_select,
.spl_add = sys_pl_history_add,
.spl_remove = playlist_generic_remove_track,
.spl_set_flag = playlist_noop_set_flag,
.spl_sort = playlist_noop_sort,
@ -287,13 +287,6 @@ static struct sys_playlist sys_history = {
/*
* Unplayed tracks playlist operations.
*/
static bool sys_pl_unplayed_add(struct playlist *playlist, struct track *track)
{
if (track->tr_count > 0)
return false;
return sys_pl_generic_add(playlist, track);
}
static bool sys_pl_unplayed_update(struct playlist *playlist,
struct track *track)
{
@ -310,7 +303,6 @@ static struct sys_playlist sys_unplayed = {
.spl_save = sys_pl_save_partial,
.spl_load = sys_pl_load_partial,
.spl_can_select = playlist_generic_can_select,
.spl_add = sys_pl_unplayed_add,
.spl_remove = playlist_generic_remove_track,
.spl_update = sys_pl_unplayed_update,
.spl_set_flag = playlist_generic_set_flag,
@ -322,14 +314,6 @@ static struct sys_playlist sys_unplayed = {
/*
* Most played tracks playlist operations.
*/
static bool sys_pl_most_played_add(struct playlist *playlist, struct track *track)
{
unsigned int average = track_db_average_plays();
if (track->tr_count <= average)
return false;
return sys_pl_generic_add(playlist, track);
}
static bool sys_pl_most_played_update(struct playlist *playlist,
struct track *track)
{
@ -348,7 +332,6 @@ static struct sys_playlist sys_most_played = {
.spl_save = sys_pl_save_partial,
.spl_load = sys_pl_load_partial,
.spl_can_select = playlist_generic_can_select,
.spl_add = sys_pl_most_played_add,
.spl_remove = playlist_generic_remove_track,
.spl_update = sys_pl_most_played_update,
.spl_set_flag = playlist_generic_set_flag,
@ -360,14 +343,6 @@ static struct sys_playlist sys_most_played = {
/*
* Least played tracks playlist operations.
*/
static bool sys_pl_least_played_add(struct playlist *playlist, struct track *track)
{
unsigned int average = track_db_average_plays();
if (!track->tr_count || track->tr_count > average)
return false;
return sys_pl_generic_add(playlist, track);
}
static bool sys_pl_least_played_update(struct playlist *playlist,
struct track *track)
{
@ -386,7 +361,6 @@ static struct sys_playlist sys_least_played = {
.spl_save = sys_pl_save_partial,
.spl_load = sys_pl_load_partial,
.spl_can_select = playlist_generic_can_select,
.spl_add = sys_pl_least_played_add,
.spl_remove = playlist_generic_remove_track,
.spl_update = sys_pl_least_played_update,
.spl_set_flag = playlist_generic_set_flag,
@ -537,19 +511,6 @@ static bool pl_system_can_select(const gchar *name)
return sys_pl ? sys_pl->spl_can_select(&sys_pl->spl_playlist) : false;
}
static bool pl_system_add_track(const gchar *name, struct track *track)
{
struct sys_playlist *sys_pl = __sys_pl_lookup(name);
bool ret = false;
if (sys_pl) {
ret = sys_pl->spl_add(&sys_pl->spl_playlist, track);
if (ret)
__sys_pl_save();
}
return ret;
}
static bool pl_system_remove_track(const gchar *name, struct track *track)
{
struct sys_playlist *sys_pl = __sys_pl_lookup(name);
@ -607,7 +568,6 @@ struct playlist_type pl_system = {
.pl_get_id = pl_system_get_id,
.pl_get_name = pl_system_get_name,
.pl_can_select = pl_system_can_select,
.pl_add_track = pl_system_add_track,
.pl_remove_track = pl_system_remove_track,
.pl_update = pl_system_update,
.pl_set_flag = pl_system_set_flag,
@ -639,8 +599,8 @@ void pl_system_deinit()
void pl_system_new_track(struct track *track)
{
pl_system_add_track("Collection", track);
pl_system_add_track("Unplayed", track);
playlist_generic_add_track(pl_system_get_playlist("Collection"), track);
playlist_generic_add_track(pl_system_get_playlist("Unplayed"), track);
}
void pl_system_delete_track(struct track *track)

View File

@ -82,6 +82,7 @@ static bool pl_user_delete(struct playlist *playlist)
static struct playlist_ops user_ops = {
.pl_add = playlist_generic_add_track,
.pl_delete = pl_user_delete,
};
@ -129,20 +130,6 @@ static struct playlist *pl_user_new(const gchar *name)
return dbe ? &USER_PLAYLIST(dbe)->pl_playlist : NULL;
}
static bool pl_user_add(const gchar *name, struct track *track)
{
struct playlist *playlist = __user_pl_lookup(name);
bool ret = false;
if (playlist) {
ret = playlist_generic_add_track(playlist, track);
if (ret)
pl_user_save();
}
return ret;
}
static bool pl_user_remove(const gchar *name, struct track *track)
{
struct playlist *playlist = __user_pl_lookup(name);
@ -192,7 +179,6 @@ struct playlist_type pl_user = {
.pl_get_name = pl_user_get_name,
.pl_can_select = pl_user_can_select,
.pl_new = pl_user_new,
.pl_add_track = pl_user_add,
.pl_remove_track = pl_user_remove,
.pl_update = pl_user_update,
.pl_set_flag = pl_user_set_flag,

View File

@ -74,7 +74,7 @@ static bool __gui_playlist_erase(struct queue *queue, struct track *track)
switch (type) {
case PL_SYSTEM:
if (string_match(name, "Collection")) {
playlist_add(type, "Hidden", track);
playlist_add(playlist_get(PL_SYSTEM, "Hidden"), track);
break;
} else if (!string_match(name, "Favorites") &&
!string_match(name, "Hidden") &&
@ -113,7 +113,7 @@ static void __gui_playlist_add_selected_to(struct playlist *playlist)
cur = g_list_first(list);
while (cur) {
track = (struct track *)cur->data;
playlist_add(playlist->pl_type, playlist->pl_name, track);
playlist_add(playlist, track);
cur = g_list_next(cur);
}
g_list_free(list);

View File

@ -35,16 +35,18 @@ static bool __gui_pl_system_find_descend_header(GtkTreeIter *iter,
void __gui_pl_system_favorite_toggled(GtkToggleButton *toggle, gpointer data)
{
struct playlist *favorites = playlist_get(PL_SYSTEM, "Favorites");
if (gtk_toggle_button_get_active(toggle))
playlist_add(PL_SYSTEM, "Favorites", audio_cur_track());
playlist_add(favorites, audio_cur_track());
else
playlist_remove(PL_SYSTEM, "Favorites", audio_cur_track());
}
void __gui_pl_system_hide_toggled(GtkToggleButton *toggle, gpointer data)
{
struct playlist *hidden = playlist_get(PL_SYSTEM, "Hidden");
if (gtk_toggle_button_get_active(toggle)) {
if (playlist_add(PL_SYSTEM, "Hidden", audio_cur_track()))
if (playlist_add(hidden, audio_cur_track()))
audio_next();
} else
playlist_remove(PL_SYSTEM, "Hidden", audio_cur_track());

View File

@ -36,7 +36,7 @@ bool playlist_delete(struct playlist *);
/* Called to add a track to a playlist. */
bool playlist_add(enum playlist_type_t, const gchar *, struct track *);
bool playlist_add(struct playlist *, struct track *);
/* Called to remove a track from a playlist. */
bool playlist_remove(enum playlist_type_t, const gchar *, struct track *);

View File

@ -25,7 +25,6 @@ struct sys_playlist {
void (*spl_save)(struct playlist *, struct file *);
void (*spl_load)(struct playlist *, struct file *);
bool (*spl_can_select)(struct playlist *);
bool (*spl_add)(struct playlist *, struct track *);
bool (*spl_remove)(struct playlist *, struct track *);
bool (*spl_update)(struct playlist *, struct track *);
void (*spl_set_flag)(struct playlist *, enum queue_flags, bool);

View File

@ -21,6 +21,9 @@ enum playlist_type_t {
struct playlist_ops {
/* Called to add a track to a playlist. */
bool (*pl_add)(struct playlist *, struct track *);
/* Called to delete a playlist. */
bool (*pl_delete)(struct playlist *);
};
@ -62,9 +65,6 @@ struct playlist_type {
/* Called to create a new playlist. */
struct playlist *(*pl_new)(const gchar *);
/* Called to add a track to the playlist. */
bool (*pl_add_track)(const gchar *, struct track *);
/* Called to remove a track from the playlist. */
bool (*pl_remove_track)(const gchar *, struct track *);

View File

@ -136,9 +136,9 @@ static void test_next()
state_count = 0;
/* First, let's test getting tracks from a temporary queue. */
playlist_add(PL_SYSTEM, "Queued Tracks", track_get(2));
playlist_add(PL_SYSTEM, "Queued Tracks", track_get(1));
playlist_add(PL_SYSTEM, "Queued Tracks", track_get(0));
playlist_add(playlist_get(PL_SYSTEM, "Queued Tracks"), track_get(2));
playlist_add(playlist_get(PL_SYSTEM, "Queued Tracks"), track_get(1));
playlist_add(playlist_get(PL_SYSTEM, "Queued Tracks"), track_get(0));
for (i = 2; i >= 0; i--) {
g_assert_cmpuint(playlist_size(PL_SYSTEM, "Queued Tracks"), ==, i + 1);

View File

@ -11,10 +11,14 @@ static void test_null()
g_assert_null(playlist_new(PL_MAX_TYPE, "NULL"));
g_assert_null(playlist_new(PL_MAX_TYPE, NULL));
g_assert_false(playlist_delete(NULL));
g_assert_false(playlist_add(NULL, NULL));
g_assert_false(playlist_add(NULL, track_get(0)));
}
int main(int argc, char **argv)
{
struct library *library;
int ret;
idle_init_sync();
@ -23,6 +27,9 @@ int main(int argc, char **argv)
playlist_init(NULL);
while (idle_run_task()) {};
library = library_find("tests/Music");
track_add(library, "tests/Music/Hyrule Symphony/01 - Title Theme.ogg");
g_test_init(&argc, &argv, NULL);
g_test_add_func("/Core/Playlist/NULL", test_null);
ret = g_test_run();

View File

@ -20,7 +20,7 @@ void test_artist()
artist = artist_find("Koji Kondo");
g_assert_null(artist->ar_playlist);
g_assert_false(playlist_add(PL_ARTIST, "Koji Kondo", track_get(0)));
g_assert_false(playlist_add(NULL, track_get(0)));
g_assert_false(playlist_select(PL_ARTIST, "Koji Kondo"));
g_assert_false(playlist_select(PL_ARTIST, "Hajime Wakai"));

View File

@ -28,8 +28,9 @@ void test_library()
g_assert_false(playlist_select(PL_LIBRARY, "tests/Music"));
library = library_get(0);
playlist = library->li_playlist;
g_assert_nonnull(library);
g_assert_nonnull(library->li_playlist);
g_assert_nonnull(playlist);
g_assert_cmpuint(playlist_size(PL_LIBRARY, "tests/Music"), ==, 0);
while (idle_run_task()) {};
@ -43,8 +44,8 @@ void test_library()
g_assert_cmpuint(settings_get("core.playlist.cur.id"), ==, 0);
g_assert(playlist_cur() == playlist_get(PL_LIBRARY, "tests/Music"));
g_assert_false(playlist_add(PL_LIBRARY, "tests/Music", track_get(0)));
g_assert_false(playlist_add(PL_LIBRARY, "tests/Music", track_get(1)));
g_assert_false(playlist_add(playlist, track_get(0)));
g_assert_false(playlist_add(playlist, track_get(1)));
g_assert_false(playlist_remove(PL_LIBRARY, "tests/Music", track_get(0)));
g_assert_false(playlist_remove(PL_LIBRARY, "tests/Music", track_get(1)));
@ -59,8 +60,9 @@ void test_library()
g_assert_cmpuint(playlist_size(PL_LIBRARY, "tests/Music"), ==, 48);
g_assert(playlist_get_queue(PL_LIBRARY, "tests/Music"));
g_assert_false(playlist_add(PL_LIBRARY, "tests/Music", track_get(0)));
g_assert_false(playlist_add(PL_LIBRARY, "tests/Music", track_get(1)));
playlist = library->li_playlist;
g_assert_false(playlist_add(playlist, track_get(0)));
g_assert_false(playlist_add(playlist, track_get(1)));
g_assert_false(playlist_remove(PL_LIBRARY, "tests/Music", track_get(0)));
g_assert_false(playlist_remove(PL_LIBRARY, "tests/Music", track_get(1)));
g_assert_cmpuint(playlist_size(PL_LIBRARY, "tests/Music"), ==, 48);
@ -71,7 +73,6 @@ void test_library()
playlist_set_random(PL_LIBRARY, "tests/Music", false);
g_assert_false(playlist_get_random(PL_LIBRARY, "tests/Music"));
playlist = library->li_playlist;
g_assert_cmpuint(g_slist_length(playlist->pl_queue.q_sort), ==, 3);
playlist_sort(PL_LIBRARY, "tests/Music", COMPARE_ARTIST, true);
g_assert_cmpuint(g_slist_length(playlist->pl_queue.q_sort), ==, 1);

View File

@ -30,12 +30,12 @@
playlist_set_random(PL_SYSTEM, name, false); \
g_assert_false(playlist_get_random(PL_SYSTEM, name))
#define __test_playlist_add(name) \
__test_playlist_state(name, 0, false, false); \
g_assert_true( playlist_add(PL_SYSTEM, name, track_get(0))); \
g_assert_false(playlist_add(PL_SYSTEM, name, track_get(0))); \
g_assert_true( playlist_add(PL_SYSTEM, name, track_get(1))); \
g_assert_false(playlist_add(PL_SYSTEM, name, track_get(1))); \
#define __test_playlist_add(name) \
__test_playlist_state(name, 0, false, false); \
g_assert_true( playlist_add(playlist_get(PL_SYSTEM, name), track_get(0))); \
g_assert_false(playlist_add(playlist_get(PL_SYSTEM, name), track_get(0))); \
g_assert_true( playlist_add(playlist_get(PL_SYSTEM, name), track_get(1))); \
g_assert_false(playlist_add(playlist_get(PL_SYSTEM, name), track_get(1))); \
__test_playlist_state(name, 2, true, true)
#define __test_playlist_remove(name) \
@ -51,9 +51,9 @@
__test_playlist_state(name, ex_size, ex_track0, ex_track1)
#define __test_playlist_hide_track(name, ex_size, ex_track0, ex_track1) \
g_assert_true(playlist_add(PL_SYSTEM, "Hidden", track_get(0))); \
g_assert_true(playlist_add(playlist_get(PL_SYSTEM, "Hidden"), track_get(0))); \
__test_playlist_state(name, ex_size, ex_track0, ex_track1); \
g_assert_false(playlist_add(PL_SYSTEM, name, track_get(0)))
g_assert_false(playlist_add(playlist_get(PL_SYSTEM, name), track_get(0)))
#define __test_playlist_unhide_track(name, ex_size, ex_track0, ex_track1) \
g_assert_true(playlist_remove(PL_SYSTEM, "Hidden", track_get(0))); \
@ -90,6 +90,23 @@ do { \
__test_playlist_state(name, ex_size, ex_track0, ex_track1); \
} while (0)
static inline struct playlist *__test_pl_favorites(void)
{ return playlist_get(PL_SYSTEM, "Favorites"); }
static inline struct playlist *__test_pl_hidden(void)
{ return playlist_get(PL_SYSTEM, "Hidden"); }
static inline struct playlist *__test_pl_queued(void)
{ return playlist_get(PL_SYSTEM, "Queued Tracks"); }
static inline struct playlist *__test_pl_collection(void)
{ return playlist_get(PL_SYSTEM, "Collection"); }
static inline struct playlist *__test_pl_history(void)
{ return playlist_get(PL_SYSTEM, "History"); }
static inline struct playlist *__test_pl_unplayed(void)
{ return playlist_get(PL_SYSTEM, "Unplayed"); }
static inline struct playlist *__test_pl_most_played(void)
{ return playlist_get(PL_SYSTEM, "Most Played"); }
static inline struct playlist *__test_pl_least_played(void)
{ return playlist_get(PL_SYSTEM, "Least Played"); }
static void test_init()
{
@ -127,7 +144,6 @@ static void test_invalid()
__test_playlist_noselect("Invalid");
playlist_update(PL_SYSTEM, NULL);
g_assert_false(playlist_add(PL_SYSTEM, NULL, track_get(0)));
g_assert_false(playlist_remove(PL_SYSTEM, NULL, track_get(0)));
g_assert_false(playlist_has(PL_SYSTEM, NULL, track_get(0)));
g_assert_cmpuint(playlist_size(PL_SYSTEM, NULL), ==, 0);
@ -215,7 +231,7 @@ static void test_collection()
__test_playlist_id("Collection", SYS_PL_COLLECTION);
__test_playlist_select("Collection", SYS_PL_COLLECTION);
__test_playlist_random("Collection");
__test_playlist_add("Collection");
__test_playlist_update("Collection", 2, true, true);
__test_playlist_hide_track("Collection", 1, false, true);
__test_playlist_reinit("Collection", 1, false, true);
__test_playlist_update("Collection", 1, false, true);
@ -242,17 +258,17 @@ static void test_history()
g_assert_false(playlist_get_random(PL_SYSTEM, "History"));
__test_playlist_state("History", 0, false, false);
g_assert_true(playlist_add(PL_SYSTEM, "History", track_get(0)));
g_assert_true(playlist_add(PL_SYSTEM, "History", track_get(0)));
g_assert_true(playlist_add(PL_SYSTEM, "History", track_get(1)));
g_assert_true(playlist_add(PL_SYSTEM, "History", track_get(1)));
g_assert_true(playlist_add(__test_pl_history(), track_get(0)));
g_assert_true(playlist_add(__test_pl_history(), track_get(0)));
g_assert_true(playlist_add(__test_pl_history(), track_get(1)));
g_assert_true(playlist_add(__test_pl_history(), track_get(1)));
__test_playlist_state("History", 4, true, true);
__test_playlist_noselect("History");
g_assert(playlist_prev() == track_get(1));
g_assert(playlist_prev() == track_get(0));
g_assert_cmpuint(playlist_size(PL_SYSTEM, "History"), ==, 4);
g_assert_true(playlist_add(PL_SYSTEM, "History", track_get(1)));
g_assert_true(playlist_add(__test_pl_history(), track_get(1)));
g_assert_cmpuint(playlist_size(PL_SYSTEM, "History"), ==, 5);
g_assert(playlist_prev() == track_get(1));
@ -277,9 +293,7 @@ static void test_unplayed()
__test_playlist_remove("Unplayed");
track_get(1)->tr_count = 1;
g_assert_true( playlist_add(PL_SYSTEM, "Unplayed", track_get(0)));
g_assert_false(playlist_add(PL_SYSTEM, "Unplayed", track_get(1)));
g_assert_cmpuint(playlist_size(PL_SYSTEM, "Unplayed"), ==, 1);
__test_playlist_update("Unplayed", 1, true, false);
__test_playlist_select("Unplayed", SYS_PL_UNPLAYED);
track_get(0)->tr_count = 1;
@ -323,10 +337,7 @@ static void test_most_played()
g_assert_false(playlist_remove(PL_SYSTEM, "Most Played", track_get(1)));
__test_playlist_state("Most Played", 0, false, false);
g_assert_false(playlist_add(PL_SYSTEM, "Most Played", track_get(0)));
g_assert_true( playlist_add(PL_SYSTEM, "Most Played", track_get(1)));
g_assert_false(playlist_add(PL_SYSTEM, "Most Played", track_get(1)));
__test_playlist_state("Most Played", 1, false, true);
__test_playlist_update("Most Played", 1, false, true);
__test_playlist_select("Most Played", SYS_PL_MOST_PLAYED);
track_get(0)->tr_count = 3;
@ -365,10 +376,7 @@ static void test_least_played()
g_assert_false(playlist_remove(PL_SYSTEM, "Least Played", track_get(1)));
__test_playlist_state("Least Played", 0, false, false);
g_assert_false(playlist_add(PL_SYSTEM, "Least Played", track_get(0)));
g_assert_true( playlist_add(PL_SYSTEM, "Least Played", track_get(1)));
g_assert_false(playlist_add(PL_SYSTEM, "Least Played", track_get(1)));
__test_playlist_state("Least Played", 1, false, true);
__test_playlist_update("Least Played", 1, false, true);
__test_playlist_select("Least Played", SYS_PL_LEAST_PLAYED);
track_get(0)->tr_count = 1;
@ -381,19 +389,68 @@ static void test_least_played()
__test_playlist_unhide_track("Least Played", 1, true, false);
__test_playlist_hide_track("Least Played", 0, false, false);
__test_playlist_clear_hidden("Least Played", 1, true, false);
track_get(0)->tr_count = 3;
track_get(1)->tr_count = 1;
__test_playlist_update("Least Played", 1, false, true);
__test_playlist_update("Most Played", 1, true, false);
}
static void test_delete()
static void test_add()
{
struct library *library = library_find("tests/Music");
track_add(library, "tests/Music/Hyrule Symphony/03 - Hyrule Field.ogg");
pl_system_new_track(track_get(2));
playlist_add(PL_SYSTEM, "Favorites", track_get(0));
playlist_add(PL_SYSTEM, "Hidden ", track_get(1));
playlist_add(PL_SYSTEM, "Hidden ", track_get(2));
playlist_add(PL_SYSTEM, "Queued Tracks", track_get(0));
playlist_add(PL_SYSTEM, "History", track_get(0));
g_assert_true( playlist_add(__test_pl_favorites(), track_get(0)));
g_assert_false(playlist_add(__test_pl_favorites(), track_get(0)));
g_assert_true( playlist_add(__test_pl_queued(), track_get(0)));
g_assert_false(playlist_add(__test_pl_queued(), track_get(0)));
g_assert_true( playlist_add(__test_pl_history(), track_get(0)));
g_assert_true( playlist_add(__test_pl_history(), track_get(0)));
g_assert_cmpuint(playlist_size(PL_SYSTEM, "Favorites"), ==, 1);
g_assert_cmpuint(playlist_size(PL_SYSTEM, "Queued Tracks"), ==, 1);
g_assert_cmpuint(playlist_size(PL_SYSTEM, "History"), ==, 2);
g_assert_true(playlist_has(PL_SYSTEM, "Favorites", track_get(0)));
g_assert_true(playlist_has(PL_SYSTEM, "Queued Tracks", track_get(0)));
g_assert_true(playlist_has(PL_SYSTEM, "History", track_get(0)));
g_assert_true( playlist_add(__test_pl_hidden(), track_get(0)));
g_assert_true( playlist_add(__test_pl_hidden(), track_get(1)));
g_assert_true( playlist_add(__test_pl_hidden(), track_get(2)));
g_assert_false(playlist_add(__test_pl_collection(), track_get(0)));
g_assert_false(playlist_add(__test_pl_collection(), track_get(1)));
g_assert_false(playlist_add(__test_pl_collection(), track_get(2)));
g_assert_false(playlist_add(__test_pl_most_played(), track_get(0)));
g_assert_false(playlist_add(__test_pl_least_played(), track_get(1)));
g_assert_false(playlist_add(__test_pl_unplayed(), track_get(2)));
g_assert_cmpuint(playlist_size(PL_SYSTEM, "Hidden"), ==, 3);
g_assert_cmpuint(playlist_size(PL_SYSTEM, "Collection"), ==, 0);
g_assert_cmpuint(playlist_size(PL_SYSTEM, "Most Played"), ==, 0);
g_assert_cmpuint(playlist_size(PL_SYSTEM, "Least Played"), ==, 0);
g_assert_cmpuint(playlist_size(PL_SYSTEM, "Unplayed"), ==, 0);
g_assert_true( playlist_has(PL_SYSTEM, "Hidden", track_get(0)));
g_assert_true( playlist_has(PL_SYSTEM, "Hidden", track_get(1)));
g_assert_true( playlist_has(PL_SYSTEM, "Hidden", track_get(2)));
g_assert_false(playlist_has(PL_SYSTEM, "Collection", track_get(0)));
g_assert_false(playlist_has(PL_SYSTEM, "Collection", track_get(1)));
g_assert_false(playlist_has(PL_SYSTEM, "Collection", track_get(2)));
g_assert_false(playlist_has(PL_SYSTEM, "Most Played", track_get(0)));
g_assert_false(playlist_has(PL_SYSTEM, "Least Played", track_get(1)));
g_assert_false(playlist_has(PL_SYSTEM, "Unplayed", track_get(2)));
}
static void test_delete()
{
playlist_add(__test_pl_favorites(), track_get(0));
playlist_add(__test_pl_hidden(), track_get(1));
playlist_add(__test_pl_hidden(), track_get(2));
playlist_add(__test_pl_queued(), track_get(0));
playlist_add(__test_pl_history(), track_get(0));
g_assert_false(playlist_delete(playlist_get(PL_SYSTEM, "Favorites")));
g_assert_false(playlist_delete(playlist_get(PL_SYSTEM, "Hidden")));
@ -408,7 +465,7 @@ static void test_delete()
g_assert_cmpuint(playlist_size(PL_SYSTEM, "Hidden"), ==, 0);
g_assert_cmpuint(playlist_size(PL_SYSTEM, "Queued Tracks"), ==, 0);
g_assert_cmpuint(playlist_size(PL_SYSTEM, "Collection"), ==, 3);
g_assert_cmpuint(playlist_size(PL_SYSTEM, "History"), ==, 1);
g_assert_cmpuint(playlist_size(PL_SYSTEM, "History"), ==, 3);
g_assert_cmpuint(playlist_size(PL_SYSTEM, "Unplayed"), ==, 1);
g_assert_cmpuint(playlist_size(PL_SYSTEM, "Most Played"), ==, 1);
g_assert_cmpuint(playlist_size(PL_SYSTEM, "Least Played"), ==, 1);
@ -416,9 +473,9 @@ static void test_delete()
static void test_delete_tracks()
{
g_assert_true(playlist_add(PL_SYSTEM, "Favorites", track_get(0)));
g_assert_true(playlist_add(PL_SYSTEM, "Hidden", track_get(1)));
g_assert_true(playlist_add(PL_SYSTEM, "Queued Tracks", track_get(0)));
g_assert_true(playlist_add(__test_pl_favorites(), track_get(0)));
g_assert_true(playlist_add(__test_pl_hidden(), track_get(1)));
g_assert_true(playlist_add(__test_pl_queued(), track_get(0)));
pl_system_delete_track(track_get(0));
pl_system_delete_track(track_get(1));
@ -456,6 +513,7 @@ int main(int argc, char **argv)
g_test_add_func("/Core/Playlists/System/Unplayed Tracks", test_unplayed);
g_test_add_func("/Core/Playlists/System/Most Played Tracks", test_most_played);
g_test_add_func("/Core/Playlists/System/Least Played Tracks", test_least_played);
g_test_add_func("/Core/Playlists/System/Add Tracks", test_add);
g_test_add_func("/Core/Playlists/System/Delete", test_delete);
g_test_add_func("/Core/PLaylists/System/Delete Tracks", test_delete_tracks);
ret = g_test_run();

View File

@ -40,8 +40,8 @@ void test_user()
g_assert_cmpuint(playlist_size(PL_USER, "Test Playlist"), ==, 0);
g_assert_false(playlist_has( PL_USER, "Test Playlist", track_get(0)));
g_assert_true( playlist_add( PL_USER, "Test Playlist", track_get(0)));
g_assert_false(playlist_add( PL_USER, "Test Playlist", track_get(0)));
g_assert_true( playlist_add(playlist, track_get(0)));
g_assert_false(playlist_add(playlist, track_get(0)));
g_assert_true( playlist_has( PL_USER, "Test Playlist", track_get(0)));
g_assert_cmpuint(playlist_size(PL_USER, "Test Playlist"), ==, 1);

View File

@ -186,9 +186,9 @@ static void test_model()
g_assert_cmpuint(count_insert, ==, 13);
queue_resort(playlist_get_queue(PL_SYSTEM, "Collection"));
g_assert_cmpuint(count_update, ==, 13);
playlist_add(PL_SYSTEM, "Favorites", track_get(0));
playlist_add(PL_SYSTEM, "Favorites", track_get(1));
playlist_add(PL_SYSTEM, "Favorites", track_get(2));
playlist_add(playlist_get(PL_SYSTEM, "Favorites"), track_get(0));
playlist_add(playlist_get(PL_SYSTEM, "Favorites"), track_get(1));
playlist_add(playlist_get(PL_SYSTEM, "Favorites"), track_get(2));
g_assert_cmpuint(playlist_size(PL_SYSTEM, "Favorites"), ==, 3);
g_assert_cmpstr(gtk_label_get_text(gui_model_runtime()), ==,
"42 minutes, 45 seconds");

View File

@ -22,7 +22,7 @@ static void test_playlist()
gui_pl_library_add("tests/Music/Hyrule Symphony");
while (idle_run_task()) {}
playlist_add(PL_SYSTEM, "Favorites", track_get(0));
playlist_add(playlist_get(PL_SYSTEM, "Favorites"), track_get(0));
gtk_tree_model_filter_refilter(gui_sidebar_filter());
g_assert_true(gui_sidebar_iter_first(&iter));

View File

@ -71,7 +71,7 @@ static void test_buttons()
g_assert_false(gtk_toggle_button_get_active(gui_favorite_button()));
g_assert_false(gtk_toggle_button_get_active(gui_hide_button()));
playlist_add(PL_SYSTEM, "Favorites", track_get(0));
playlist_add(playlist_get(PL_SYSTEM, "Favorites"), track_get(0));
audio_load(track_get(0));
g_assert_true( gtk_toggle_button_get_active(gui_favorite_button()));
g_assert_false(gtk_toggle_button_get_active(gui_hide_button()));
@ -81,7 +81,7 @@ static void test_buttons()
gtk_toggle_button_set_active(gui_favorite_button(), true);
g_assert_true(playlist_has(PL_SYSTEM, "Favorites", track_get(0)));
playlist_add(PL_SYSTEM, "Hidden", track_get(1));
playlist_add(playlist_get(PL_SYSTEM, "Hidden"), track_get(1));
audio_load(track_get(1));
g_assert_false(gtk_toggle_button_get_active(gui_favorite_button()));
g_assert_true(gtk_toggle_button_get_active(gui_hide_button()));

View File

@ -116,8 +116,8 @@ static void test_sidebar_selection()
g_assert_cmpuint(gtk_tree_model_iter_n_children(filter, NULL), ==, 6);
playlist_new(PL_LIBRARY, "tests/Music/Hyrule Symphony");
while (idle_run_task()) {}
playlist_add(PL_SYSTEM, "History", track_get(0));
playlist_add(PL_SYSTEM, "Favorites", track_get(0));
playlist_add(playlist_get(PL_SYSTEM, "History"), track_get(0));
playlist_add(playlist_get(PL_SYSTEM, "Favorites"), track_get(0));
gtk_tree_model_filter_refilter(gui_sidebar_filter());
g_assert_cmpuint(gtk_tree_model_iter_n_children(filter, NULL), ==, 8);