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:
parent
9451a41ff1
commit
be5d028fcf
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ static Glib::RefPtr<Gtk::Application> ocarina_app;
|
|||
|
||||
struct core_init_data init_data = {
|
||||
&collection_ops,
|
||||
&tempq_ops,
|
||||
};
|
||||
|
||||
namespace gui
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
|
||||
struct core_init_data {
|
||||
struct queue_ops *collection_ops;
|
||||
struct queue_ops *tempq_ops;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue