core/history: Add history_prev() function
Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
c125b3893e
commit
51379c7e8c
|
@ -132,11 +132,13 @@ int64_t audio :: duration()
|
|||
void audio :: next()
|
||||
{
|
||||
_load_track(deck :: next(), cur_driver->is_playing());
|
||||
if (cur_track)
|
||||
history_add(cur_track);
|
||||
}
|
||||
|
||||
void audio :: prev()
|
||||
{
|
||||
_load_track(deck :: prev(), cur_driver->is_playing());
|
||||
_load_track(history_prev(), cur_driver->is_playing());
|
||||
}
|
||||
|
||||
void audio :: load_track(struct track *track)
|
||||
|
|
|
@ -217,16 +217,9 @@ struct track *deck :: next()
|
|||
|
||||
if (!track)
|
||||
track = queue_next(collection_get_queue());
|
||||
if (track)
|
||||
history_add(track);
|
||||
return track;
|
||||
}
|
||||
|
||||
struct track *deck :: prev()
|
||||
{
|
||||
return queue_next(history_get_queue());
|
||||
}
|
||||
|
||||
std::list<TempQueue> &deck :: get_queues()
|
||||
{
|
||||
return queue_deck;
|
||||
|
|
|
@ -23,6 +23,11 @@ void history_add(struct track *track)
|
|||
_q_iter_set(&history_queue.q_tracks, &history_queue.q_cur, 0);
|
||||
}
|
||||
|
||||
struct track *history_prev()
|
||||
{
|
||||
return queue_next(&history_queue);
|
||||
}
|
||||
|
||||
struct queue *history_get_queue()
|
||||
{
|
||||
return &history_queue;
|
||||
|
|
|
@ -100,11 +100,6 @@ namespace deck
|
|||
*/
|
||||
struct track *next();
|
||||
|
||||
/**
|
||||
* @return A track from the recent tracks queue.
|
||||
*/
|
||||
struct track *prev();
|
||||
|
||||
/**
|
||||
* @return The deck of queues.
|
||||
*/
|
||||
|
|
|
@ -16,6 +16,9 @@ void history_deinit();
|
|||
/* Called to add a track to the history queue. */
|
||||
void history_add(struct track *);
|
||||
|
||||
/* Called to pick a track from the history. */
|
||||
struct track *history_prev();
|
||||
|
||||
|
||||
/* Called to access the queue of recent tracks. */
|
||||
struct queue *history_get_queue();
|
||||
|
|
|
@ -116,22 +116,12 @@ static void test_next_prev()
|
|||
|
||||
test_not_equal(q, Q_NULL);
|
||||
test_equal(queue_size(q), (unsigned)0);
|
||||
test_equal(deck :: prev(), TRACK_NULL);
|
||||
|
||||
for (unsigned int i = 0; i < 2; i++) {
|
||||
test_equal(deck :: next()->tr_dbe.dbe_index, (unsigned)0);
|
||||
test_equal(deck :: next()->tr_dbe.dbe_index, (unsigned)1);
|
||||
test_equal(deck :: next()->tr_dbe.dbe_index, (unsigned)2);
|
||||
test_equal(deck :: next()->tr_dbe.dbe_index, (unsigned)3);
|
||||
test_equal(queue_size(q), 4 * (i + 1));
|
||||
}
|
||||
|
||||
for (unsigned int i = 0; i < 2; i++) {
|
||||
if (i == 1)
|
||||
test_equal(deck :: prev()->tr_dbe.dbe_index, (unsigned)3);
|
||||
test_equal(deck :: prev()->tr_dbe.dbe_index, (unsigned)2);
|
||||
test_equal(deck :: prev()->tr_dbe.dbe_index, (unsigned)1);
|
||||
test_equal(deck :: prev()->tr_dbe.dbe_index, (unsigned)0);
|
||||
}
|
||||
|
||||
test_equal(deck :: get_queues().size(), (size_t)1);
|
||||
|
|
|
@ -38,18 +38,31 @@ static void test_history()
|
|||
{
|
||||
const struct database *track_db = track_db_get();
|
||||
struct queue *q = history_get_queue();
|
||||
struct track *prev = track_get(0);
|
||||
struct db_entry *track, *next;
|
||||
unsigned int i = 0;
|
||||
|
||||
test_equal((void *)history_prev(), NULL);
|
||||
|
||||
/* Add tracks once */
|
||||
db_for_each(track, next, track_db) {
|
||||
history_add(TRACK(track));
|
||||
test_loop_equal(queue_size(q), i + 1, i);
|
||||
test_loop_equal(q->q_cur.it_pos, 0, i);
|
||||
test_loop_equal((void *)queue_at(q, 0), (void *)TRACK(track), i);
|
||||
test_loop_equal((void *)history_prev(), (void *)prev, i);
|
||||
prev = TRACK(track);
|
||||
i++;
|
||||
} test_loop_passed();
|
||||
test_equal(queue_size(q), track_db->db_size);
|
||||
|
||||
/* Cycle through the history queue. */
|
||||
_q_iter_set(&q->q_tracks, &q->q_cur, 0);
|
||||
for (i = 2; i <= track_db->db_size; i++) {
|
||||
test_loop_equal((void *)history_prev(),
|
||||
(void *)track_get(track_db->db_size - i), i);
|
||||
} test_loop_passed();
|
||||
|
||||
i = 0;
|
||||
/* Add tracks again, old tracks should remain */
|
||||
db_for_each(track, next, track_db) {
|
||||
|
|
Loading…
Reference in New Issue