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:
Anna Schumaker 2015-02-06 15:08:31 -05:00
parent addc28491c
commit 0997ffff99
2 changed files with 31 additions and 4 deletions

View File

@ -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);
}
}

View File

@ -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()