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));
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue