playlist: Create a playqueue to store the current playlist
Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
This commit is contained in:
parent
3fb8dfa534
commit
3894c4ac97
|
@ -108,6 +108,7 @@ namespace library
|
|||
|
||||
|
||||
struct Song {
|
||||
unsigned int track_id;
|
||||
library :: Album *album;
|
||||
library :: AGInfo *artist;
|
||||
library :: AGInfo *genre;
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
#ifndef OCARINA_PLAYLIST_H
|
||||
#define OCARINA_PLAYLIST_H
|
||||
|
||||
#include <playqueue.h>
|
||||
|
||||
#include <list>
|
||||
#include <set>
|
||||
#include <string>
|
||||
|
@ -14,7 +16,9 @@ namespace playlist
|
|||
void init();
|
||||
void add(const std::string &, unsigned int);
|
||||
void del(const std::string &, unsigned int);
|
||||
void select(const std::string &);
|
||||
const std::set<unsigned int> &get_tracks(const std::string &);
|
||||
Playqueue *get_pq();
|
||||
|
||||
#ifdef CONFIG_TEST
|
||||
void clear();
|
||||
|
|
|
@ -564,6 +564,7 @@ void library :: lookup(unsigned int id, library :: Song *song)
|
|||
if (song->track->valid == false)
|
||||
throw -E_EXIST;
|
||||
|
||||
song->track_id = id;
|
||||
song->artist = &artist_db[song->track->artist_id];
|
||||
song->album = &album_db[song->track->album_id];
|
||||
song->genre = &genre_db[song->track->genre_id];
|
||||
|
|
|
@ -7,10 +7,26 @@
|
|||
|
||||
static std::set<unsigned int> empty_set;
|
||||
static Database<IndexEntry> playlist_db("playlist.db");
|
||||
static Playqueue playlist_pq(PQ_ENABLED);
|
||||
static std::string cur_pq;
|
||||
|
||||
void playlist :: init()
|
||||
{
|
||||
std::set<unsigned int> ids;
|
||||
std::set<unsigned int>::iterator it;
|
||||
|
||||
playlist_pq.add_sort(SORT_ARTIST);
|
||||
playlist_pq.add_sort(SORT_YEAR);
|
||||
playlist_pq.add_sort(SORT_TRACK);
|
||||
playlist_pq.set_flag(PQ_NEVER_SORT);
|
||||
|
||||
playlist_db.load();
|
||||
if (cur_pq == "")
|
||||
return;
|
||||
|
||||
ids = get_tracks(cur_pq);
|
||||
for (it = ids.begin(); it != ids.end(); it++)
|
||||
playlist_pq.add(*it);
|
||||
}
|
||||
|
||||
void playlist :: add(const std::string &name, unsigned int track_id)
|
||||
|
@ -18,6 +34,8 @@ void playlist :: add(const std::string &name, unsigned int track_id)
|
|||
if ((name == "Banned") || (name == "Favorites")) {
|
||||
index_insert(playlist_db, name, track_id);
|
||||
playlist_db.save();
|
||||
if (name == cur_pq)
|
||||
playlist_pq.add(track_id);
|
||||
} else
|
||||
throw -E_EXIST;
|
||||
}
|
||||
|
@ -27,10 +45,25 @@ void playlist :: del(const std::string &name, unsigned int track_id)
|
|||
if ((name == "Banned") || (name == "Favorites")) {
|
||||
index_remove(playlist_db, name, track_id);
|
||||
playlist_db.save();
|
||||
if (name == cur_pq)
|
||||
playlist_pq.del_track(track_id);
|
||||
} else
|
||||
throw -E_EXIST;
|
||||
}
|
||||
|
||||
void playlist :: select(const std::string &name)
|
||||
{
|
||||
std::set<unsigned int> ids = get_tracks(name);
|
||||
std::set<unsigned int>::iterator it;
|
||||
|
||||
while (playlist_pq.size() > 0)
|
||||
playlist_pq.del(0);
|
||||
|
||||
for (it = ids.begin(); it != ids.end(); it++)
|
||||
playlist_pq.add(*it);
|
||||
cur_pq = name;
|
||||
}
|
||||
|
||||
const std::set<unsigned int> &playlist :: get_tracks(const std::string &name)
|
||||
{
|
||||
if ((name == "Banned") || (name == "Favorites")) {
|
||||
|
@ -43,6 +76,11 @@ const std::set<unsigned int> &playlist :: get_tracks(const std::string &name)
|
|||
throw -E_EXIST;
|
||||
}
|
||||
|
||||
Playqueue *playlist :: get_pq()
|
||||
{
|
||||
return &playlist_pq;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_TEST
|
||||
void playlist :: clear()
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue