deck: Save the deck whenever a queue changes
I read in the saved file when init() is called. Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
This commit is contained in:
parent
e7ecbeacda
commit
a98443872c
|
@ -24,6 +24,7 @@ struct Callbacks {
|
|||
/* Playqueue callbacks */
|
||||
void (*on_queue_track_add)(Playqueue *, unsigned int);
|
||||
void (*on_queue_track_del)(Playqueue *, unsigned int);
|
||||
void (*on_queue_changed)();
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -10,8 +10,8 @@ namespace deck
|
|||
{
|
||||
|
||||
void init();
|
||||
void read(File &);
|
||||
void write(File &);
|
||||
void read();
|
||||
void write();
|
||||
|
||||
Playqueue *create();
|
||||
void remove(unsigned int);
|
||||
|
|
|
@ -25,6 +25,7 @@ static struct Callbacks callbacks = {
|
|||
|
||||
.on_queue_track_add = no_op,
|
||||
.on_queue_track_del = no_op,
|
||||
.on_queue_changed = no_op,
|
||||
};
|
||||
|
||||
|
||||
|
|
27
lib/deck.cpp
27
lib/deck.cpp
|
@ -4,12 +4,14 @@
|
|||
#include <callback.h>
|
||||
#include <deck.h>
|
||||
#include <error.h>
|
||||
#include <file.h>
|
||||
#include <print.h>
|
||||
|
||||
#include <list>
|
||||
|
||||
static std::list<Playqueue> playqueue_deck;
|
||||
static Playqueue library_playqueue(PQ_ENABLED);
|
||||
static File deck_file("deck", FILE_TYPE_DATA);
|
||||
|
||||
static void add_library_track(unsigned int id)
|
||||
{
|
||||
|
@ -26,15 +28,21 @@ void deck :: init()
|
|||
library_playqueue.set_flag(PQ_REPEAT);
|
||||
get_callbacks()->on_library_track_add = add_library_track;
|
||||
get_callbacks()->on_library_track_del = del_library_track;
|
||||
get_callbacks()->on_queue_changed = write;
|
||||
read();
|
||||
}
|
||||
|
||||
void deck :: read(File &f)
|
||||
void deck :: read()
|
||||
{
|
||||
unsigned int num;
|
||||
bool random;
|
||||
std::list<Playqueue>::iterator it;
|
||||
|
||||
f >> random >> num;
|
||||
if (!deck_file.exists())
|
||||
return;
|
||||
|
||||
deck_file.open(OPEN_READ);
|
||||
deck_file >> random >> num;
|
||||
|
||||
if (random)
|
||||
library_playqueue.set_flag(PQ_RANDOM);
|
||||
|
@ -42,19 +50,22 @@ void deck :: read(File &f)
|
|||
playqueue_deck.resize(num);
|
||||
|
||||
for (it = playqueue_deck.begin(); it != playqueue_deck.end(); it++)
|
||||
it->read(f);
|
||||
it->read(deck_file);
|
||||
deck_file.close();
|
||||
}
|
||||
|
||||
void deck :: write(File &f)
|
||||
void deck :: write()
|
||||
{
|
||||
std::list<Playqueue>::iterator it;
|
||||
|
||||
f << (library_playqueue.get_flags() & PQ_RANDOM) << " ";
|
||||
f << playqueue_deck.size() << std :: endl;
|
||||
deck_file.open(OPEN_WRITE);
|
||||
deck_file << (library_playqueue.get_flags() & PQ_RANDOM) << " ";
|
||||
deck_file << playqueue_deck.size() << std :: endl;
|
||||
for (it = playqueue_deck.begin(); it != playqueue_deck.end(); it++) {
|
||||
it->write(f);
|
||||
f << std::endl;
|
||||
it->write(deck_file);
|
||||
deck_file << std::endl;
|
||||
}
|
||||
deck_file.close();
|
||||
}
|
||||
|
||||
Playqueue *deck :: create()
|
||||
|
|
|
@ -45,11 +45,13 @@ void Playqueue :: read(File &f)
|
|||
void Playqueue :: set_flag(playqueue_flags f)
|
||||
{
|
||||
flags |= f;
|
||||
get_callbacks()->on_queue_changed();
|
||||
}
|
||||
|
||||
void Playqueue :: unset_flag(playqueue_flags f)
|
||||
{
|
||||
flags &= ~f;
|
||||
get_callbacks()->on_queue_changed();
|
||||
}
|
||||
|
||||
const unsigned int Playqueue :: get_flags()
|
||||
|
@ -103,6 +105,7 @@ unsigned int Playqueue :: add(unsigned int track_id)
|
|||
library :: lookup(track_id, &song);
|
||||
length += song.track->length;
|
||||
get_callbacks()->on_queue_track_add(this, id);
|
||||
get_callbacks()->on_queue_changed();
|
||||
return id;
|
||||
}
|
||||
|
||||
|
@ -114,6 +117,7 @@ unsigned int Playqueue :: add_front(unsigned int track_id)
|
|||
library :: lookup(track_id, &song);
|
||||
length += song.track->length;
|
||||
get_callbacks()->on_queue_track_add(this, 0);
|
||||
get_callbacks()->on_queue_changed();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -126,6 +130,7 @@ void Playqueue :: del(unsigned int plist_id)
|
|||
library :: lookup(track_id, &song);
|
||||
length -= song.track->length;
|
||||
get_callbacks()->on_queue_track_del(this, plist_id);
|
||||
get_callbacks()->on_queue_changed();
|
||||
}
|
||||
|
||||
void Playqueue :: del_track(unsigned int track_id)
|
||||
|
|
|
@ -102,7 +102,7 @@ void test_5()
|
|||
|
||||
print("Saving playqueue deck\n");
|
||||
f.open(OPEN_WRITE);
|
||||
deck :: write(f);
|
||||
deck :: write();
|
||||
f.close();
|
||||
|
||||
print("Clearing deck\n");
|
||||
|
@ -111,7 +111,7 @@ void test_5()
|
|||
|
||||
print("Reading back playqueue deck\n");
|
||||
f.open(OPEN_READ);
|
||||
deck :: read(f);
|
||||
deck :: read();
|
||||
f.close();
|
||||
|
||||
deck :: print_info();
|
||||
|
|
Loading…
Reference in New Issue