From a474712a22b622f30e9dcffdf3fedd82d015843e Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Sun, 2 Feb 2014 14:11:38 -0500 Subject: [PATCH] lib: Remove track from library pq if banned Put it back when unbanned. Signed-off-by: Anna Schumaker --- include/callback.h | 4 ++++ lib/callback.cpp | 3 +++ lib/deck.cpp | 2 ++ lib/playlist.cpp | 10 ++++++++++ 4 files changed, 19 insertions(+) diff --git a/include/callback.h b/include/callback.h index 9f9c8870..88931fdb 100644 --- a/include/callback.h +++ b/include/callback.h @@ -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); diff --git a/lib/callback.cpp b/lib/callback.cpp index 1b8d47cf..1647eefd 100644 --- a/lib/callback.cpp +++ b/lib/callback.cpp @@ -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, diff --git a/lib/deck.cpp b/lib/deck.cpp index 0acc4233..90a6807f 100644 --- a/lib/deck.cpp +++ b/lib/deck.cpp @@ -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; diff --git a/lib/playlist.cpp b/lib/playlist.cpp index 5a1a8b57..8c64db16 100644 --- a/lib/playlist.cpp +++ b/lib/playlist.cpp @@ -1,6 +1,7 @@ /* * Copyright 2013 (c) Anna Schumaker. */ +#include #include #include #include @@ -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; }