diff --git a/core/core.cpp b/core/core.cpp index f7d2592e..040f8e57 100644 --- a/core/core.cpp +++ b/core/core.cpp @@ -18,7 +18,7 @@ void core :: init(struct core_init_data *init) tags_init(); collection :: init(init->collection_ops); playlist :: init(); - deck :: init(); + deck :: init(init->tempq_ops); audio :: init(); } diff --git a/core/deck.cpp b/core/deck.cpp index ef9f916a..d42ad8ba 100644 --- a/core/deck.cpp +++ b/core/deck.cpp @@ -28,24 +28,13 @@ TempQueue :: TempQueue() queue_init(this, 0, NULL); } -TempQueue :: TempQueue(bool random) +TempQueue :: TempQueue(bool random, struct queue_ops *ops) { - queue_init(this, Q_ENABLED | (random ? Q_RANDOM : 0), NULL); + unsigned int flags = Q_ENABLED | Q_SAVE_FLAGS | Q_SAVE_SORT; + queue_init(this, flags | (random ? Q_RANDOM : 0), ops); } -void TempQueue :: set_flag(queue_flags flag) -{ - queue :: set_flag(flag); - deck :: write(); -} - -void TempQueue :: unset_flag(queue_flags flag) -{ - queue :: unset_flag(flag); - deck :: write(); -} - unsigned int TempQueue :: add(struct track *track) { unsigned int res = queue :: add(track); @@ -65,12 +54,6 @@ void TempQueue :: del(unsigned int id) deck :: write(); } -void TempQueue :: sort(compare_t field, bool ascending) -{ - queue :: sort(field, ascending); - deck :: write(); -} - static void upgrade_v0() { @@ -90,7 +73,7 @@ static void upgrade_v0() } } -void deck :: init() +void deck :: init(struct queue_ops *ops) { unsigned int num; bool upgraded = false; @@ -110,8 +93,10 @@ void deck :: init() file_readf(&deck_file, "%u", &num); queue_deck.resize(num); - for (it = queue_deck.begin(); it != queue_deck.end(); it++) + for (it = queue_deck.begin(); it != queue_deck.end(); it++) { it->read(deck_file); + it->q_ops = ops; + } file_close(&deck_file); if (upgraded) @@ -134,9 +119,14 @@ void deck :: write() file_close(&deck_file); } -queue *deck :: create(bool random) +void deck :: save(struct queue *queue, enum queue_flags flag) { - queue_deck.push_back(TempQueue(random)); + deck :: write(); +} + +queue *deck :: create(bool random, struct queue_ops *ops) +{ + queue_deck.push_back(TempQueue(random, ops)); return &queue_deck.back(); } diff --git a/gui/ocarina.cpp b/gui/ocarina.cpp index 2f9a53f4..122612fd 100644 --- a/gui/ocarina.cpp +++ b/gui/ocarina.cpp @@ -12,6 +12,7 @@ static Glib::RefPtr ocarina_app; struct core_init_data init_data = { &collection_ops, + &tempq_ops, }; namespace gui diff --git a/gui/tabs.cpp b/gui/tabs.cpp index 56fdfb00..27cd48a1 100644 --- a/gui/tabs.cpp +++ b/gui/tabs.cpp @@ -21,6 +21,10 @@ static compare_t sort_fields[] = { }; +struct queue_ops tempq_ops = { + deck :: save, +}; + /** * @@ -168,7 +172,7 @@ bool Tab :: tab_queue_selected(bool random) if (deck :: get_queues().size() >= 10) return true; - queue *pq = deck :: create(random); + queue *pq = deck :: create(random, &tempq_ops); on_pq_created(pq, deck :: get_queues().size() - 1); tab_queue_add(pq); return true; diff --git a/include/core/core.h b/include/core/core.h index ce595ab9..60086be4 100644 --- a/include/core/core.h +++ b/include/core/core.h @@ -9,6 +9,7 @@ struct core_init_data { struct queue_ops *collection_ops; + struct queue_ops *tempq_ops; }; /** diff --git a/include/core/deck.h b/include/core/deck.h index a576710b..835e4ed9 100644 --- a/include/core/deck.h +++ b/include/core/deck.h @@ -16,16 +16,11 @@ class TempQueue : public queue { public: TempQueue(); - TempQueue(bool random); - - void set_flag(queue_flags); - void unset_flag(queue_flags); + TempQueue(bool, struct queue_ops *); unsigned int add(struct track *); void del(struct track *); void del(unsigned int); - - void sort(compare_t, bool); }; @@ -46,12 +41,13 @@ namespace deck /** * Read the deck file from disk and restore the queues. */ - void init(); + void init(struct queue_ops *); /** * Save the current queues to a file on disk. */ void write(); + void save(struct queue *, enum queue_flags); /** * Create a new queue at the end of the deck. @@ -60,7 +56,7 @@ namespace deck * track when queue->next() is called. * @return The newly created queue. */ - queue *create(bool); + queue *create(bool, struct queue_ops *); /** * Removes the queue from the deck. diff --git a/include/gui/ocarina.h b/include/gui/ocarina.h index 9ce0d629..ba580e6b 100644 --- a/include/gui/ocarina.h +++ b/include/gui/ocarina.h @@ -31,6 +31,7 @@ namespace gui } extern struct queue_ops collection_ops; +extern struct queue_ops tempq_ops; void on_pq_created(queue *, unsigned int); void post_init_queue_tabs(); diff --git a/tests/core/audio.cpp b/tests/core/audio.cpp index 8fb7e2ea..dbc76759 100644 --- a/tests/core/audio.cpp +++ b/tests/core/audio.cpp @@ -89,7 +89,7 @@ void test_init() filter_init(); tags_init(); collection :: init(NULL); - deck :: init(); + deck :: init(NULL); audio :: init(); track = audio :: current_track(); diff --git a/tests/core/deck.cpp b/tests/core/deck.cpp index c8f8a01e..a554d996 100644 --- a/tests/core/deck.cpp +++ b/tests/core/deck.cpp @@ -24,7 +24,7 @@ static void test_init() filter_init(); tags_init(); collection :: init(NULL); - deck :: init(); + deck :: init(NULL); test_equal(queue_has_flag(collection :: get_queue(), Q_RANDOM), true); test_equal(deck :: get_queues().size(), (size_t)2); @@ -76,7 +76,7 @@ static void test_create_mv_destroy() { queue *q1, *q2; - q1 = deck :: create(true); + q1 = deck :: create(true, NULL); q1->q_notify = &test_notifier; test_not_equal(q1, Q_NULL); test_equal(queue_has_flag(q1, Q_ENABLED), true); @@ -84,7 +84,7 @@ static void test_create_mv_destroy() test_equal(deck :: index(q1), (unsigned)2); test_equal(deck :: get(2), q1); - q2 = deck :: create(false); + q2 = deck :: create(false, NULL); q2->q_notify = &test_notifier; test_not_equal(q2, Q_NULL); test_equal(queue_has_flag(q2, Q_ENABLED), true);