libsaria: Sort the Playlist

I do this whenever the sort() function is called.  I eventually want a
more automatic way of doing this, so I expect the function won't exist
for long.
This commit is contained in:
Bryan Schumaker 2012-02-19 17:47:29 -05:00
parent f352952924
commit 7b6ecfdd99
4 changed files with 20 additions and 5 deletions

View File

@ -32,6 +32,7 @@ namespace libsaria
void rm_ids(list<sid_t> &);
void rm_track(Track *);
void sort();
unsigned int size();
sid_t next();

View File

@ -1,6 +1,7 @@
// Copyright (c) 2011 Bryan Schumaker.
#include <libsaria/track.h>
#include <libsaria/library.h>
#include "../library.h"
#include "list.h"
#include <list>
@ -15,19 +16,17 @@ namespace libsaria
void iter::reset()
{
it = track_list.begin();
lib_playlist.iter_reset();
}
libsaria::Track *iter::next()
{
libsaria::Track *track = *it;
it++;
return track;
return lib_playlist.iter_next();
}
bool iter::end()
{
return it == track_list.end();
return lib_playlist.iter_end();
}
} /* Namespace: library */

View File

@ -35,6 +35,7 @@ namespace libsaria
void library::sort_list()
{
track_list.sort(compare_tracks);
lib_playlist.sort();
}
unsigned int library::size()

View File

@ -1,7 +1,16 @@
// Copyright (c) 2012 Bryan Schumaker.
#include <libsaria/files.h>
#include <libsaria/library.h>
#include <libsaria/playlist.h>
static bool compare_tracks(sid_t one, sid_t 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;
}
namespace libsaria
{
@ -43,6 +52,11 @@ namespace libsaria
plist.remove(track->get_songid());
}
void Playlist::sort()
{
plist.sort(compare_tracks);
}
unsigned int Playlist::size()
{
return plist.size();