diff --git a/core/playlist.c b/core/playlist.c index 4380530b..e7fcabcc 100644 --- a/core/playlist.c +++ b/core/playlist.c @@ -26,19 +26,6 @@ static inline bool __playlist_is_dynamic(enum playlist_t plist) return !__playlist_is_static(plist); } -static unsigned int __playlist_find_average() -{ - struct db_entry *track, *next; - unsigned int total = 0; - - if (track_db_get()->db_size == 0) - return 0; - - db_for_each(track, next, track_db_get()) - total += TRACK(track)->tr_count; - return total / track_db_get()->db_size; -} - static void __playlist_fill_static(enum playlist_t plist) { struct index_entry *ent = __playlist_lookup(plist); @@ -56,7 +43,7 @@ static void __playlist_fill_dynamic(enum playlist_t plist) struct db_entry *track, *next; if (plist == PL_MOST_PLAYED || plist == PL_LEAST_PLAYED) - average = __playlist_find_average(); + average = track_db_average_plays(); db_for_each(track, next, track_db_get()) { count = TRACK(track)->tr_count; @@ -64,7 +51,7 @@ static void __playlist_fill_dynamic(enum playlist_t plist) queue_add(&playlist_q, TRACK(track)); else if (plist == PL_MOST_PLAYED && count > average) queue_add(&playlist_q, TRACK(track)); - else if (plist == PL_LEAST_PLAYED && count < average && count > 0) + else if (plist == PL_LEAST_PLAYED && count <= average && count > 0) queue_add(&playlist_q, TRACK(track)); } } diff --git a/tests/core/playlist.c b/tests/core/playlist.c index 6c82301b..30d6ee4e 100644 --- a/tests/core/playlist.c +++ b/tests/core/playlist.c @@ -112,7 +112,8 @@ static void test_dynamic() /* Set play count to (track_number - 1) (average = 6) */ db_for_each(dbe, next, track_db_get()) { - TRACK(dbe)->tr_count = TRACK(dbe)->tr_track - 1; + for (i = 1; i < TRACK(dbe)->tr_track; i++) + track_played(TRACK(dbe)); average += TRACK(dbe)->tr_count; } average /= track_db_get()->db_size; @@ -125,10 +126,10 @@ static void test_dynamic() test_equal(queue_at(q, 0)->tr_track, 1); test_equal(queue_at(q, 0)->tr_count, 0); - /* Five tracks have tr_count < average && tr_count > 0 */ + /* Six tracks have tr_count <= average && tr_count > 0 */ playlist_select(PL_LEAST_PLAYED); test_equal(playlist_add(PL_LEAST_PLAYED, track_get(0)), (bool)false); - test_equal(queue_size(q), 5); + test_equal(queue_size(q), 6); for (i = 0; i < queue_size(q); i++) { track = queue_at(q, i); test_loop_equal(track->tr_track, i + 2, i);