libsaria: Track recent songs using a playlist
This way people can see what has played recently and directly select from a list. Generic playlist classes are awesome! Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
parent
e5b91a5de9
commit
3b3beb4625
|
@ -46,6 +46,7 @@ namespace libsaria
|
|||
Track *pick_sequential();
|
||||
void add_sorted(list<Track *> &);
|
||||
void add_to_end(list<Track *> &);
|
||||
void add_to_front(list<Track *> &);
|
||||
|
||||
public:
|
||||
Playlist(string, unsigned int);
|
||||
|
@ -54,6 +55,7 @@ namespace libsaria
|
|||
|
||||
bool is_static();
|
||||
void prepare_for_removal();
|
||||
void reset_iterator();
|
||||
|
||||
virtual Track *next() = 0;
|
||||
string &get_name();
|
||||
|
@ -82,6 +84,15 @@ namespace libsaria
|
|||
void add_tracks(list<Track *> &);
|
||||
};
|
||||
|
||||
class List : public Playlist {
|
||||
public:
|
||||
List(string, unsigned int);
|
||||
~List();
|
||||
|
||||
Track *next();
|
||||
void add_tracks(list<Track *> &);
|
||||
};
|
||||
|
||||
}; /* Namespace: libsaria */
|
||||
|
||||
#endif /* LIBSARIA_PLAYLIST_H */
|
||||
|
|
|
@ -14,6 +14,9 @@ namespace libsaria
|
|||
|
||||
void push(Playlist *);
|
||||
void next();
|
||||
void prev();
|
||||
void init();
|
||||
Playlist *get_recent_plist();
|
||||
|
||||
};
|
||||
|
||||
|
@ -21,10 +24,6 @@ namespace libsaria
|
|||
void set_on_new_playlist(void (*)(Playlist *));
|
||||
void create_new_playlist(list<Track *> &, PlaylistType);
|
||||
|
||||
Playlist *stack_top();
|
||||
void stack_top_pop();
|
||||
void stack_init();
|
||||
|
||||
}; /* Namespace: libsaria */
|
||||
|
||||
#endif /* LIBSARIA_PLAYLIST_STACK_H */
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include <libsaria/print.h>
|
||||
#include <libsaria/audio.h>
|
||||
#include <libsaria/track.h>
|
||||
#include <libsaria/stack.h>
|
||||
#include <libsaria/idle.h>
|
||||
#include <libsaria/fs.h>
|
||||
/*#include <libsaria/audio.h>
|
||||
|
@ -41,6 +42,7 @@ namespace libsaria
|
|||
/*println("saria dir: %s", get_saria_dir().c_str());
|
||||
make_saria_dir();*/
|
||||
|
||||
libsaria::stack::init();
|
||||
libsaria::library::init();
|
||||
/*libsaria::stack_init();*/
|
||||
}
|
||||
|
|
|
@ -60,4 +60,18 @@ namespace libsaria
|
|||
RENDER(insert_done());
|
||||
}
|
||||
|
||||
void Playlist::add_to_front(list<Track *> &tracks)
|
||||
{
|
||||
list<Track *>::iterator it;
|
||||
RENDER(insert_prepare());
|
||||
|
||||
tracks.reverse();
|
||||
for (it = tracks.begin(); it != tracks.end(); it++) {
|
||||
plist.push_front(*it);
|
||||
RENDER( insert(*it, 0) );
|
||||
}
|
||||
|
||||
RENDER(insert_done());
|
||||
}
|
||||
|
||||
}; /* namespace: libsaria */
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
// Copyright (c) 2012 Bryan Schumaker.
|
||||
#include <libsaria/playlist.h>
|
||||
|
||||
namespace libsaria
|
||||
{
|
||||
|
||||
List::List(string name, unsigned int flags) : Playlist(name, flags)
|
||||
{
|
||||
}
|
||||
|
||||
List::~List()
|
||||
{
|
||||
}
|
||||
|
||||
void List::add_tracks(list<Track *> &tracks)
|
||||
{
|
||||
add_to_front(tracks);
|
||||
}
|
||||
|
||||
Track *List::next()
|
||||
{
|
||||
return pick_sequential();
|
||||
}
|
||||
|
||||
}; /* Namespace: libsaria */
|
|
@ -54,4 +54,9 @@ namespace libsaria
|
|||
renderer = r;
|
||||
}
|
||||
|
||||
void Playlist::reset_iterator()
|
||||
{
|
||||
cur = plist.begin();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ static unsigned int next_playlist = 0;
|
|||
static void (*on_new_playlist)(libsaria::Playlist *) = NULL;
|
||||
|
||||
static list<libsaria::Playlist *> playlist_stack;
|
||||
static libsaria::List recent_plist("Recent", PL_STATIC | PL_NO_DRAIN);
|
||||
|
||||
static string get_next_name()
|
||||
{
|
||||
|
@ -20,6 +21,14 @@ static string get_next_name()
|
|||
return s.str();
|
||||
}
|
||||
|
||||
static void list_recent_track(libsaria::Track *track)
|
||||
{
|
||||
list<libsaria::Track *> tracks;
|
||||
tracks.push_back(track);
|
||||
recent_plist.add_tracks(tracks);
|
||||
recent_plist.reset_iterator();
|
||||
}
|
||||
|
||||
namespace libsaria
|
||||
{
|
||||
|
||||
|
@ -32,8 +41,10 @@ namespace libsaria
|
|||
{
|
||||
Playlist *plist = playlist_stack.front();
|
||||
Track *track = plist->next();
|
||||
if (track)
|
||||
if (track) {
|
||||
track->play_now();
|
||||
list_recent_track(track);
|
||||
}
|
||||
|
||||
if ((plist->get_size() == 0) && (plist->is_static() == false)) {
|
||||
println("Removing non-static playlist");
|
||||
|
@ -43,6 +54,13 @@ namespace libsaria
|
|||
};
|
||||
}
|
||||
|
||||
void stack::prev()
|
||||
{
|
||||
Track *track = recent_plist.next();
|
||||
if (track)
|
||||
track->play_now();
|
||||
}
|
||||
|
||||
void set_on_new_playlist(void (*func)(Playlist *))
|
||||
{
|
||||
on_new_playlist = func;
|
||||
|
@ -68,19 +86,14 @@ namespace libsaria
|
|||
next_playlist++;
|
||||
}
|
||||
|
||||
Playlist *stack_top()
|
||||
void stack::init()
|
||||
{
|
||||
return playlist_stack.front();
|
||||
push(&recent_plist);
|
||||
}
|
||||
|
||||
void stack_top_pop()
|
||||
Playlist *stack::get_recent_plist()
|
||||
{
|
||||
//Playlist *plist = playlist_stack.front();
|
||||
/*if (plist->size() == 0) {
|
||||
plist->delete_renderer();
|
||||
delete plist;
|
||||
playlist_stack.pop_front();
|
||||
}*/
|
||||
return &recent_plist;
|
||||
}
|
||||
|
||||
}; /* Namespace: libsaria */
|
||||
|
|
Loading…
Reference in New Issue