core/playlist: Move playlist tracks into the playlist struct

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2016-09-21 16:32:03 -04:00
parent a808cac04c
commit 1dd0b7c2aa
5 changed files with 12 additions and 16 deletions

View File

@ -40,6 +40,7 @@ void playlist_generic_set_callbacks(struct playlist_callbacks *cb)
void playlist_generic_init(struct playlist *playlist, struct queue_ops *ops)
{
g_queue_init(&playlist->pl_tracks);
queue_init(&playlist->pl_queue, ops, playlist);
playlist->pl_sort = NULL;
playlist->pl_current = NULL;
@ -150,7 +151,7 @@ void playlist_generic_clear(struct playlist *playlist)
return;
n = playlist_size(playlist);
g_queue_clear(&playlist->pl_queue.q_tracks);
g_queue_clear(&playlist->pl_tracks);
playlist->pl_length = 0;
playlist->pl_current = NULL;
if (callbacks)
@ -164,10 +165,10 @@ bool playlist_generic_add(struct playlist *playlist, struct track *track)
playlist->pl_length += track->tr_length;
if (playlist->pl_sort) {
g_queue_insert_sorted(&playlist->pl_queue.q_tracks, track,
g_queue_insert_sorted(&playlist->pl_tracks, track,
__playlist_generic_less_than, playlist);
} else
g_queue_push_tail(&playlist->pl_queue.q_tracks, track);
g_queue_push_tail(&playlist->pl_tracks, track);
if (callbacks)
callbacks->pl_cb_added(playlist, track);
@ -180,7 +181,7 @@ bool playlist_generic_add_front(struct playlist *playlist, struct track *track)
return false;
playlist->pl_length += track->tr_length;
g_queue_push_head(&playlist->pl_queue.q_tracks, track);
g_queue_push_head(&playlist->pl_tracks, track);
if (callbacks)
callbacks->pl_cb_added(playlist, track);
return true;
@ -196,7 +197,7 @@ bool playlist_generic_remove(struct playlist *playlist, struct track *track)
while (playlist_current_track(playlist) == track)
playlist_current_previous(playlist);
count = g_queue_remove_all(&playlist->pl_queue.q_tracks, track);
count = g_queue_remove_all(&playlist->pl_tracks, track);
playlist->pl_length -= (count * track->tr_length);
if (callbacks)
@ -234,9 +235,7 @@ void playlist_generic_resort(struct playlist *playlist)
if (!playlist || !playlist->pl_sort)
return;
g_queue_sort(&playlist->pl_queue.q_tracks, __playlist_generic_less_than,
playlist);
g_queue_sort(&playlist->pl_tracks, __playlist_generic_less_than, playlist);
playlist_generic_update(playlist, NULL);
}

View File

@ -22,12 +22,10 @@ static inline void __queue_deinit(struct queue *queue)
void queue_init(struct queue *queue, const struct queue_ops *ops, void *data)
{
queue->q_ops = ops;
g_queue_init(&queue->q_tracks);
queue->q_private = __queue_init(queue, data);
}
void queue_deinit(struct queue *queue)
{
g_queue_clear(&queue->q_tracks);
__queue_deinit(queue);
}

View File

@ -12,7 +12,7 @@
static inline playlist_iter playlist_iter_get(struct playlist *playlist,
unsigned int n)
{
return playlist ? g_queue_peek_nth_link(&playlist->pl_queue.q_tracks, n) : NULL;
return playlist ? g_queue_peek_nth_link(&playlist->pl_tracks, n) : NULL;
}
/* Called to advance the requested playlist iterator. */
@ -31,7 +31,7 @@ static inline struct track *playlist_iter_track(playlist_iter iter)
static inline int playlist_iter_index(struct playlist *playlist,
playlist_iter iter)
{
return (playlist && iter) ? g_queue_link_index(&playlist->pl_queue.q_tracks, iter) : -1;
return (playlist && iter) ? g_queue_link_index(&playlist->pl_tracks, iter) : -1;
}
/* Called to iterate over the entire playlist. */

View File

@ -48,6 +48,7 @@ struct playlist {
gchar *pl_name; /* This playlist's name. */
unsigned int pl_id; /* This playlist's identifier. */
GQueue pl_tracks; /* This playlist's queue of tracks. */
unsigned int pl_length; /* This playlist's length, in seconds. */
bool pl_random; /* This playlist's random setting. */
playlist_iter pl_current; /* This playlist's current track. */
@ -89,14 +90,13 @@ struct playlist_type {
/* Called to check if the playlist contains a specific track. */
static inline bool playlist_has(struct playlist *playlist, struct track *track)
{
return playlist ? g_queue_find(&playlist->pl_queue.q_tracks, track) != NULL :
false;
return playlist ? g_queue_find(&playlist->pl_tracks, track) != NULL : false;
}
/* Called to find the size of a playlist. */
static inline unsigned int playlist_size(struct playlist *playlist)
{
return playlist ? g_queue_get_length(&playlist->pl_queue.q_tracks) : 0;
return playlist ? g_queue_get_length(&playlist->pl_tracks) : 0;
}
/* Called to clear the sort order of the playlist. */

View File

@ -24,7 +24,6 @@ struct queue_ops {
struct queue {
GQueue q_tracks; /* The queue's list of tracks. */
void *q_private; /* The queue's private data. */
const struct queue_ops *q_ops; /* The queue's operations vector. */