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:
Anna Schumaker 2014-01-24 21:43:18 -05:00 committed by Anna Schumaker
parent e7ecbeacda
commit a98443872c
6 changed files with 30 additions and 12 deletions

View File

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

View File

@ -10,8 +10,8 @@ namespace deck
{
void init();
void read(File &);
void write(File &);
void read();
void write();
Playqueue *create();
void remove(unsigned int);

View File

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

View File

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

View File

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

View File

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