playlist: Add a "most played tracks" playlist
This playlist will look for any track with an above average play count. Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
addc28491c
commit
0997ffff99
|
@ -32,18 +32,42 @@ public:
|
|||
add(tags :: get_track(*it));
|
||||
}
|
||||
|
||||
unsigned int find_average_count()
|
||||
{
|
||||
Track *track;
|
||||
unsigned int total = 0, count = 0;
|
||||
|
||||
for (unsigned int i = 0; i < tags :: track_size(); i++) {
|
||||
track = tags :: get_track(i);
|
||||
if (track != NULL) {
|
||||
total += track->count();
|
||||
count++;
|
||||
}
|
||||
}
|
||||
return total / count;
|
||||
}
|
||||
|
||||
void dynamic_add(const std::string &name, Track *track, unsigned int avg)
|
||||
{
|
||||
if ((name == "Unplayed") && (track->count() == 0))
|
||||
add(track);
|
||||
if ((name == "Most Played") && (track->count() > avg))
|
||||
add(track);
|
||||
}
|
||||
|
||||
void dynamic_fill(const std::string &name)
|
||||
{
|
||||
Track *track;
|
||||
unsigned int avg = 0;
|
||||
|
||||
if (name != "Unplayed")
|
||||
return;
|
||||
if (name == "Most Played")
|
||||
avg = find_average_count();
|
||||
|
||||
clear();
|
||||
for (unsigned int i = 0; i < tags :: track_size(); i++) {
|
||||
track = tags :: get_track(i);
|
||||
if ((track != NULL) && (track->count() == 0))
|
||||
add(track);
|
||||
if (track != NULL)
|
||||
dynamic_add(name, track, avg);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -48,6 +48,9 @@ static void test_queue()
|
|||
|
||||
playlist :: select("Unplayed");
|
||||
test_equal(q->size(), (unsigned)3);
|
||||
|
||||
playlist :: select("Most Played");
|
||||
test_equal(q->size(), (unsigned)10);
|
||||
}
|
||||
|
||||
static void test_add()
|
||||
|
|
Loading…
Reference in New Issue