core/playlist: Merge __playlist_fill() with playlist_static()

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2015-12-10 13:38:30 -05:00
parent b7a4bb3872
commit 5844402ee3
1 changed files with 16 additions and 29 deletions

View File

@ -41,53 +41,34 @@ static unsigned int __playlist_find_average()
return total / track_db_get()->db_size;
}
static void __playlist_fill(enum playlist_t plist, struct set *set)
{
struct set_iter it;
queue_clear(&playlist_q);
playlist_cur = plist;
if (!set)
return;
queue_set_flag(&playlist_q, Q_ADD_FRONT);
set_for_each(set, &it)
queue_add(&playlist_q, track_get(it.it_val));
queue_unset_flag(&playlist_q, Q_ADD_FRONT);
queue_resort(&playlist_q);
}
static void __playlist_fill_static(enum playlist_t plist)
{
struct index_entry *ent = __playlist_lookup(plist);
__playlist_fill(plist, ent ? &ent->ie_set : NULL);
struct set_iter it;
if (ent) {
set_for_each(&ent->ie_set, &it)
queue_add(&playlist_q, track_get(it.it_val));
}
}
static void __playlist_fill_dynamic(enum playlist_t plist)
{
unsigned int count = 0, average = 0;
struct db_entry *track, *next;
struct set set;
if (plist == PL_MOST_PLAYED || plist == PL_LEAST_PLAYED)
average = __playlist_find_average();
set_init(&set);
db_for_each(track, next, track_db_get()) {
count = TRACK(track)->tr_count;
if (plist == PL_UNPLAYED && count == 0)
set_insert(&set, track->dbe_index);
queue_add(&playlist_q, TRACK(track));
else if (plist == PL_MOST_PLAYED && count > average)
set_insert(&set, track->dbe_index);
queue_add(&playlist_q, TRACK(track));
else if (plist == PL_LEAST_PLAYED && count < average && count > 0)
set_insert(&set, track->dbe_index);
queue_add(&playlist_q, TRACK(track));
}
__playlist_fill(plist, &set);
set_deinit(&set);
}
@ -159,10 +140,16 @@ bool playlist_has(enum playlist_t plist, struct track *track)
void playlist_select(enum playlist_t plist)
{
queue_clear(&playlist_q);
queue_set_flag(&playlist_q, Q_ADD_FRONT);
if (__playlist_is_static(plist))
__playlist_fill_static(plist);
else if (__playlist_is_dynamic(plist))
else
__playlist_fill_dynamic(plist);
queue_unset_flag(&playlist_q, Q_ADD_FRONT);
playlist_cur = plist;
queue_resort(&playlist_q);
}
struct queue *playlist_get_queue()