libsaria: Add sorted songs to the Set playlist
I sort the subset of tracks to be added, and then use insertion sort to add them to the playlist object. Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
parent
cfc50cf745
commit
6d709e3a18
|
@ -39,12 +39,15 @@ namespace libsaria
|
|||
bool pick_next(list<Track *>::iterator &);
|
||||
void sequential_next();
|
||||
void random_next();*/
|
||||
void add_sorted(list<Track *> &);
|
||||
|
||||
public:
|
||||
Playlist(unsigned int);
|
||||
//Playlist(string, unsigned int);
|
||||
~Playlist();
|
||||
|
||||
virtual void add_tracks(list<Track *> &) = 0;
|
||||
|
||||
/*void set_renderer(PlaylistRenderer *, bool);
|
||||
void delete_renderer();
|
||||
|
||||
|
@ -72,6 +75,8 @@ namespace libsaria
|
|||
public:
|
||||
Set(unsigned int);
|
||||
~Set();
|
||||
|
||||
void add_tracks(list<Track *> &);
|
||||
};
|
||||
|
||||
}; /* Namespace: libsaria */
|
||||
|
|
|
@ -29,11 +29,10 @@ namespace libsaria
|
|||
int bitrate;
|
||||
int sample;
|
||||
int channels;
|
||||
/* sid_t songid;
|
||||
|
||||
string *artist_lc;
|
||||
string *album_lc;
|
||||
void make_lenstr();
|
||||
/*void make_lenstr();
|
||||
void do_bookkeeping();*/
|
||||
void read_tags();
|
||||
|
||||
|
@ -59,9 +58,9 @@ namespace libsaria
|
|||
int get_length();
|
||||
int get_bitrate();
|
||||
int get_channels();
|
||||
sid_t get_songid();
|
||||
sid_t get_songid();*/
|
||||
|
||||
bool operator<(Track &);*/
|
||||
bool operator<(Track &);
|
||||
};
|
||||
|
||||
} /* Namespace: libsaria */
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
#ifndef LIBSARIA_LIBRARY_SOURCE_H
|
||||
#define LIBSARIA_LIBRARY_SOURCE_H
|
||||
|
||||
#include <libsaria/playlist.h>
|
||||
#include <libsaria/library.h>
|
||||
|
||||
extern list<libsaria::library::Driver *>driver_list;
|
||||
extern libsaria::Set lib_playlist;
|
||||
void update_path(struct libsaria::library::Path *);
|
||||
/*#include <string>
|
||||
using namespace std;
|
||||
|
|
|
@ -54,10 +54,12 @@ void ScanTask::run_task()
|
|||
{
|
||||
list<string>::iterator it;
|
||||
list<libsaria::library::Driver *>::iterator d_it;
|
||||
list<libsaria::Track *> tracks;
|
||||
|
||||
for (it = file_list.begin(); it != file_list.end(); it++) {
|
||||
try {
|
||||
path->tracks.push_back(libsaria::Track(*it, path));
|
||||
tracks.push_back(&path->tracks.back());
|
||||
} catch (string message) {
|
||||
println(message);
|
||||
}
|
||||
|
@ -65,6 +67,8 @@ void ScanTask::run_task()
|
|||
|
||||
for (d_it = driver_list.begin(); d_it != driver_list.end(); d_it++)
|
||||
(*d_it)->path_updated(path);
|
||||
|
||||
lib_playlist.add_tracks(tracks);
|
||||
}
|
||||
|
||||
ReaddirTask::ReaddirTask(struct libsaria::library::Path *p)
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
// Copyright (c) 2012 Bryan Schumaker.
|
||||
#include <libsaria/playlist.h>
|
||||
#include <libsaria/print.h>
|
||||
|
||||
static bool compare_tracks(libsaria::Track *one, libsaria::Track *two)
|
||||
{
|
||||
/* I want to compare tracks and not pointers */
|
||||
return *one < *two;
|
||||
}
|
||||
|
||||
namespace libsaria
|
||||
{
|
||||
|
||||
void Playlist::add_sorted(list<Track *> &tracks)
|
||||
{
|
||||
list<Track *>::iterator it, ins;
|
||||
|
||||
tracks.sort(compare_tracks);
|
||||
|
||||
ins = plist.begin();
|
||||
for (it = tracks.begin(); it != tracks.end(); it++) {
|
||||
while (((*it) < (*ins)) && (ins != plist.end()))
|
||||
ins++;
|
||||
plist.insert(ins, (*it));
|
||||
}
|
||||
}
|
||||
|
||||
}; /* namespace: libsaria */
|
|
@ -12,4 +12,9 @@ namespace libsaria
|
|||
{
|
||||
}
|
||||
|
||||
void Set::add_tracks(list<Track *> &tracks)
|
||||
{
|
||||
add_sorted(tracks);
|
||||
}
|
||||
|
||||
}; /* Namespace: libsaria */
|
||||
|
|
|
@ -20,26 +20,26 @@ namespace libsaria
|
|||
{
|
||||
|
||||
/* Return true if this < cmp_track */
|
||||
/*/ bool Track::operator<(Track &cmp_track)
|
||||
bool Track::operator<(Track &cmp_track)
|
||||
{
|
||||
int cmp;*/
|
||||
int cmp;
|
||||
|
||||
/* Compare artists */
|
||||
/*cmp = compare_strings(artist_lc, cmp_track.artist_lc);
|
||||
cmp = compare_strings(artist_lc, cmp_track.artist_lc);
|
||||
if (cmp < 0)
|
||||
return true;
|
||||
else if (cmp > 0)
|
||||
return false;*/
|
||||
return false;
|
||||
|
||||
/* Compare albums */
|
||||
/*cmp = compare_strings(album_lc, cmp_track.album_lc);
|
||||
cmp = compare_strings(album_lc, cmp_track.album_lc);
|
||||
if (cmp < 0)
|
||||
return true;
|
||||
else if (cmp > 0)
|
||||
return false;*/
|
||||
return false;
|
||||
|
||||
/* Compare tracks */
|
||||
/* return track < cmp_track.track;
|
||||
}*/
|
||||
return track < cmp_track.track;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// Copyright (c) 2011 Bryan Schumaker.
|
||||
#include <libsaria/track.h>
|
||||
/*#include <libsaria/format.h>
|
||||
#include <libsaria/library.h>
|
||||
#include <libsaria/format.h>
|
||||
/*#include <libsaria/library.h>
|
||||
#include <libsaria/index.h>*/
|
||||
|
||||
#include <taglib/tag.h>
|
||||
|
@ -46,7 +46,11 @@ namespace libsaria
|
|||
last_day = 0;
|
||||
last_month = 0;
|
||||
last_year = 0;
|
||||
|
||||
read_tags();
|
||||
|
||||
artist_lc = lowercase(artist);
|
||||
album_lc = lowercase(album);
|
||||
}
|
||||
|
||||
Track::~Track()
|
||||
|
|
Loading…
Reference in New Issue