libsaria: Save a playlist whenever it changes

With this change, my old queue code no longer saves itself.  Instead, it
only sends out QUEUE_REFRESH notifications.

Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
Bryan Schumaker 2012-02-18 11:59:01 -05:00 committed by Bryan Schumaker
parent 00274a836f
commit 57c8fcf030
5 changed files with 27 additions and 1 deletions

View File

@ -22,6 +22,7 @@ namespace libsaria
~Playlist();
void load();
void save();
void add_ids(list<sid_t> &);
void rm_ids(list<sid_t> &);
unsigned int size();

View File

@ -1,4 +1,5 @@
// Copyright (c) 2012 Bryan Schumaker.
#include <libsaria/files.h>
#include <libsaria/playlist.h>
namespace libsaria
@ -20,6 +21,16 @@ namespace libsaria
}
}
void Playlist::save()
{
OutFile out("queue.q");
list<sid_t>::iterator it;
out << plist.size() << "\n";
for (it = plist.begin(); it != plist.end(); it++)
out << (*it) << "\n";
}
}; /* Namespace: libsaria */
void load_playlist(void *plist)
@ -28,3 +39,14 @@ void load_playlist(void *plist)
playlist->load();
}
static void do_save_playlist(void *plist)
{
libsaria::Playlist *playlist = (libsaria::Playlist *)plist;
playlist->save();
}
void save_playlist(void *plist)
{
SaveTask *task = new SaveTask(do_save_playlist, plist);
task->queue();
}

View File

@ -20,12 +20,14 @@ namespace libsaria
void Playlist::add_ids(list<sid_t> &ids)
{
plist.insert(plist.end(), ids.begin(), ids.end());
save_playlist(this);
}
void Playlist::rm_ids(list<sid_t> &ids)
{
for (it = ids.begin(); it != ids.end(); it++)
plist.remove(*it);
save_playlist(this);
}
unsigned int Playlist::size()
@ -37,6 +39,7 @@ namespace libsaria
{
sid_t id = plist.front();
plist.pop_front();
save_playlist(this);
return id;
}

View File

@ -3,5 +3,6 @@
#define LIBSARIA_PLAYLIST_INTERNAL_H
void load_playlist(void *);
void save_playlist(void *);
#endif /* LIBSARIA_PLAYLIST_INTERNAL_H */

View File

@ -14,7 +14,6 @@ libsaria::Playlist q_queue("queue.q");
static void save_and_refresh()
{
trigger_callback(QUEUE_REFRESH);
libsaria::queue::save();
}
namespace libsaria