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)); 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) void dynamic_fill(const std::string &name)
{ {
Track *track; Track *track;
unsigned int avg = 0;
if (name != "Unplayed") if (name == "Most Played")
return; avg = find_average_count();
clear(); clear();
for (unsigned int i = 0; i < tags :: track_size(); i++) { for (unsigned int i = 0; i < tags :: track_size(); i++) {
track = tags :: get_track(i); track = tags :: get_track(i);
if ((track != NULL) && (track->count() == 0)) if (track != NULL)
add(track); dynamic_add(name, track, avg);
} }
} }

View File

@ -48,6 +48,9 @@ static void test_queue()
playlist :: select("Unplayed"); playlist :: select("Unplayed");
test_equal(q->size(), (unsigned)3); test_equal(q->size(), (unsigned)3);
playlist :: select("Most Played");
test_equal(q->size(), (unsigned)10);
} }
static void test_add() static void test_add()