Added new optional argument MODE to command 'save' to be able to append or replace an existing playlist

This commit is contained in:
gd
2022-10-02 11:19:26 +03:00
parent b0d6c0e7cb
commit cd093a6014
5 changed files with 53 additions and 15 deletions

View File

@@ -184,7 +184,7 @@ static constexpr struct command commands[] = {
handle_replay_gain_status },
{ "rescan", PERMISSION_CONTROL, 0, 1, handle_rescan },
{ "rm", PERMISSION_CONTROL, 1, 1, handle_rm },
{ "save", PERMISSION_CONTROL, 1, 1, handle_save },
{ "save", PERMISSION_CONTROL, 1, 2, handle_save },
#ifdef ENABLE_DATABASE
{ "search", PERMISSION_READ, 1, -1, handle_search },
{ "searchadd", PERMISSION_ADD, 1, -1, handle_searchadd },

View File

@@ -66,7 +66,22 @@ print_spl_list(Response &r, const PlaylistVector &list)
CommandResult
handle_save(Client &client, Request args, [[maybe_unused]] Response &r)
{
spl_save_playlist(args.front(), client.GetPlaylist());
PlaylistSaveMode mode = PlaylistSaveMode::CREATE;
const char *mode_arg = args.GetOptional(1);
if (mode_arg != nullptr) {
if (StringIsEqual(mode_arg, "create"))
mode = PlaylistSaveMode::CREATE;
else if (StringIsEqual(mode_arg, "append"))
mode = PlaylistSaveMode::APPEND;
else if (StringIsEqual(mode_arg, "replace"))
mode = PlaylistSaveMode::REPLACE;
else
throw std::invalid_argument("Unrecognized save mode, expected one of 'create', 'append', 'replace'");
}
spl_save_playlist(args.front(), mode, client.GetPlaylist());
return CommandResult::OK;
}