command/playlist: allow range in playlistdelete
This commit is contained in:
@@ -26,6 +26,7 @@
|
||||
#include "song/DetachedSong.hxx"
|
||||
#include "SongLoader.hxx"
|
||||
#include "Mapper.hxx"
|
||||
#include "protocol/RangeArg.hxx"
|
||||
#include "fs/io/TextFile.hxx"
|
||||
#include "fs/io/FileOutputStream.hxx"
|
||||
#include "fs/io/BufferedOutputStream.hxx"
|
||||
@@ -314,6 +315,16 @@ PlaylistFileEditor::RemoveIndex(unsigned i)
|
||||
contents.erase(std::next(contents.begin(), i));
|
||||
}
|
||||
|
||||
void
|
||||
PlaylistFileEditor::RemoveRange(RangeArg range)
|
||||
{
|
||||
if (!range.CheckClip(size()))
|
||||
throw PlaylistError::BadRange();
|
||||
|
||||
contents.erase(std::next(contents.begin(), range.start),
|
||||
std::next(contents.begin(), range.end));
|
||||
}
|
||||
|
||||
void
|
||||
PlaylistFileEditor::Save()
|
||||
{
|
||||
|
@@ -26,6 +26,7 @@
|
||||
#include <string>
|
||||
|
||||
struct ConfigData;
|
||||
struct RangeArg;
|
||||
class DetachedSong;
|
||||
class SongLoader;
|
||||
class PlaylistVector;
|
||||
@@ -60,6 +61,7 @@ public:
|
||||
|
||||
void MoveIndex(unsigned src, unsigned dest);
|
||||
void RemoveIndex(unsigned i);
|
||||
void RemoveRange(RangeArg range);
|
||||
|
||||
void Save();
|
||||
|
||||
|
@@ -175,10 +175,10 @@ handle_playlistdelete([[maybe_unused]] Client &client,
|
||||
Request args, [[maybe_unused]] Response &r)
|
||||
{
|
||||
const char *const name = args[0];
|
||||
unsigned from = args.ParseUnsigned(1);
|
||||
const auto range = args.ParseRange(1);
|
||||
|
||||
PlaylistFileEditor editor(name, PlaylistFileEditor::LoadMode::YES);
|
||||
editor.RemoveIndex(from);
|
||||
editor.RemoveRange(range);
|
||||
editor.Save();
|
||||
return CommandResult::OK;
|
||||
}
|
||||
|
Reference in New Issue
Block a user