libsaria: Change playlists to a list of Track pointers
This allows more direct access to each item in the list. It also speeds up sorting, since I don't need to keep looking up the same tracks over and over again in the library. Siged-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
parent
7b6ecfdd99
commit
8af182fac9
|
@ -14,8 +14,8 @@ namespace libsaria
|
|||
class Playlist {
|
||||
private:
|
||||
string filename;
|
||||
list<sid_t> plist;
|
||||
list<sid_t>::iterator it;
|
||||
list<Track *> plist;
|
||||
list<Track *>::iterator it;
|
||||
|
||||
public:
|
||||
Playlist();
|
||||
|
@ -34,7 +34,7 @@ namespace libsaria
|
|||
|
||||
void sort();
|
||||
unsigned int size();
|
||||
sid_t next();
|
||||
Track *next();
|
||||
|
||||
/* Iterator functions */
|
||||
void iter_reset();
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (c) 2012 Bryan Schumaker.
|
||||
#include <libsaria/files.h>
|
||||
#include <libsaria/library.h>
|
||||
#include <libsaria/playlist.h>
|
||||
|
||||
static void load_playlist(void *plist)
|
||||
|
@ -29,7 +30,7 @@ namespace libsaria
|
|||
|
||||
for (unsigned int i = 0; i < size; i++) {
|
||||
in >> songid;
|
||||
plist.push_back(songid);
|
||||
plist.push_back(library::get_info(songid));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -45,11 +46,11 @@ namespace libsaria
|
|||
void Playlist::do_save()
|
||||
{
|
||||
OutFile out("queue.q");
|
||||
list<sid_t>::iterator it;
|
||||
list<Track *>::iterator it;
|
||||
|
||||
out << plist.size() << "\n";
|
||||
for (it = plist.begin(); it != plist.end(); it++)
|
||||
out << (*it) << "\n";
|
||||
out << (*it)->get_songid() << "\n";
|
||||
}
|
||||
|
||||
void Playlist::save()
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
// Copyright (c) 2012 Bryan Schumaker.
|
||||
|
||||
#include <libsaria/library.h>
|
||||
#include <libsaria/playlist.h>
|
||||
|
||||
namespace libsaria
|
||||
|
@ -13,7 +12,7 @@ namespace libsaria
|
|||
|
||||
Track *Playlist::iter_next()
|
||||
{
|
||||
Track *track = library::get_info(*it);
|
||||
Track *track = *it;
|
||||
it++;
|
||||
return track;
|
||||
}
|
||||
|
|
|
@ -3,12 +3,10 @@
|
|||
#include <libsaria/library.h>
|
||||
#include <libsaria/playlist.h>
|
||||
|
||||
static bool compare_tracks(sid_t one, sid_t two)
|
||||
static bool compare_tracks(libsaria::Track *one, libsaria::Track *two)
|
||||
{
|
||||
libsaria::Track *t_1 = libsaria::library::get_info(one);
|
||||
libsaria::Track *t_2 = libsaria::library::get_info(two);
|
||||
/* I want to compare tracks and not pointers */
|
||||
return *t_1 < *t_2;
|
||||
return *one < *two;
|
||||
}
|
||||
|
||||
namespace libsaria
|
||||
|
@ -30,26 +28,29 @@ namespace libsaria
|
|||
|
||||
void Playlist::add_ids(list<sid_t> &ids)
|
||||
{
|
||||
plist.insert(plist.end(), ids.begin(), ids.end());
|
||||
list<sid_t>::iterator it;
|
||||
for (it = ids.begin(); it != ids.end(); it++)
|
||||
plist.push_back(library::get_info(*it));
|
||||
save();
|
||||
}
|
||||
|
||||
void Playlist::add_track(libsaria::Track *track)
|
||||
{
|
||||
plist.push_back(track->get_songid());
|
||||
plist.push_back(track);
|
||||
save();
|
||||
}
|
||||
|
||||
void Playlist::rm_ids(list<sid_t> &ids)
|
||||
{
|
||||
list<sid_t>::iterator it;
|
||||
for (it = ids.begin(); it != ids.end(); it++)
|
||||
plist.remove(*it);
|
||||
plist.remove(library::get_info(*it));
|
||||
save();
|
||||
}
|
||||
|
||||
void Playlist::rm_track(Track *track)
|
||||
{
|
||||
plist.remove(track->get_songid());
|
||||
plist.remove(track);
|
||||
}
|
||||
|
||||
void Playlist::sort()
|
||||
|
@ -62,12 +63,12 @@ namespace libsaria
|
|||
return plist.size();
|
||||
}
|
||||
|
||||
sid_t Playlist::next()
|
||||
Track *Playlist::next()
|
||||
{
|
||||
sid_t id = plist.front();
|
||||
Track *track = plist.front();
|
||||
plist.pop_front();
|
||||
save();
|
||||
return id;
|
||||
return track;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -36,9 +36,9 @@ namespace libsaria
|
|||
|
||||
string queue::next_file()
|
||||
{
|
||||
sid_t inode = q_queue.next();
|
||||
Track *track = q_queue.next();
|
||||
refresh();
|
||||
return library::find_filepath(inode);
|
||||
return track->get_filepath();
|
||||
}
|
||||
|
||||
void queue::load()
|
||||
|
|
Loading…
Reference in New Issue