libsaria: Reload playlists on startup
I do this in another idle task, I also had to give the library a function to find tracks based on (libid, trackid). Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
parent
60d2e4fcd8
commit
0d05e14724
|
@ -28,6 +28,7 @@ namespace libsaria
|
|||
void set_pause_type(AutoPauseType, unsigned int);
|
||||
AutoPauseType get_pause_type();
|
||||
unsigned short get_pause_count();
|
||||
void load_all();
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@ namespace libsaria
|
|||
void add_path(string);
|
||||
void delete_path(Path *);
|
||||
void update_path(Path *);
|
||||
Track *lookup(unsigned int, unsigned int);
|
||||
Playlist *get_playlist();
|
||||
|
||||
}
|
||||
|
|
|
@ -95,6 +95,27 @@ namespace libsaria
|
|||
do_update_path(&(*it));
|
||||
}
|
||||
|
||||
Track *library::lookup(unsigned int libid, unsigned int trackid)
|
||||
{
|
||||
list<Path>::iterator p_it;
|
||||
list<Track>::iterator t_it;
|
||||
|
||||
for (p_it = path_list.begin(); p_it != path_list.end(); p_it++) {
|
||||
if (p_it->id == libid)
|
||||
break;
|
||||
}
|
||||
if (p_it == path_list.end())
|
||||
return NULL;
|
||||
|
||||
for (t_it = p_it->tracks.begin(); t_it != p_it->tracks.end(); t_it++) {
|
||||
if (t_it->get_id() == trackid)
|
||||
break;
|
||||
}
|
||||
if (t_it == p_it->tracks.end())
|
||||
return NULL;
|
||||
return &(*t_it);
|
||||
}
|
||||
|
||||
Playlist *library::get_playlist()
|
||||
{
|
||||
return &lib_playlist;
|
||||
|
|
|
@ -45,6 +45,7 @@ namespace libsaria
|
|||
|
||||
libsaria::deck::init();
|
||||
libsaria::library::init();
|
||||
libsaria::deck::load_all();
|
||||
/*libsaria::stack_init();*/
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
// Copyright (c) 2012 Bryan Schumaker.
|
||||
#include <libsaria/playlist.h>
|
||||
#include <libsaria/track.h>
|
||||
#include <libsaria/print.h>
|
||||
#include <libsaria/deck.h>
|
||||
#include <libsaria/idle.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
using namespace std;
|
||||
|
@ -16,19 +19,40 @@ static string number_to_filename(unsigned int id)
|
|||
return s.str();
|
||||
}
|
||||
|
||||
|
||||
/*static void load_playlist(void *plist)
|
||||
{
|
||||
libsaria::Playlist *playlist = (libsaria::Playlist *)plist;
|
||||
playlist->do_load();
|
||||
}*/
|
||||
|
||||
static void save_playlist(ofstream &stream, void *plist)
|
||||
{
|
||||
libsaria::Playlist *playlist = (libsaria::Playlist *)plist;
|
||||
playlist->save(stream);
|
||||
}
|
||||
|
||||
void read_plist(ifstream &stream)
|
||||
{
|
||||
unsigned int version, type, size;
|
||||
unsigned int libid, trackid;
|
||||
list<libsaria::Track *> tracks;
|
||||
libsaria::Track *track;
|
||||
|
||||
stream >> version >> type >> size;
|
||||
println("playlist type: %u size: %u", type, size);
|
||||
|
||||
for (unsigned int i = 0; i < size; i++) {
|
||||
stream >> libid >> trackid;
|
||||
track = libsaria::library::lookup(libid, trackid);
|
||||
if (track)
|
||||
tracks.push_back(track);
|
||||
}
|
||||
|
||||
if (tracks.size() > 0)
|
||||
libsaria::create_new_playlist(tracks, (PlaylistType)type);
|
||||
}
|
||||
|
||||
static bool compare_plists(string one, string two)
|
||||
{
|
||||
unsigned int a = atoi(one.c_str());
|
||||
unsigned int b = atoi(two.c_str());
|
||||
return a < b;
|
||||
}
|
||||
|
||||
namespace libsaria
|
||||
{
|
||||
|
||||
|
@ -66,57 +90,20 @@ namespace libsaria
|
|||
app::rm(filepath);
|
||||
}
|
||||
|
||||
/*void Playlist::do_load()
|
||||
void deck::load_all()
|
||||
{
|
||||
unsigned int size;
|
||||
//sid_t songid;
|
||||
InFile in(filename);
|
||||
list<string> plists;
|
||||
list<string>::iterator it;
|
||||
|
||||
if (!in.good())
|
||||
libsaria::app::list_dir(plistdir, plists);
|
||||
if (plists.size() == 0)
|
||||
return;
|
||||
in >> size;*/
|
||||
plists.sort(compare_plists);
|
||||
|
||||
/*for (unsigned int i = 0; i < size; i++) {
|
||||
in >> songid;
|
||||
//plist.push_back(library::lookup(songid));
|
||||
}*/
|
||||
/*}
|
||||
|
||||
void Playlist::load()
|
||||
{
|
||||
IOTask *task;
|
||||
|
||||
if (filename == "")
|
||||
return;
|
||||
|
||||
task = new IOTask(load_playlist, this);
|
||||
task->queue();
|
||||
for (it = plists.begin(); it != plists.end(); it++) {
|
||||
println("Reading plist path: " + plistdir + "/" + (*it));
|
||||
libsaria::app::read(plistdir + "/" + (*it), read_plist);
|
||||
}
|
||||
}
|
||||
|
||||
void Playlist::do_save()
|
||||
{
|
||||
OutFile out(filename);
|
||||
list<Track *>::iterator it;
|
||||
|
||||
out << plist.size() << "\n";*/
|
||||
/*for (it = plist.begin(); it != plist.end(); it++)
|
||||
out << (*it)->get_songid() << "\n";*/
|
||||
/* }
|
||||
|
||||
void Playlist::save()
|
||||
{
|
||||
IOTask *task;
|
||||
|
||||
if (filename == "")
|
||||
return;
|
||||
|
||||
if (size() == 0) {
|
||||
remove_file(filename);
|
||||
return;
|
||||
}
|
||||
|
||||
task = new IOTask(save_playlist, this);
|
||||
task->queue();
|
||||
}*/
|
||||
|
||||
}; /* Namespace: libsaria */
|
||||
|
|
Loading…
Reference in New Issue