core/deck: Wire up the qop_save() function

So temporary queues can save when flags change or when sorted.

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2015-11-24 09:08:20 -05:00
parent 9451a41ff1
commit be5d028fcf
9 changed files with 31 additions and 38 deletions

View File

@ -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();
}

View File

@ -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();
}

View File

@ -12,6 +12,7 @@ static Glib::RefPtr<Gtk::Application> ocarina_app;
struct core_init_data init_data = {
&collection_ops,
&tempq_ops,
};
namespace gui

View File

@ -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;

View File

@ -9,6 +9,7 @@
struct core_init_data {
struct queue_ops *collection_ops;
struct queue_ops *tempq_ops;
};
/**

View File

@ -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.

View File

@ -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();

View File

@ -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();

View File

@ -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);