libsaria: Restore last song on startup

Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
Bryan Schumaker 2012-05-07 08:08:23 -04:00
parent a8c6aabff7
commit b04aaf3815
4 changed files with 50 additions and 0 deletions

View File

@ -16,6 +16,16 @@ class IdleTask
void queue_front();
};
class IdleCallback : public IdleTask
{
private:
void (*func)();
public:
IdleCallback(void (*)());
~IdleCallback();
void run_task();
};
class WriteTask : public IdleTask
{
private:

View File

@ -23,3 +23,19 @@ bool IdleTask::should_cancel(void *data)
{
return false;
}
IdleCallback::IdleCallback(void (*f)())
{
func = f;
}
IdleCallback::~IdleCallback()
{
}
void IdleCallback::run_task()
{
func();
}

View File

@ -1,8 +1,11 @@
// Copyright (c) 2011 Bryan Schumaker.
#include <libsaria/playlist.h>
#include <libsaria/library.h>
#include <libsaria/audio.h>
#include <libsaria/track.h>
#include <libsaria/prefs.h>
#include <libsaria/deck.h>
#include <libsaria/idle.h>
#include <libsaria/fs.h>
#include "library.h"
@ -55,6 +58,17 @@ void pop_path(libsaria::library::Path *path)
}
}
void restore_current()
{
unsigned int l_id = libsaria::prefs::get("libsaria.current.library");
unsigned int t_id = libsaria::prefs::get("libsaria.current.track");
libsaria::Track *track = libsaria::library::lookup(l_id, t_id);
if (track) {
track->play_now();
libsaria::audio::pause();
}
}
namespace libsaria
{
@ -133,9 +147,14 @@ namespace libsaria
void library::init()
{
IdleCallback *task;
app::mkdir("library");
next_id = schedule_load();
deck::push_back(&lib_playlist);
task = new IdleCallback(restore_current);
task->queue();
}
}; /* namespace: libsaria */

View File

@ -2,6 +2,7 @@
#include <libsaria/format.h>
#include <libsaria/track.h>
#include <libsaria/audio.h>
#include <libsaria/prefs.h>
#include <libsaria/print.h>
#include <taglib/tag.h>
@ -140,6 +141,10 @@ namespace libsaria
void Track::play_now()
{
println("Playing: " + title + " by " + artist);
if (path) {
prefs::set("libsaria.current.library", path->id);
prefs::set("libsaria.current.track", id);
}
audio::load(filepath);
audio::play();
cur = this;