diff options
author | Max Kellermann <max@duempel.org> | 2009-09-30 23:13:13 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-09-30 23:13:13 +0200 |
commit | 31cabc751d2dc6721706d878a0694afc83ef6a0c (patch) | |
tree | 68a4f6b3d36d1ee3530d8ee9983f10f862ce624e /src/playlist_edit.c | |
parent | 0478a8e2880a26f9993c5adeb10f29acc11deb72 (diff) | |
download | mpd-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.c | 26 |
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); |