core/tempq: Move tempq_next() out of the deck namespace
Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
ecda136015
commit
b3d95a06d4
|
@ -68,12 +68,17 @@ AudioDriver :: ~AudioDriver()
|
|||
|
||||
void AudioDriver :: eos()
|
||||
{
|
||||
struct track *track;
|
||||
|
||||
if (cur_track) {
|
||||
track_played(cur_track);
|
||||
queue_updated(collection_get_queue(), cur_track);
|
||||
}
|
||||
|
||||
_load_track(deck :: next(), continue_playback());
|
||||
track = tempq_next();
|
||||
if (!track)
|
||||
track = queue_next(collection_get_queue());
|
||||
_load_track(track, continue_playback());
|
||||
}
|
||||
|
||||
|
||||
|
@ -131,7 +136,10 @@ int64_t audio :: duration()
|
|||
|
||||
void audio :: next()
|
||||
{
|
||||
_load_track(deck :: next(), cur_driver->is_playing());
|
||||
struct track *track = tempq_next();
|
||||
if (!track)
|
||||
track = queue_next(collection_get_queue());
|
||||
_load_track(track, cur_driver->is_playing());
|
||||
if (cur_track)
|
||||
history_add(cur_track);
|
||||
}
|
||||
|
|
|
@ -98,6 +98,7 @@ void tempq_free(struct queue *queue)
|
|||
|
||||
for (it = queue_deck.begin(); it != queue_deck.end(); it++) {
|
||||
if (&(*it) == queue) {
|
||||
queue_deinit(&(*it));
|
||||
queue_deck.erase(it);
|
||||
deck :: write();
|
||||
return;
|
||||
|
@ -141,6 +142,24 @@ void tempq_move(struct queue *queue, unsigned int index)
|
|||
deck :: write();
|
||||
}
|
||||
|
||||
struct track *tempq_next()
|
||||
{
|
||||
struct track *track = NULL;
|
||||
std::list<TempQueue>::iterator it;
|
||||
|
||||
for (it = queue_deck.begin(); it != queue_deck.end(); it++) {
|
||||
if (queue_has_flag(&(*it), Q_ENABLED) == false)
|
||||
continue;
|
||||
|
||||
track = queue_next(&(*it));
|
||||
if (queue_size(&(*it)) == 0)
|
||||
tempq_free(&(*it));
|
||||
break;
|
||||
}
|
||||
|
||||
return track;
|
||||
}
|
||||
|
||||
void deck :: write()
|
||||
{
|
||||
std::list<TempQueue>::iterator it;
|
||||
|
@ -162,27 +181,7 @@ void deck :: save(struct queue *queue, enum queue_flags flag)
|
|||
deck :: write();
|
||||
}
|
||||
|
||||
struct track *deck :: next()
|
||||
unsigned int tempq_count()
|
||||
{
|
||||
struct track *track = NULL;
|
||||
std::list<TempQueue>::iterator it;
|
||||
|
||||
for (it = queue_deck.begin(); it != queue_deck.end(); it++) {
|
||||
if (queue_has_flag(&(*it), Q_ENABLED) == false)
|
||||
continue;
|
||||
|
||||
track = queue_next(&(*it));
|
||||
if (queue_size(&(*it)) == 0)
|
||||
tempq_free(&(*it));
|
||||
break;
|
||||
}
|
||||
|
||||
if (!track)
|
||||
track = queue_next(collection_get_queue());
|
||||
return track;
|
||||
}
|
||||
|
||||
std::list<TempQueue> &deck :: get_queues()
|
||||
{
|
||||
return queue_deck;
|
||||
return queue_deck.size();
|
||||
}
|
||||
|
|
|
@ -199,8 +199,8 @@ static void on_page_reordered(Gtk::Widget *page, int num)
|
|||
{
|
||||
Gtk::Notebook *notebook = gui :: get_widget<Gtk::Notebook>("o_notebook");
|
||||
|
||||
if ((unsigned int)num >= deck :: get_queues().size()) {
|
||||
notebook->reorder_child(*page, deck::get_queues().size() - 1);
|
||||
if ((unsigned int)num >= tempq_count()) {
|
||||
notebook->reorder_child(*page, tempq_count() - 1);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -220,9 +220,8 @@ void init_queue_tabs()
|
|||
|
||||
void post_init_queue_tabs()
|
||||
{
|
||||
std::list<TempQueue>::iterator it;
|
||||
unsigned int i = 0;
|
||||
unsigned int i;
|
||||
|
||||
for (it = deck :: get_queues().begin(); it != deck :: get_queues().end(); it++)
|
||||
on_pq_created(&(*it), i++);
|
||||
for (i = 0; i < tempq_count(); i++)
|
||||
on_pq_created(tempq_get(i), i);
|
||||
}
|
||||
|
|
10
gui/tabs.cpp
10
gui/tabs.cpp
|
@ -203,18 +203,18 @@ void Tab :: tab_queue_add(queue *pq)
|
|||
bool Tab :: tab_queue_selected(bool random)
|
||||
{
|
||||
unsigned int flags = random ? 0 : Q_RANDOM;
|
||||
if (deck :: get_queues().size() >= 10)
|
||||
if (tempq_count() >= 10)
|
||||
return true;
|
||||
|
||||
queue *pq = tempq_alloc(&tempq_ops, flags);
|
||||
on_pq_created(pq, deck :: get_queues().size() - 1);
|
||||
on_pq_created(pq, tempq_count() - 1);
|
||||
tab_queue_add(pq);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Tab :: tab_add_to_queue(unsigned int n)
|
||||
{
|
||||
if (n >= deck :: get_queues().size())
|
||||
if (n >= tempq_count())
|
||||
return true;
|
||||
|
||||
queue *pq = tempq_get(n);
|
||||
|
@ -271,7 +271,7 @@ bool Tab :: on_key_press_event(const std::string &key)
|
|||
void Tab :: on_show_rc_menu()
|
||||
{
|
||||
std::string item;
|
||||
unsigned int size = deck :: get_queues().size();
|
||||
unsigned int size = tempq_count();
|
||||
|
||||
if (size == 0) {
|
||||
gui :: get_widget<Gtk::MenuItem>("o_add_to_pq")->hide();
|
||||
|
@ -463,7 +463,7 @@ void post_init_tabs()
|
|||
post_init_queue_tabs();
|
||||
|
||||
unsigned int tab = 0;
|
||||
for (tab = 0; tab < deck::get_queues().size(); tab++) {
|
||||
for (tab = 0; tab < tempq_count(); tab++) {
|
||||
if (queue_has_flag(tempq_get(tab), Q_ENABLED))
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -26,20 +26,20 @@ static bool on_window_key_pressed(GdkEventKey *event)
|
|||
tab_focus_search();
|
||||
else if (key >= "0" && key <= "9") {
|
||||
unsigned int n = atoi(key.c_str());
|
||||
if (n < deck::get_queues().size())
|
||||
if (n < tempq_count())
|
||||
notebook->set_current_page(n);
|
||||
} else if (key == "c")
|
||||
notebook->set_current_page(deck::get_queues().size());
|
||||
notebook->set_current_page(tempq_count());
|
||||
else if (key == "h")
|
||||
notebook->set_current_page(deck::get_queues().size() + 1);
|
||||
notebook->set_current_page(tempq_count() + 1);
|
||||
else if (key == "m")
|
||||
notebook->set_current_page(deck::get_queues().size() + 3);
|
||||
notebook->set_current_page(tempq_count() + 3);
|
||||
else if (key == "n")
|
||||
gst :: next();
|
||||
else if (key == "N")
|
||||
audio :: prev();
|
||||
else if (key == "p")
|
||||
notebook->set_current_page(deck::get_queues().size() + 2);
|
||||
notebook->set_current_page(tempq_count() + 2);
|
||||
else
|
||||
return false;
|
||||
return true;
|
||||
|
|
|
@ -46,17 +46,6 @@ namespace deck
|
|||
void write();
|
||||
void save(struct queue *, enum queue_flags);
|
||||
|
||||
/**
|
||||
* @return A track from the first enabled queue. If no queues are
|
||||
* enabled, return a track from the Library.
|
||||
*/
|
||||
struct track *next();
|
||||
|
||||
/**
|
||||
* @return The deck of queues.
|
||||
*/
|
||||
std::list<TempQueue> &get_queues();
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
@ -76,4 +65,10 @@ struct queue *tempq_get(unsigned int);
|
|||
/* Called to move a temporary queue to a new index in the list. */
|
||||
void tempq_move(struct queue *, unsigned int);
|
||||
|
||||
/* Called to find the next track to play. */
|
||||
struct track *tempq_next();
|
||||
|
||||
/* Called to find the number of temporary queues currently allocated. */
|
||||
unsigned int tempq_count();
|
||||
|
||||
#endif /* OCARINA_CORE_DECK_H */
|
||||
|
|
|
@ -12,7 +12,6 @@ extern "C" {
|
|||
}
|
||||
#include "test.h"
|
||||
|
||||
static queue *Q_NULL = NULL;
|
||||
|
||||
static void test_init()
|
||||
{
|
||||
|
@ -22,12 +21,12 @@ static void test_init()
|
|||
collection_init(NULL);
|
||||
history_init(NULL);
|
||||
|
||||
test_equal(deck :: next(), NULL);
|
||||
test_equal(tempq_next(), NULL);
|
||||
tempq_init(NULL);
|
||||
test_equal(deck :: next(), NULL);
|
||||
test_equal(tempq_next(), NULL);
|
||||
tempq_move(NULL, 1);
|
||||
test_equal(tempq_get(0), NULL);
|
||||
test_equal(deck :: get_queues().size(), (size_t)0);
|
||||
test_equal(tempq_count(), 0);
|
||||
}
|
||||
|
||||
static void test_tempq()
|
||||
|
@ -41,6 +40,7 @@ static void test_tempq()
|
|||
test_equal(queue_has_flag(q0, Q_SAVE_SORT), true);
|
||||
test_equal(queue_has_flag(q0, Q_SAVE_FLAGS), true);
|
||||
test_equal(tempq_get(0), q0);
|
||||
test_equal(tempq_count(), 1);
|
||||
|
||||
q1 = tempq_alloc(NULL, Q_RANDOM);
|
||||
test_not_equal(q1, NULL);
|
||||
|
@ -49,6 +49,7 @@ static void test_tempq()
|
|||
test_equal(queue_has_flag(q1, Q_SAVE_SORT), true);
|
||||
test_equal(queue_has_flag(q1, Q_SAVE_FLAGS), true);
|
||||
test_equal(tempq_get(1), q1);
|
||||
test_equal(tempq_count(), 2);
|
||||
|
||||
tempq_move(q1, 0);
|
||||
test_equal(tempq_get(0), q1);
|
||||
|
@ -62,9 +63,43 @@ static void test_tempq()
|
|||
|
||||
tempq_free(q0);
|
||||
test_equal(tempq_get(0), q1);
|
||||
test_equal(tempq_count(), 1);
|
||||
|
||||
tempq_free(q1);
|
||||
test_equal(tempq_get(0), NULL);
|
||||
test_equal(tempq_count(), 0);
|
||||
}
|
||||
|
||||
static void test_next()
|
||||
{
|
||||
const struct database *track_db = track_db_get();
|
||||
struct queue *q0, *q1;
|
||||
unsigned int i;
|
||||
|
||||
collection_add("tests/Music/Hyrule Symphony");
|
||||
while (idle_run_task()) {};
|
||||
|
||||
q0 = tempq_alloc(NULL, 0);
|
||||
q1 = tempq_alloc(NULL, 0);
|
||||
for (i = 0; i < track_db->db_size; i++) {
|
||||
queue_add(q0, track_get(i));
|
||||
queue_add(q1, track_get(i));
|
||||
}
|
||||
|
||||
for (i = 0; i < track_db->db_size; i++) {
|
||||
test_loop_equal(queue_size(q0), track_db->db_size - i, i);
|
||||
test_loop_equal(tempq_next(), track_get(i), i);
|
||||
} test_loop_passed();
|
||||
test_equal(tempq_get(0), q1);
|
||||
test_equal(tempq_count(), 1);
|
||||
test_equal(queue_size(q1), track_db->db_size);
|
||||
|
||||
for (i = 0; i < track_db->db_size; i++) {
|
||||
test_loop_equal(queue_size(q1), track_db->db_size - i, i);
|
||||
test_loop_equal(tempq_next(), track_get(i), i);
|
||||
} test_loop_passed();
|
||||
test_equal(tempq_get(0), NULL);
|
||||
test_equal(tempq_count(), 0);
|
||||
|
||||
history_deinit();
|
||||
collection_deinit();
|
||||
|
@ -73,52 +108,8 @@ static void test_tempq()
|
|||
filter_deinit();
|
||||
}
|
||||
|
||||
static void test_next_prev()
|
||||
{
|
||||
test_cp_data_dir();
|
||||
filter_init();
|
||||
tags_init();
|
||||
playlist_init(NULL);
|
||||
collection_init(NULL);
|
||||
history_init(NULL);
|
||||
tempq_init(NULL);
|
||||
|
||||
std::list<TempQueue>::iterator it = deck :: get_queues().begin();
|
||||
queue *q = history_get_queue();
|
||||
queue *q0 = tempq_get(0);
|
||||
queue *q1 = tempq_get(1);
|
||||
|
||||
queue_unset_flag(q0, Q_RANDOM);
|
||||
for (unsigned int i = 0; i < 4; i++)
|
||||
queue_add(q0, track_get(i));
|
||||
|
||||
test_not_equal(q, Q_NULL);
|
||||
test_equal(queue_size(q), (unsigned)0);
|
||||
|
||||
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(deck :: get_queues().size(), (size_t)1);
|
||||
|
||||
queue_unset_flag(q1, Q_ENABLED);
|
||||
queue_unset_flag(collection_get_queue(), Q_RANDOM);
|
||||
|
||||
test_equal(queue_size(q1), (unsigned)5);
|
||||
deck :: next();
|
||||
test_equal(queue_size(q1), (unsigned)5);
|
||||
|
||||
queue_set_flag(q1, Q_ENABLED);
|
||||
for (unsigned int i = 0; i < 5; i++)
|
||||
deck :: next();
|
||||
test_equal(deck :: get_queues().size(), (size_t)0);
|
||||
}
|
||||
|
||||
DECLARE_UNIT_TESTS(
|
||||
UNIT_TEST("Temporary Queue Initialization", test_init),
|
||||
UNIT_TEST("Temporary Queue", test_tempq),
|
||||
UNIT_TEST("Deck Next and Prev", test_next_prev),
|
||||
UNIT_TEST("Temporary Queue Next Track", test_next),
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue