From 0997ffff99f94e4f4ad3d2ebcabdfcd628d5844c Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Fri, 6 Feb 2015 15:08:31 -0500 Subject: [PATCH] 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 --- core/playlist.cpp | 32 ++++++++++++++++++++++++++++---- tests/core/playlist.cpp | 3 +++ 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/core/playlist.cpp b/core/playlist.cpp index aacc08bc..061e62b4 100644 --- a/core/playlist.cpp +++ b/core/playlist.cpp @@ -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); } } diff --git a/tests/core/playlist.cpp b/tests/core/playlist.cpp index 2a43e63c..041a5a0d 100644 --- a/tests/core/playlist.cpp +++ b/tests/core/playlist.cpp @@ -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()