queue: Test and clean up the delete track function
Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
74bf30bec5
commit
5520472f6f
|
@ -34,6 +34,7 @@ protected:
|
|||
|
||||
unsigned int find_sorted_id(Track *);
|
||||
unsigned int _add_at(Track *, unsigned int);
|
||||
void _del_at(Track *, unsigned int);
|
||||
void _add_sort(sort_t, bool);
|
||||
|
||||
public:
|
||||
|
@ -50,8 +51,8 @@ public:
|
|||
std::string get_length_str();
|
||||
|
||||
virtual unsigned int add(Track *);
|
||||
void del(Track *);
|
||||
void del(unsigned int);
|
||||
void del_track(unsigned int);
|
||||
void track_updated(unsigned int);
|
||||
unsigned int size();
|
||||
|
||||
|
|
|
@ -26,8 +26,14 @@ class RecentQueue : public Queue
|
|||
{
|
||||
public:
|
||||
RecentQueue()
|
||||
: Queue(Q_ENABLED | Q_REPEAT | Q_NO_SORT | Q_DISABLE_CHANGED_SIZE) {}
|
||||
unsigned int add(Track *track) { return _add_at(track, 0); }
|
||||
: Queue(Q_ENABLED | Q_REPEAT | Q_NO_SORT | Q_DISABLE_CHANGED_SIZE)
|
||||
{}
|
||||
|
||||
unsigned int add(Track *track)
|
||||
{
|
||||
del(track);
|
||||
return _add_at(track, 0);
|
||||
}
|
||||
};
|
||||
|
||||
static RecentQueue o_recently_played;
|
||||
|
@ -207,7 +213,6 @@ void audio :: next()
|
|||
|
||||
cur_trackid = track->id;
|
||||
save_state();
|
||||
o_recently_played.del_track(track->id);
|
||||
o_recently_played.add(track);
|
||||
o_recently_played.set_cur(0);
|
||||
}
|
||||
|
@ -241,7 +246,6 @@ void audio :: load_trackid(unsigned int track_id)
|
|||
|
||||
cur_trackid = track_id;
|
||||
save_state();
|
||||
o_recently_played.del_track(track_id);
|
||||
o_recently_played.add(track);
|
||||
o_recently_played.set_cur(0);
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ static void add_library_track(unsigned int id)
|
|||
|
||||
static void del_library_track(unsigned int id)
|
||||
{
|
||||
library_playqueue.del_track(id);
|
||||
library_playqueue.del(tagdb :: lookup(id));
|
||||
}
|
||||
|
||||
static void change_library_track(unsigned int id)
|
||||
|
|
|
@ -60,7 +60,7 @@ void playlist :: del(const std::string &name, unsigned int track_id)
|
|||
playlist_db.remove(name, track_id);
|
||||
playlist_db.save();
|
||||
if (name == cur_pq)
|
||||
playlist_pq.del_track(track_id);
|
||||
playlist_pq.del(tagdb :: lookup(track_id));
|
||||
if (name == "Banned")
|
||||
get_callbacks()->on_playlist_unban(track_id);
|
||||
} else
|
||||
|
@ -73,7 +73,7 @@ void playlist :: select(const std::string &name)
|
|||
std::set<unsigned int>::iterator it;
|
||||
|
||||
while (playlist_pq.size() > 0)
|
||||
playlist_pq.del(0);
|
||||
playlist_pq.del((unsigned)0);
|
||||
|
||||
for (it = ids.begin(); it != ids.end(); it++)
|
||||
playlist_pq.add(tagdb :: lookup(*it));
|
||||
|
|
|
@ -159,6 +159,15 @@ unsigned int Queue :: _add_at(Track *track, unsigned int pos)
|
|||
return pos;
|
||||
}
|
||||
|
||||
void Queue :: _del_at(Track *track, unsigned int pos)
|
||||
{
|
||||
_tracks.erase(_tracks.begin() + pos);
|
||||
_length -= track->length;
|
||||
get_callbacks()->on_queue_track_del(this, pos);
|
||||
if (!(_flags & Q_DISABLE_CHANGED_SIZE))
|
||||
get_callbacks()->on_queue_changed();
|
||||
}
|
||||
|
||||
unsigned int Queue :: add(Track *track)
|
||||
{
|
||||
unsigned int id = _tracks.size();
|
||||
|
@ -167,28 +176,17 @@ unsigned int Queue :: add(Track *track)
|
|||
return _add_at(track, id);
|
||||
}
|
||||
|
||||
void Queue :: del(unsigned int plist_id)
|
||||
void Queue :: del(Track *track)
|
||||
{
|
||||
Track *track;
|
||||
unsigned int track_id = _tracks[plist_id]->id;
|
||||
|
||||
_tracks.erase(_tracks.begin() + plist_id);
|
||||
track = tagdb :: lookup(track_id);
|
||||
_length -= track->length;
|
||||
get_callbacks()->on_queue_track_del(this, plist_id);
|
||||
if (!(_flags & Q_DISABLE_CHANGED_SIZE))
|
||||
get_callbacks()->on_queue_changed();
|
||||
for (unsigned int i = 0; i < _tracks.size(); i++) {
|
||||
if (_tracks[i]->id == track->id)
|
||||
_del_at(track, i);
|
||||
}
|
||||
}
|
||||
|
||||
void Queue :: del_track(unsigned int track_id)
|
||||
void Queue :: del(unsigned int id)
|
||||
{
|
||||
unsigned int i = 0;
|
||||
while (i < _tracks.size()) {
|
||||
if (_tracks[i]->id == track_id)
|
||||
del(i);
|
||||
else
|
||||
i++;
|
||||
}
|
||||
_del_at(_tracks[id], id);
|
||||
}
|
||||
|
||||
void Queue :: track_updated(unsigned int track_id)
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
|
||||
unsigned int count_add = 0;
|
||||
unsigned int count_del = 0;
|
||||
|
||||
|
||||
class TestQueue : public Queue
|
||||
|
@ -70,21 +71,92 @@ void test_add_cb(Queue *q, unsigned int id)
|
|||
count_add++;
|
||||
}
|
||||
|
||||
void test_del_cb(Queue *q, unsigned int id)
|
||||
{
|
||||
if (count_del % 2 == 0)
|
||||
check_equal(id, (unsigned)0);
|
||||
else
|
||||
check_equal(id, 24 - ((count_del + 1) / 2));
|
||||
count_del++;
|
||||
}
|
||||
|
||||
void test_del_cb2(Queue *q, unsigned int id)
|
||||
{
|
||||
check_equal(id, 23 - count_del);
|
||||
count_del++;
|
||||
}
|
||||
|
||||
void test_del_cb3(Queue *q, unsigned int id)
|
||||
{
|
||||
check_equal(id, (unsigned)0);
|
||||
}
|
||||
|
||||
void test_add_remove()
|
||||
{
|
||||
Track *track;
|
||||
TestQueue q(0);
|
||||
unsigned int expected = 0;
|
||||
|
||||
get_callbacks()->on_queue_track_add = test_add_cb;
|
||||
get_callbacks()->on_queue_track_del = test_del_cb;
|
||||
|
||||
|
||||
/* Add tracks */
|
||||
test :: begin();
|
||||
for (unsigned int i = 0; i < 24; i++) {
|
||||
check_equal(q.add(tagdb :: lookup(i)), i);
|
||||
expected += 100 + (i * 10);
|
||||
}
|
||||
test :: success();
|
||||
test_equal(q.get_length(), expected);
|
||||
|
||||
test :: equal(q.get_length(), expected);
|
||||
|
||||
/* Add everything again */
|
||||
test :: begin();
|
||||
for (unsigned int i = 0; i < 24; i++) {
|
||||
check_equal(q.add(tagdb :: lookup(i)), i + 24);
|
||||
expected += 100 + (i * 10);
|
||||
}
|
||||
test :: success();
|
||||
test_equal(q.get_length(), expected);
|
||||
test_equal(q.size(), (unsigned)48);
|
||||
|
||||
|
||||
/* Test removing multiple tracks at once */
|
||||
test :: begin();
|
||||
for (unsigned int i = 0; i < 12; i++) {
|
||||
track = tagdb :: lookup(i);
|
||||
q.del(track);
|
||||
expected -= 2 * (100 + (i * 10));
|
||||
}
|
||||
test :: success();
|
||||
test_equal(q.get_length(), expected);
|
||||
test_equal(q.size(), (unsigned)24);
|
||||
|
||||
|
||||
/* Test removing tracks one at a time */
|
||||
count_del = 0;
|
||||
get_callbacks()->on_queue_track_del = test_del_cb2;
|
||||
|
||||
test :: begin();
|
||||
for (unsigned int i = 23; i >= 12; i--) {
|
||||
expected -= q[i]->length;
|
||||
q.del(i);
|
||||
}
|
||||
test :: success();
|
||||
test_equal(q.get_length(), expected);
|
||||
test_equal(q.size(), (unsigned)12);
|
||||
|
||||
|
||||
/* Remove remaining tracks */
|
||||
get_callbacks()->on_queue_track_del = test_del_cb3;
|
||||
|
||||
test :: begin();
|
||||
while (q.size() > 0)
|
||||
q.del((unsigned)0);
|
||||
test :: success();
|
||||
test_equal(q.get_length(), (unsigned)0);
|
||||
test_equal(q.size(), (unsigned)0);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
|
|
Loading…
Reference in New Issue
Block a user