aboutsummaryrefslogtreecommitdiffstats
path: root/src/mpdclient.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/mpdclient.c39
1 files changed, 12 insertions, 27 deletions
diff --git a/src/mpdclient.c b/src/mpdclient.c
index 8449ca42b..7c2cd32f7 100644
--- a/src/mpdclient.c
+++ b/src/mpdclient.c
@@ -255,7 +255,7 @@ mpdclient_update(mpdclient_t *c)
/* check if the playlist needs an update */
if (c->playlist.id != c->status->playlist) {
- if (c->playlist.list)
+ if (playlist_is_empty(&c->playlist))
retval = mpdclient_playlist_update_changes(c);
else
retval = mpdclient_playlist_update(c);
@@ -421,8 +421,7 @@ mpdclient_cmd_add(mpdclient_t *c, struct mpd_song *song)
#ifdef ENABLE_FANCY_PLAYLIST_MANAGMENT_CMD_ADD
/* add the song to playlist */
- c->playlist.list = g_list_append(c->playlist.list, mpd_songDup(song));
- c->playlist.length++;
+ playlist_append(&c->playlist, song);
/* increment the playlist id, so we dont retrives a new playlist */
c->playlist.id++;
@@ -460,7 +459,7 @@ mpdclient_cmd_delete(mpdclient_t *c, gint idx)
c->playlist.id++;
/* remove the song from the playlist */
- g_array_remove_index(c->playlist.list, idx);
+ playlist_remove(&c->playlist, idx);
/* call playlist updated callback */
mpdclient_playlist_callback(c, PLAYLIST_EVENT_DELETE, (gpointer) song);
@@ -471,9 +470,6 @@ mpdclient_cmd_delete(mpdclient_t *c, gint idx)
c->need_update = TRUE;
}
- /* free song */
- mpd_freeSong(song);
-
#else
c->need_update = TRUE;
#endif
@@ -506,13 +502,8 @@ mpdclient_cmd_move(mpdclient_t *c, gint old_index, gint new_index)
return n;
#ifdef ENABLE_FANCY_PLAYLIST_MANAGMENT_CMD_MOVE
- /* update the songs position field */
- n = song1->pos;
- song1->pos = song2->pos;
- song2->pos = n;
- /* update the array */
- g_array_index(c->playlist.list, struct mpd_song *, old_index) = song2;
- g_array_index(c->playlist.list, struct mpd_song *, new_index) = song1;
+ /* update the playlist */
+ playlist_swap(&c->playlist, old_index, new_index);
/* increment the playlist id, so we dont retrives a new playlist */
c->playlist.id++;
@@ -666,10 +657,9 @@ mpdclient_playlist_update(mpdclient_t *c)
mpd_sendPlaylistInfoCommand(c->connection,-1);
while ((entity = mpd_getNextInfoEntity(c->connection))) {
- if (entity->type == MPD_INFO_ENTITY_TYPE_SONG) {
- struct mpd_song *song = mpd_songDup(entity->info.song);
- g_array_append_val(c->playlist.list, song);
- }
+ if (entity->type == MPD_INFO_ENTITY_TYPE_SONG)
+ playlist_append(&c->playlist, entity->info.song);
+
mpd_freeInfoEntity(entity);
}
@@ -700,20 +690,17 @@ mpdclient_playlist_update_changes(mpdclient_t *c)
mpd_sendPlChangesCommand(c->connection, c->playlist.id);
while ((entity = mpd_getNextInfoEntity(c->connection)) != NULL) {
- struct mpd_song *song = mpd_songDup(entity->info.song);
+ struct mpd_song *song = entity->info.song;
if (song->pos >= 0 && (guint)song->pos < c->playlist.list->len) {
/* update song */
D("updating pos:%d, id=%d - %s\n",
song->pos, song->id, song->file);
- mpd_freeSong(g_array_index(c->playlist.list,
- struct mpd_song *, song->pos));
- g_array_index(c->playlist.list,
- struct mpd_song *, song->pos) = song;
+ playlist_replace(&c->playlist, song->pos, song);
} else {
/* add a new song */
D("adding song at pos %d\n", song->pos);
- g_array_append_val(c->playlist.list, song);
+ playlist_append(&c->playlist, song);
}
mpd_freeInfoEntity(entity);
@@ -722,12 +709,10 @@ mpdclient_playlist_update_changes(mpdclient_t *c)
/* remove trailing songs */
while ((guint)c->status->playlistLength < c->playlist.list->len) {
guint pos = c->playlist.list->len - 1;
- struct mpd_song *song = g_array_index(c->playlist.list, struct mpd_song *, pos);
/* Remove the last playlist entry */
D("removing song at pos %d\n", pos);
- mpd_freeSong(song);
- g_array_remove_index(c->playlist.list, pos);
+ playlist_remove(&c->playlist, pos);
}
c->song = NULL;