lib: Remove track from library pq if banned

Put it back when unbanned.

Signed-off-by: Anna Schumaker <schumaker.ann@gmail.com>
This commit is contained in:
Anna Schumaker 2014-02-02 14:11:38 -05:00 committed by Anna Schumaker
parent 48cc1f992a
commit a474712a22
4 changed files with 19 additions and 0 deletions

View File

@ -26,6 +26,10 @@ struct Callbacks {
void (*on_library_track_del)(unsigned int);
void (*on_library_track_updated)(unsigned int);
/* Playlist callbacks */
void (*on_playlist_ban)(unsigned int);
void (*on_playlist_unban)(unsigned int);
/* Playqueue callbacks */
void (*on_queue_track_add)(Playqueue *, unsigned int);
void (*on_queue_track_del)(Playqueue *, unsigned int);

View File

@ -28,6 +28,9 @@ static struct Callbacks callbacks = {
.on_library_track_del = no_op,
.on_library_track_updated = no_op,
.on_playlist_ban = no_op,
.on_playlist_unban = no_op,
.on_queue_track_add = no_op,
.on_queue_track_del = no_op,
.on_queue_track_changed = no_op,

View File

@ -37,6 +37,8 @@ void deck :: init()
library_playqueue.add_sort(SORT_TRACK);
read();
get_callbacks()->on_playlist_ban = del_library_track;
get_callbacks()->on_playlist_unban = add_library_track;
get_callbacks()->on_library_track_add = add_library_track;
get_callbacks()->on_library_track_del = del_library_track;
get_callbacks()->on_library_track_updated = change_library_track;

View File

@ -1,6 +1,7 @@
/*
* Copyright 2013 (c) Anna Schumaker.
*/
#include <callback.h>
#include <database.h>
#include <error.h>
#include <playlist.h>
@ -21,6 +22,11 @@ void playlist :: init()
playlist_pq.set_flag(PQ_NEVER_SORT);
playlist_db.load();
ids = get_tracks("Banned");
for (it = ids.begin(); it != ids.end(); it++)
get_callbacks()->on_playlist_ban(*it);
if (cur_pq == "")
return;
@ -36,6 +42,8 @@ void playlist :: add(const std::string &name, unsigned int track_id)
playlist_db.save();
if (name == cur_pq)
playlist_pq.add(track_id);
if (name == "Banned")
get_callbacks()->on_playlist_ban(track_id);
} else
throw -E_EXIST;
}
@ -47,6 +55,8 @@ void playlist :: del(const std::string &name, unsigned int track_id)
playlist_db.save();
if (name == cur_pq)
playlist_pq.del_track(track_id);
if (name == "Banned")
get_callbacks()->on_playlist_unban(track_id);
} else
throw -E_EXIST;
}