core/playlist: playlist_add() can return a boolean

There is at least one place in the gui where it needs to know if a track
was actually added to a playlist.  Adding a return value is the best way
to know what happened.

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2015-12-10 14:44:31 -05:00
parent 02c82c182e
commit 20825613e9
4 changed files with 20 additions and 20 deletions

View File

@ -101,19 +101,18 @@ void playlist_fixup_collection()
queue_remove_all(collection_get_queue(), track_get(it.it_val)); queue_remove_all(collection_get_queue(), track_get(it.it_val));
} }
void playlist_add(enum playlist_t plist, struct track *track) bool playlist_add(enum playlist_t plist, struct track *track)
{ {
if (!track || !__playlist_is_static(plist)) if (!track || !__playlist_is_static(plist) || playlist_has(plist, track))
return; return false;
if (!playlist_has(plist, track)) { index_insert(&playlist_db, playlist_names[plist],
index_insert(&playlist_db, playlist_names[plist], track->tr_dbe.dbe_index);
track->tr_dbe.dbe_index); if (playlist_cur == plist)
if (playlist_cur == plist) queue_add(&playlist_q, track);
queue_add(&playlist_q, track); if (plist == PL_BANNED)
if (plist == PL_BANNED) queue_remove_all(collection_get_queue(), track);
queue_remove_all(collection_get_queue(), track); return true;
}
} }
void playlist_remove(enum playlist_t plist, struct track *track) void playlist_remove(enum playlist_t plist, struct track *track)

View File

@ -135,10 +135,8 @@ static void on_ban()
{ {
struct track *track = audio :: current_track(); struct track *track = audio :: current_track();
if (o_ban->get_active()) { if (o_ban->get_active()) {
if (!playlist_has(PL_BANNED, track)) { if (playlist_add(PL_BANNED, track))
playlist_add(PL_BANNED, track);
audio :: next(); audio :: next();
}
} else } else
playlist_remove(PL_BANNED, track); playlist_remove(PL_BANNED, track);
} }

View File

@ -30,7 +30,7 @@ void playlist_fixup_collection();
/* Called to add a track to a playlist. */ /* Called to add a track to a playlist. */
void playlist_add(enum playlist_t, struct track *); bool playlist_add(enum playlist_t, struct track *);
/* Called to remove a track from a playlist. */ /* Called to remove a track from a playlist. */
void playlist_remove(enum playlist_t, struct track *); void playlist_remove(enum playlist_t, struct track *);

View File

@ -43,16 +43,16 @@ static void test_add()
struct queue *q = playlist_get_queue(); struct queue *q = playlist_get_queue();
struct track *track = track_get(0); struct track *track = track_get(0);
playlist_add(PL_FAVORITED, NULL); test_equal(playlist_add(PL_FAVORITED, NULL), (bool)false);
test_equal(playlist_has(PL_FAVORITED, NULL), (bool)false); test_equal(playlist_has(PL_FAVORITED, NULL), (bool)false);
test_equal(playlist_has(PL_FAVORITED, track), (bool)false); test_equal(playlist_has(PL_FAVORITED, track), (bool)false);
playlist_add(PL_FAVORITED, track); test_equal(playlist_add(PL_FAVORITED, track), (bool)true);
test_equal(playlist_has(PL_FAVORITED, track), (bool)true); test_equal(playlist_has(PL_FAVORITED, track), (bool)true);
test_equal(queue_size(q), 1); test_equal(queue_size(q), 1);
playlist_add(PL_FAVORITED, track); test_equal(playlist_add(PL_FAVORITED, track), (bool)false);
test_equal(queue_size(q), 1); test_equal(queue_size(q), 1);
playlist_add(PL_FAVORITED, track_get(1)); test_equal(playlist_add(PL_FAVORITED, track_get(1)), (bool)true);
test_equal(queue_size(q), 2); test_equal(queue_size(q), 2);
track = track_get(2); track = track_get(2);
@ -60,7 +60,7 @@ static void test_add()
test_equal(queue_size(q), 0); test_equal(queue_size(q), 0);
test_equal(queue_size(c), 13); test_equal(queue_size(c), 13);
test_equal(playlist_has(PL_BANNED, track), (bool)false); test_equal(playlist_has(PL_BANNED, track), (bool)false);
playlist_add(PL_BANNED, track); test_equal(playlist_add(PL_BANNED, track), (bool)true);
test_equal(playlist_has(PL_BANNED, track), (bool)true); test_equal(playlist_has(PL_BANNED, track), (bool)true);
test_equal(queue_size(q), 1); test_equal(queue_size(q), 1);
test_equal(queue_size(c), 12); test_equal(queue_size(c), 12);
@ -119,12 +119,14 @@ static void test_dynamic()
/* Only one unplayed track (tr_track == 1) */ /* Only one unplayed track (tr_track == 1) */
playlist_select(PL_UNPLAYED); playlist_select(PL_UNPLAYED);
test_equal(playlist_add(PL_UNPLAYED, track_get(1)), (bool)false);
test_equal(queue_size(q), 1); test_equal(queue_size(q), 1);
test_equal(queue_at(q, 0)->tr_track, 1); test_equal(queue_at(q, 0)->tr_track, 1);
test_equal(queue_at(q, 0)->tr_count, 0); test_equal(queue_at(q, 0)->tr_count, 0);
/* Five tracks have tr_count < average && tr_count > 0 */ /* Five tracks have tr_count < average && tr_count > 0 */
playlist_select(PL_LEAST_PLAYED); playlist_select(PL_LEAST_PLAYED);
test_equal(playlist_add(PL_LEAST_PLAYED, track_get(0)), (bool)false);
test_equal(queue_size(q), 5); test_equal(queue_size(q), 5);
for (i = 0; i < queue_size(q); i++) { for (i = 0; i < queue_size(q); i++) {
test_loop_equal(queue_at(q, i)->tr_track, i + 2, i); test_loop_equal(queue_at(q, i)->tr_track, i + 2, i);
@ -133,6 +135,7 @@ static void test_dynamic()
/* Six tracks have tr_count > average */ /* Six tracks have tr_count > average */
playlist_select(PL_MOST_PLAYED); playlist_select(PL_MOST_PLAYED);
test_equal(playlist_add(PL_MOST_PLAYED, track_get(0)), (bool)false);
test_equal(queue_size(q), 6); test_equal(queue_size(q), 6);
for (i = 0; i < queue_size(q); i++) { for (i = 0; i < queue_size(q); i++) {
test_loop_equal(queue_at(q, i)->tr_track, i + 8, i); test_loop_equal(queue_at(q, i)->tr_track, i + 8, i);