aboutsummaryrefslogtreecommitdiffstats
path: root/src/playlist_edit.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-09-30 23:13:13 +0200
committerMax Kellermann <max@duempel.org>2009-09-30 23:13:13 +0200
commit31cabc751d2dc6721706d878a0694afc83ef6a0c (patch)
tree68a4f6b3d36d1ee3530d8ee9983f10f862ce624e /src/playlist_edit.c
parent0478a8e2880a26f9993c5adeb10f29acc11deb72 (diff)
downloadmpd-31cabc751d2dc6721706d878a0694afc83ef6a0c.tar.gz
mpd-31cabc751d2dc6721706d878a0694afc83ef6a0c.tar.xz
mpd-31cabc751d2dc6721706d878a0694afc83ef6a0c.zip
command: range support for "delete"
Diffstat (limited to 'src/playlist_edit.c')
-rw-r--r--src/playlist_edit.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/playlist_edit.c b/src/playlist_edit.c
index 6b15f56cb..473305f17 100644
--- a/src/playlist_edit.c
+++ b/src/playlist_edit.c
@@ -280,6 +280,32 @@ playlist_delete(struct playlist *playlist, unsigned song)
}
enum playlist_result
+playlist_delete_range(struct playlist *playlist, unsigned start, unsigned end)
+{
+ const struct song *queued;
+
+ if (start >= queue_length(&playlist->queue))
+ return PLAYLIST_RESULT_BAD_RANGE;
+
+ if (end > queue_length(&playlist->queue))
+ end = queue_length(&playlist->queue);
+
+ if (start >= end)
+ return PLAYLIST_RESULT_SUCCESS;
+
+ queued = playlist_get_queued_song(playlist);
+
+ do {
+ playlist_delete_internal(playlist, --end, &queued);
+ } while (end != start);
+
+ playlist_increment_version(playlist);
+ playlist_update_queued_song(playlist, queued);
+
+ return PLAYLIST_RESULT_SUCCESS;
+}
+
+enum playlist_result
playlist_delete_id(struct playlist *playlist, unsigned id)
{
int song = queue_id_to_position(&playlist->queue, id);