command/Request: new struct wrapping ConstBuffer<const char *>

This commit is contained in:
Max Kellermann 2015-08-11 22:11:28 +02:00
parent cbdc3194cc
commit 0f92d021a1
27 changed files with 263 additions and 215 deletions

View File

@ -81,6 +81,7 @@ libmpd_a_SOURCES = \
src/protocol/Ack.cxx src/protocol/Ack.hxx \
src/protocol/ArgParser.cxx src/protocol/ArgParser.hxx \
src/protocol/Result.cxx src/protocol/Result.hxx \
src/command/Request.hxx \
src/command/CommandResult.hxx \
src/command/CommandError.cxx src/command/CommandError.hxx \
src/command/AllCommands.cxx src/command/AllCommands.hxx \

View File

@ -19,6 +19,7 @@
#include "config.h"
#include "AllCommands.hxx"
#include "Request.hxx"
#include "QueueCommands.hxx"
#include "TagCommands.hxx"
#include "PlayerCommands.hxx"
@ -62,15 +63,15 @@ struct command {
unsigned permission;
int min;
int max;
CommandResult (*handler)(Client &client, ConstBuffer<const char *> args);
CommandResult (*handler)(Client &client, Request args);
};
/* don't be fooled, this is the command handler for "commands" command */
static CommandResult
handle_commands(Client &client, ConstBuffer<const char *> args);
handle_commands(Client &client, Request args);
static CommandResult
handle_not_commands(Client &client, ConstBuffer<const char *> args);
handle_not_commands(Client &client, Request args);
/**
* The command registry.
@ -227,7 +228,7 @@ command_available(gcc_unused const Partition &partition,
/* don't be fooled, this is the command handler for "commands" command */
static CommandResult
handle_commands(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_commands(Client &client, gcc_unused Request args)
{
const unsigned permission = client.GetPermission();
@ -243,7 +244,7 @@ handle_commands(Client &client, gcc_unused ConstBuffer<const char *> args)
}
static CommandResult
handle_not_commands(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_not_commands(Client &client, gcc_unused Request args)
{
const unsigned permission = client.GetPermission();
@ -295,7 +296,7 @@ command_lookup(const char *name)
static bool
command_check_request(const struct command *cmd, Client &client,
unsigned permission, ConstBuffer<const char *> args)
unsigned permission, Request args)
{
if (cmd->permission != (permission & cmd->permission)) {
command_error(client, ACK_ERROR_PERMISSION,
@ -329,7 +330,7 @@ command_check_request(const struct command *cmd, Client &client,
static const struct command *
command_checked_lookup(Client &client, unsigned permission,
const char *cmd_name, ConstBuffer<const char *> args)
const char *cmd_name, Request args)
{
current_command = "";
@ -380,7 +381,7 @@ command_process(Client &client, unsigned num, char *line)
}
char *argv[COMMAND_ARGV_MAX];
ConstBuffer<const char *> args(argv, 0);
Request args(argv, 0);
/* now parse the arguments (quoted or unquoted) */

View File

@ -19,6 +19,7 @@
#include "config.h"
#include "DatabaseCommands.hxx"
#include "Request.hxx"
#include "db/DatabaseGlue.hxx"
#include "db/DatabaseQueue.hxx"
#include "db/DatabasePlaylist.hxx"
@ -50,7 +51,7 @@ handle_listfiles_db(Client &client, const char *uri)
}
CommandResult
handle_lsinfo2(Client &client, ConstBuffer<const char *> args)
handle_lsinfo2(Client &client, Request args)
{
/* default is root directory */
const char *const uri = args.IsEmpty() ? "" : args.front();
@ -65,7 +66,7 @@ handle_lsinfo2(Client &client, ConstBuffer<const char *> args)
}
static CommandResult
handle_match(Client &client, ConstBuffer<const char *> args, bool fold_case)
handle_match(Client &client, Request args, bool fold_case)
{
RangeArg window;
if (args.size >= 2 && strcmp(args[args.size - 2], "window") == 0) {
@ -93,19 +94,19 @@ handle_match(Client &client, ConstBuffer<const char *> args, bool fold_case)
}
CommandResult
handle_find(Client &client, ConstBuffer<const char *> args)
handle_find(Client &client, Request args)
{
return handle_match(client, args, false);
}
CommandResult
handle_search(Client &client, ConstBuffer<const char *> args)
handle_search(Client &client, Request args)
{
return handle_match(client, args, true);
}
static CommandResult
handle_match_add(Client &client, ConstBuffer<const char *> args, bool fold_case)
handle_match_add(Client &client, Request args, bool fold_case)
{
SongFilter filter;
if (!filter.Parse(args, fold_case)) {
@ -123,19 +124,19 @@ handle_match_add(Client &client, ConstBuffer<const char *> args, bool fold_case)
}
CommandResult
handle_findadd(Client &client, ConstBuffer<const char *> args)
handle_findadd(Client &client, Request args)
{
return handle_match_add(client, args, false);
}
CommandResult
handle_searchadd(Client &client, ConstBuffer<const char *> args)
handle_searchadd(Client &client, Request args)
{
return handle_match_add(client, args, true);
}
CommandResult
handle_searchaddpl(Client &client, ConstBuffer<const char *> args)
handle_searchaddpl(Client &client, Request args)
{
const char *playlist = args.shift();
@ -157,7 +158,7 @@ handle_searchaddpl(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_count(Client &client, ConstBuffer<const char *> args)
handle_count(Client &client, Request args)
{
TagType group = TAG_NUM_OF_ITEM_TYPES;
if (args.size >= 2 && strcmp(args[args.size - 2], "group") == 0) {
@ -186,7 +187,7 @@ handle_count(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_listall(Client &client, ConstBuffer<const char *> args)
handle_listall(Client &client, Request args)
{
/* default is root directory */
const char *const uri = args.IsEmpty() ? "" : args.front();
@ -199,7 +200,7 @@ handle_listall(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_list(Client &client, ConstBuffer<const char *> args)
handle_list(Client &client, Request args)
{
const char *tag_name = args.shift();
unsigned tagType = locate_parse_type(tag_name);
@ -271,7 +272,7 @@ handle_list(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_listallinfo(Client &client, ConstBuffer<const char *> args)
handle_listallinfo(Client &client, Request args)
{
/* default is root directory */
const char *const uri = args.IsEmpty() ? "" : args.front();

View File

@ -23,39 +23,39 @@
#include "CommandResult.hxx"
class Client;
template<typename T> struct ConstBuffer;
class Request;
CommandResult
handle_listfiles_db(Client &client, const char *uri);
CommandResult
handle_lsinfo2(Client &client, ConstBuffer<const char *> args);
handle_lsinfo2(Client &client, Request args);
CommandResult
handle_find(Client &client, ConstBuffer<const char *> args);
handle_find(Client &client, Request args);
CommandResult
handle_findadd(Client &client, ConstBuffer<const char *> args);
handle_findadd(Client &client, Request args);
CommandResult
handle_search(Client &client, ConstBuffer<const char *> args);
handle_search(Client &client, Request args);
CommandResult
handle_searchadd(Client &client, ConstBuffer<const char *> args);
handle_searchadd(Client &client, Request args);
CommandResult
handle_searchaddpl(Client &client, ConstBuffer<const char *> args);
handle_searchaddpl(Client &client, Request args);
CommandResult
handle_count(Client &client, ConstBuffer<const char *> args);
handle_count(Client &client, Request args);
CommandResult
handle_listall(Client &client, ConstBuffer<const char *> args);
handle_listall(Client &client, Request args);
CommandResult
handle_list(Client &client, ConstBuffer<const char *> args);
handle_list(Client &client, Request args);
CommandResult
handle_listallinfo(Client &client, ConstBuffer<const char *> args);
handle_listallinfo(Client &client, Request args);
#endif

View File

@ -21,6 +21,7 @@
#include "config.h"
#include "FileCommands.hxx"
#include "Request.hxx"
#include "CommandError.hxx"
#include "protocol/Ack.hxx"
#include "protocol/Result.hxx"
@ -216,7 +217,7 @@ translate_uri(const char *uri)
}
CommandResult
handle_read_comments(Client &client, ConstBuffer<const char *> args)
handle_read_comments(Client &client, Request args)
{
assert(args.size == 1);
const char *const uri = translate_uri(args.front());

View File

@ -23,12 +23,12 @@
#include "CommandResult.hxx"
class Client;
template<typename T> struct ConstBuffer;
class Request;
CommandResult
handle_listfiles_local(Client &client, const char *path_utf8);
CommandResult
handle_read_comments(Client &client, ConstBuffer<const char *> args);
handle_read_comments(Client &client, Request args);
#endif

View File

@ -19,6 +19,7 @@
#include "config.h"
#include "MessageCommands.hxx"
#include "Request.hxx"
#include "client/Client.hxx"
#include "client/ClientList.hxx"
#include "Instance.hxx"
@ -32,7 +33,7 @@
#include <assert.h>
CommandResult
handle_subscribe(Client &client, ConstBuffer<const char *> args)
handle_subscribe(Client &client, Request args)
{
assert(args.size == 1);
const char *const channel_name = args[0];
@ -63,7 +64,7 @@ handle_subscribe(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_unsubscribe(Client &client, ConstBuffer<const char *> args)
handle_unsubscribe(Client &client, Request args)
{
assert(args.size == 1);
const char *const channel_name = args[0];
@ -78,7 +79,7 @@ handle_unsubscribe(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_channels(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_channels(Client &client, gcc_unused Request args)
{
assert(args.IsEmpty());
@ -95,7 +96,7 @@ handle_channels(Client &client, gcc_unused ConstBuffer<const char *> args)
CommandResult
handle_read_messages(Client &client,
gcc_unused ConstBuffer<const char *> args)
gcc_unused Request args)
{
assert(args.IsEmpty());
@ -111,7 +112,7 @@ handle_read_messages(Client &client,
}
CommandResult
handle_send_message(Client &client, ConstBuffer<const char *> args)
handle_send_message(Client &client, Request args)
{
assert(args.size == 2);

View File

@ -23,21 +23,21 @@
#include "CommandResult.hxx"
class Client;
template<typename T> struct ConstBuffer;
class Request;
CommandResult
handle_subscribe(Client &client, ConstBuffer<const char *> args);
handle_subscribe(Client &client, Request args);
CommandResult
handle_unsubscribe(Client &client, ConstBuffer<const char *> args);
handle_unsubscribe(Client &client, Request args);
CommandResult
handle_channels(Client &client, ConstBuffer<const char *> args);
handle_channels(Client &client, Request args);
CommandResult
handle_read_messages(Client &client, ConstBuffer<const char *> args);
handle_read_messages(Client &client, Request args);
CommandResult
handle_send_message(Client &client, ConstBuffer<const char *> args);
handle_send_message(Client &client, Request args);
#endif

View File

@ -19,6 +19,7 @@
#include "config.h"
#include "NeighborCommands.hxx"
#include "Request.hxx"
#include "client/Client.hxx"
#include "Instance.hxx"
#include "Partition.hxx"
@ -39,7 +40,7 @@ neighbor_commands_available(const Instance &instance)
}
CommandResult
handle_listneighbors(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_listneighbors(Client &client, gcc_unused Request args)
{
const NeighborGlue *const neighbors =
client.partition.instance.neighbors;

View File

@ -25,13 +25,13 @@
struct Instance;
class Client;
template<typename T> struct ConstBuffer;
class Request;
gcc_pure
bool
neighbor_commands_available(const Instance &instance);
CommandResult
handle_listneighbors(Client &client, ConstBuffer<const char *> args);
handle_listneighbors(Client &client, Request args);
#endif

View File

@ -19,6 +19,7 @@
#include "config.h"
#include "OtherCommands.hxx"
#include "Request.hxx"
#include "FileCommands.hxx"
#include "StorageCommands.hxx"
#include "CommandError.hxx"
@ -69,7 +70,7 @@ print_spl_list(Client &client, const PlaylistVector &list)
}
CommandResult
handle_urlhandlers(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_urlhandlers(Client &client, gcc_unused Request args)
{
if (client.IsLocal())
client_puts(client, "handler: file://\n");
@ -78,27 +79,27 @@ handle_urlhandlers(Client &client, gcc_unused ConstBuffer<const char *> args)
}
CommandResult
handle_decoders(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_decoders(Client &client, gcc_unused Request args)
{
decoder_list_print(client);
return CommandResult::OK;
}
CommandResult
handle_tagtypes(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_tagtypes(Client &client, gcc_unused Request args)
{
tag_print_types(client);
return CommandResult::OK;
}
CommandResult
handle_kill(gcc_unused Client &client, gcc_unused ConstBuffer<const char *> args)
handle_kill(gcc_unused Client &client, gcc_unused Request args)
{
return CommandResult::KILL;
}
CommandResult
handle_close(gcc_unused Client &client, gcc_unused ConstBuffer<const char *> args)
handle_close(gcc_unused Client &client, gcc_unused Request args)
{
return CommandResult::FINISH;
}
@ -112,7 +113,7 @@ print_tag(TagType type, const char *value, void *ctx)
}
CommandResult
handle_listfiles(Client &client, ConstBuffer<const char *> args)
handle_listfiles(Client &client, Request args)
{
/* default is root directory */
const char *const uri = args.IsEmpty() ? "" : args.front();
@ -151,7 +152,7 @@ static constexpr tag_handler print_tag_handler = {
};
CommandResult
handle_lsinfo(Client &client, ConstBuffer<const char *> args)
handle_lsinfo(Client &client, Request args)
{
/* default is root directory */
const char *const uri = args.IsEmpty() ? "" : args.front();
@ -257,7 +258,7 @@ handle_update(Client &client, Database &db,
#endif
static CommandResult
handle_update(Client &client, ConstBuffer<const char *> args, bool discard)
handle_update(Client &client, Request args, bool discard)
{
#ifdef ENABLE_DATABASE
const char *path = "";
@ -293,19 +294,19 @@ handle_update(Client &client, ConstBuffer<const char *> args, bool discard)
}
CommandResult
handle_update(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_update(Client &client, gcc_unused Request args)
{
return handle_update(client, args, false);
}
CommandResult
handle_rescan(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_rescan(Client &client, gcc_unused Request args)
{
return handle_update(client, args, true);
}
CommandResult
handle_setvol(Client &client, ConstBuffer<const char *> args)
handle_setvol(Client &client, Request args)
{
unsigned level;
if (!check_unsigned(client, &level, args.front()))
@ -326,7 +327,7 @@ handle_setvol(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_volume(Client &client, ConstBuffer<const char *> args)
handle_volume(Client &client, Request args)
{
int relative;
if (!check_int(client, &relative, args.front()))
@ -360,20 +361,20 @@ handle_volume(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_stats(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_stats(Client &client, gcc_unused Request args)
{
stats_print(client);
return CommandResult::OK;
}
CommandResult
handle_ping(gcc_unused Client &client, gcc_unused ConstBuffer<const char *> args)
handle_ping(gcc_unused Client &client, gcc_unused Request args)
{
return CommandResult::OK;
}
CommandResult
handle_password(Client &client, ConstBuffer<const char *> args)
handle_password(Client &client, Request args)
{
unsigned permission = 0;
@ -388,7 +389,7 @@ handle_password(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_config(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_config(Client &client, gcc_unused Request args)
{
if (!client.IsLocal()) {
command_error(client, ACK_ERROR_PERMISSION,
@ -408,7 +409,7 @@ handle_config(Client &client, gcc_unused ConstBuffer<const char *> args)
}
CommandResult
handle_idle(Client &client, ConstBuffer<const char *> args)
handle_idle(Client &client, Request args)
{
unsigned flags = 0;

View File

@ -23,54 +23,54 @@
#include "CommandResult.hxx"
class Client;
template<typename T> struct ConstBuffer;
class Request;
CommandResult
handle_urlhandlers(Client &client, ConstBuffer<const char *> args);
handle_urlhandlers(Client &client, Request args);
CommandResult
handle_decoders(Client &client, ConstBuffer<const char *> args);
handle_decoders(Client &client, Request args);
CommandResult
handle_tagtypes(Client &client, ConstBuffer<const char *> args);
handle_tagtypes(Client &client, Request args);
CommandResult
handle_kill(Client &client, ConstBuffer<const char *> args);
handle_kill(Client &client, Request args);
CommandResult
handle_close(Client &client, ConstBuffer<const char *> args);
handle_close(Client &client, Request args);
CommandResult
handle_listfiles(Client &client, ConstBuffer<const char *> args);
handle_listfiles(Client &client, Request args);
CommandResult
handle_lsinfo(Client &client, ConstBuffer<const char *> args);
handle_lsinfo(Client &client, Request args);
CommandResult
handle_update(Client &client, ConstBuffer<const char *> args);
handle_update(Client &client, Request args);
CommandResult
handle_rescan(Client &client, ConstBuffer<const char *> args);
handle_rescan(Client &client, Request args);
CommandResult
handle_setvol(Client &client, ConstBuffer<const char *> args);
handle_setvol(Client &client, Request args);
CommandResult
handle_volume(Client &client, ConstBuffer<const char *> args);
handle_volume(Client &client, Request args);
CommandResult
handle_stats(Client &client, ConstBuffer<const char *> args);
handle_stats(Client &client, Request args);
CommandResult
handle_ping(Client &client, ConstBuffer<const char *> args);
handle_ping(Client &client, Request args);
CommandResult
handle_password(Client &client, ConstBuffer<const char *> args);
handle_password(Client &client, Request args);
CommandResult
handle_config(Client &client, ConstBuffer<const char *> args);
handle_config(Client &client, Request args);
CommandResult
handle_idle(Client &client, ConstBuffer<const char *> args);
handle_idle(Client &client, Request args);
#endif

View File

@ -19,6 +19,7 @@
#include "config.h"
#include "OutputCommands.hxx"
#include "Request.hxx"
#include "output/OutputPrint.hxx"
#include "output/OutputCommand.hxx"
#include "protocol/Result.hxx"
@ -28,7 +29,7 @@
#include "util/ConstBuffer.hxx"
CommandResult
handle_enableoutput(Client &client, ConstBuffer<const char *> args)
handle_enableoutput(Client &client, Request args)
{
assert(args.size == 1);
@ -46,7 +47,7 @@ handle_enableoutput(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_disableoutput(Client &client, ConstBuffer<const char *> args)
handle_disableoutput(Client &client, Request args)
{
assert(args.size == 1);
@ -64,7 +65,7 @@ handle_disableoutput(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_toggleoutput(Client &client, ConstBuffer<const char *> args)
handle_toggleoutput(Client &client, Request args)
{
assert(args.size == 1);
@ -82,7 +83,7 @@ handle_toggleoutput(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_devices(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_devices(Client &client, gcc_unused Request args)
{
assert(args.IsEmpty());

View File

@ -23,18 +23,18 @@
#include "CommandResult.hxx"
class Client;
template<typename T> struct ConstBuffer;
class Request;
CommandResult
handle_enableoutput(Client &client, ConstBuffer<const char *> args);
handle_enableoutput(Client &client, Request args);
CommandResult
handle_disableoutput(Client &client, ConstBuffer<const char *> args);
handle_disableoutput(Client &client, Request args);
CommandResult
handle_toggleoutput(Client &client, ConstBuffer<const char *> args);
handle_toggleoutput(Client &client, Request args);
CommandResult
handle_devices(Client &client, ConstBuffer<const char *> args);
handle_devices(Client &client, Request args);
#endif

View File

@ -19,6 +19,7 @@
#include "config.h"
#include "PlayerCommands.hxx"
#include "Request.hxx"
#include "CommandError.hxx"
#include "queue/Playlist.hxx"
#include "PlaylistPrint.hxx"
@ -57,7 +58,7 @@
#define COMMAND_STATUS_UPDATING_DB "updating_db"
CommandResult
handle_play(Client &client, ConstBuffer<const char *> args)
handle_play(Client &client, Request args)
{
int song = -1;
@ -68,7 +69,7 @@ handle_play(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_playid(Client &client, ConstBuffer<const char *> args)
handle_playid(Client &client, Request args)
{
int id = -1;
@ -80,21 +81,21 @@ handle_playid(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_stop(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_stop(Client &client, gcc_unused Request args)
{
client.partition.Stop();
return CommandResult::OK;
}
CommandResult
handle_currentsong(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_currentsong(Client &client, gcc_unused Request args)
{
playlist_print_current(client, client.playlist);
return CommandResult::OK;
}
CommandResult
handle_pause(Client &client, ConstBuffer<const char *> args)
handle_pause(Client &client, Request args)
{
if (!args.IsEmpty()) {
bool pause_flag;
@ -109,7 +110,7 @@ handle_pause(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_status(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_status(Client &client, gcc_unused Request args)
{
const char *state = nullptr;
int song;
@ -223,7 +224,7 @@ handle_status(Client &client, gcc_unused ConstBuffer<const char *> args)
}
CommandResult
handle_next(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_next(Client &client, gcc_unused Request args)
{
playlist &playlist = client.playlist;
@ -239,14 +240,14 @@ handle_next(Client &client, gcc_unused ConstBuffer<const char *> args)
}
CommandResult
handle_previous(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_previous(Client &client, gcc_unused Request args)
{
client.partition.PlayPrevious();
return CommandResult::OK;
}
CommandResult
handle_repeat(Client &client, ConstBuffer<const char *> args)
handle_repeat(Client &client, Request args)
{
bool status;
if (!check_bool(client, &status, args.front()))
@ -257,7 +258,7 @@ handle_repeat(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_single(Client &client, ConstBuffer<const char *> args)
handle_single(Client &client, Request args)
{
bool status;
if (!check_bool(client, &status, args.front()))
@ -268,7 +269,7 @@ handle_single(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_consume(Client &client, ConstBuffer<const char *> args)
handle_consume(Client &client, Request args)
{
bool status;
if (!check_bool(client, &status, args.front()))
@ -279,7 +280,7 @@ handle_consume(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_random(Client &client, ConstBuffer<const char *> args)
handle_random(Client &client, Request args)
{
bool status;
if (!check_bool(client, &status, args.front()))
@ -291,14 +292,14 @@ handle_random(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_clearerror(gcc_unused Client &client, gcc_unused ConstBuffer<const char *> args)
handle_clearerror(gcc_unused Client &client, gcc_unused Request args)
{
client.player_control.ClearError();
return CommandResult::OK;
}
CommandResult
handle_seek(Client &client, ConstBuffer<const char *> args)
handle_seek(Client &client, Request args)
{
unsigned song;
SongTime seek_time;
@ -314,7 +315,7 @@ handle_seek(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_seekid(Client &client, ConstBuffer<const char *> args)
handle_seekid(Client &client, Request args)
{
unsigned id;
SongTime seek_time;
@ -330,7 +331,7 @@ handle_seekid(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_seekcur(Client &client, ConstBuffer<const char *> args)
handle_seekcur(Client &client, Request args)
{
const char *p = args.front();
bool relative = *p == '+' || *p == '-';
@ -344,7 +345,7 @@ handle_seekcur(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_crossfade(Client &client, ConstBuffer<const char *> args)
handle_crossfade(Client &client, Request args)
{
unsigned xfade_time;
@ -356,7 +357,7 @@ handle_crossfade(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_mixrampdb(Client &client, ConstBuffer<const char *> args)
handle_mixrampdb(Client &client, Request args)
{
float db;
@ -368,7 +369,7 @@ handle_mixrampdb(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_mixrampdelay(Client &client, ConstBuffer<const char *> args)
handle_mixrampdelay(Client &client, Request args)
{
float delay_secs;
@ -380,7 +381,7 @@ handle_mixrampdelay(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_replay_gain_mode(Client &client, ConstBuffer<const char *> args)
handle_replay_gain_mode(Client &client, Request args)
{
if (!replay_gain_set_mode_string(args.front())) {
command_error(client, ACK_ERROR_ARG,
@ -393,7 +394,7 @@ handle_replay_gain_mode(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_replay_gain_status(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_replay_gain_status(Client &client, gcc_unused Request args)
{
client_printf(client, "replay_gain_mode: %s\n",
replay_gain_get_mode_string());

View File

@ -23,69 +23,69 @@
#include "CommandResult.hxx"
class Client;
template<typename T> struct ConstBuffer;
class Request;
CommandResult
handle_play(Client &client, ConstBuffer<const char *> args);
handle_play(Client &client, Request args);
CommandResult
handle_playid(Client &client, ConstBuffer<const char *> args);
handle_playid(Client &client, Request args);
CommandResult
handle_stop(Client &client, ConstBuffer<const char *> args);
handle_stop(Client &client, Request args);
CommandResult
handle_currentsong(Client &client, ConstBuffer<const char *> args);
handle_currentsong(Client &client, Request args);
CommandResult
handle_pause(Client &client, ConstBuffer<const char *> args);
handle_pause(Client &client, Request args);
CommandResult
handle_status(Client &client, ConstBuffer<const char *> args);
handle_status(Client &client, Request args);
CommandResult
handle_next(Client &client, ConstBuffer<const char *> args);
handle_next(Client &client, Request args);
CommandResult
handle_previous(Client &client, ConstBuffer<const char *> args);
handle_previous(Client &client, Request args);
CommandResult
handle_repeat(Client &client, ConstBuffer<const char *> args);
handle_repeat(Client &client, Request args);
CommandResult
handle_single(Client &client, ConstBuffer<const char *> args);
handle_single(Client &client, Request args);
CommandResult
handle_consume(Client &client, ConstBuffer<const char *> args);
handle_consume(Client &client, Request args);
CommandResult
handle_random(Client &client, ConstBuffer<const char *> args);
handle_random(Client &client, Request args);
CommandResult
handle_clearerror(Client &client, ConstBuffer<const char *> args);
handle_clearerror(Client &client, Request args);
CommandResult
handle_seek(Client &client, ConstBuffer<const char *> args);
handle_seek(Client &client, Request args);
CommandResult
handle_seekid(Client &client, ConstBuffer<const char *> args);
handle_seekid(Client &client, Request args);
CommandResult
handle_seekcur(Client &client, ConstBuffer<const char *> args);
handle_seekcur(Client &client, Request args);
CommandResult
handle_crossfade(Client &client, ConstBuffer<const char *> args);
handle_crossfade(Client &client, Request args);
CommandResult
handle_mixrampdb(Client &client, ConstBuffer<const char *> args);
handle_mixrampdb(Client &client, Request args);
CommandResult
handle_mixrampdelay(Client &client, ConstBuffer<const char *> args);
handle_mixrampdelay(Client &client, Request args);
CommandResult
handle_replay_gain_mode(Client &client, ConstBuffer<const char *> args);
handle_replay_gain_mode(Client &client, Request args);
CommandResult
handle_replay_gain_status(Client &client, ConstBuffer<const char *> args);
handle_replay_gain_status(Client &client, Request args);
#endif

View File

@ -19,6 +19,7 @@
#include "config.h"
#include "PlaylistCommands.hxx"
#include "Request.hxx"
#include "db/DatabasePlaylist.hxx"
#include "CommandError.hxx"
#include "PlaylistPrint.hxx"
@ -59,7 +60,7 @@ print_spl_list(Client &client, const PlaylistVector &list)
}
CommandResult
handle_save(Client &client, ConstBuffer<const char *> args)
handle_save(Client &client, Request args)
{
Error error;
return spl_save_playlist(args.front(), client.playlist, error)
@ -68,7 +69,7 @@ handle_save(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_load(Client &client, ConstBuffer<const char *> args)
handle_load(Client &client, Request args)
{
RangeArg range;
if (args.size < 2)
@ -90,7 +91,7 @@ handle_load(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_listplaylist(Client &client, ConstBuffer<const char *> args)
handle_listplaylist(Client &client, Request args)
{
const char *const name = args.front();
@ -104,7 +105,7 @@ handle_listplaylist(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_listplaylistinfo(Client &client, ConstBuffer<const char *> args)
handle_listplaylistinfo(Client &client, Request args)
{
const char *const name = args.front();
@ -118,7 +119,7 @@ handle_listplaylistinfo(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_rm(Client &client, ConstBuffer<const char *> args)
handle_rm(Client &client, Request args)
{
const char *const name = args.front();
@ -129,7 +130,7 @@ handle_rm(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_rename(Client &client, ConstBuffer<const char *> args)
handle_rename(Client &client, Request args)
{
const char *const old_name = args[0];
const char *const new_name = args[1];
@ -141,7 +142,7 @@ handle_rename(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_playlistdelete(Client &client, ConstBuffer<const char *> args)
handle_playlistdelete(Client &client, Request args)
{
const char *const name = args[0];
unsigned from;
@ -156,7 +157,7 @@ handle_playlistdelete(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_playlistmove(Client &client, ConstBuffer<const char *> args)
handle_playlistmove(Client &client, Request args)
{
const char *const name = args.front();
unsigned from, to;
@ -173,7 +174,7 @@ handle_playlistmove(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_playlistclear(Client &client, ConstBuffer<const char *> args)
handle_playlistclear(Client &client, Request args)
{
const char *const name = args.front();
@ -184,7 +185,7 @@ handle_playlistclear(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_playlistadd(Client &client, ConstBuffer<const char *> args)
handle_playlistadd(Client &client, Request args)
{
const char *const playlist = args[0];
const char *const uri = args[1];
@ -218,7 +219,7 @@ handle_playlistadd(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_listplaylists(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_listplaylists(Client &client, gcc_unused Request args)
{
Error error;
const auto list = ListPlaylistFiles(error);

View File

@ -24,43 +24,43 @@
#include "Compiler.h"
class Client;
template<typename T> struct ConstBuffer;
class Request;
gcc_const
bool
playlist_commands_available();
CommandResult
handle_save(Client &client, ConstBuffer<const char *> args);
handle_save(Client &client, Request args);
CommandResult
handle_load(Client &client, ConstBuffer<const char *> args);
handle_load(Client &client, Request args);
CommandResult
handle_listplaylist(Client &client, ConstBuffer<const char *> args);
handle_listplaylist(Client &client, Request args);
CommandResult
handle_listplaylistinfo(Client &client, ConstBuffer<const char *> args);
handle_listplaylistinfo(Client &client, Request args);
CommandResult
handle_rm(Client &client, ConstBuffer<const char *> args);
handle_rm(Client &client, Request args);
CommandResult
handle_rename(Client &client, ConstBuffer<const char *> args);
handle_rename(Client &client, Request args);
CommandResult
handle_playlistdelete(Client &client, ConstBuffer<const char *> args);
handle_playlistdelete(Client &client, Request args);
CommandResult
handle_playlistmove(Client &client, ConstBuffer<const char *> args);
handle_playlistmove(Client &client, Request args);
CommandResult
handle_playlistclear(Client &client, ConstBuffer<const char *> args);
handle_playlistclear(Client &client, Request args);
CommandResult
handle_playlistadd(Client &client, ConstBuffer<const char *> args);
handle_playlistadd(Client &client, Request args);
CommandResult
handle_listplaylists(Client &client, ConstBuffer<const char *> args);
handle_listplaylists(Client &client, Request args);
#endif

View File

@ -19,6 +19,7 @@
#include "config.h"
#include "QueueCommands.hxx"
#include "Request.hxx"
#include "CommandError.hxx"
#include "db/DatabaseQueue.hxx"
#include "db/Selection.hxx"
@ -54,7 +55,7 @@ translate_uri(const char *uri)
}
CommandResult
handle_add(Client &client, ConstBuffer<const char *> args)
handle_add(Client &client, Request args)
{
const char *uri = args.front();
if (memcmp(uri, "/", 2) == 0)
@ -92,7 +93,7 @@ handle_add(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_addid(Client &client, ConstBuffer<const char *> args)
handle_addid(Client &client, Request args)
{
const char *const uri = translate_uri(args.front());
@ -151,7 +152,7 @@ parse_time_range(const char *p, SongTime &start_r, SongTime &end_r)
}
CommandResult
handle_rangeid(Client &client, ConstBuffer<const char *> args)
handle_rangeid(Client &client, Request args)
{
unsigned id;
if (!check_unsigned(client, &id, args.front()))
@ -173,7 +174,7 @@ handle_rangeid(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_delete(Client &client, ConstBuffer<const char *> args)
handle_delete(Client &client, Request args)
{
RangeArg range;
if (!ParseCommandArg(client, range, args.front()))
@ -184,7 +185,7 @@ handle_delete(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_deleteid(Client &client, ConstBuffer<const char *> args)
handle_deleteid(Client &client, Request args)
{
unsigned id;
@ -196,14 +197,14 @@ handle_deleteid(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_playlist(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_playlist(Client &client, gcc_unused Request args)
{
playlist_print_uris(client, client.playlist);
return CommandResult::OK;
}
CommandResult
handle_shuffle(gcc_unused Client &client, ConstBuffer<const char *> args)
handle_shuffle(gcc_unused Client &client, Request args)
{
RangeArg range;
if (args.IsEmpty())
@ -216,14 +217,14 @@ handle_shuffle(gcc_unused Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_clear(gcc_unused Client &client, gcc_unused ConstBuffer<const char *> args)
handle_clear(gcc_unused Client &client, gcc_unused Request args)
{
client.partition.ClearQueue();
return CommandResult::OK;
}
CommandResult
handle_plchanges(Client &client, ConstBuffer<const char *> args)
handle_plchanges(Client &client, Request args)
{
uint32_t version;
@ -235,7 +236,7 @@ handle_plchanges(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_plchangesposid(Client &client, ConstBuffer<const char *> args)
handle_plchangesposid(Client &client, Request args)
{
uint32_t version;
@ -247,7 +248,7 @@ handle_plchangesposid(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_playlistinfo(Client &client, ConstBuffer<const char *> args)
handle_playlistinfo(Client &client, Request args)
{
RangeArg range;
if (args.IsEmpty())
@ -264,7 +265,7 @@ handle_playlistinfo(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_playlistid(Client &client, ConstBuffer<const char *> args)
handle_playlistid(Client &client, Request args)
{
if (!args.IsEmpty()) {
unsigned id;
@ -284,7 +285,7 @@ handle_playlistid(Client &client, ConstBuffer<const char *> args)
}
static CommandResult
handle_playlist_match(Client &client, ConstBuffer<const char *> args,
handle_playlist_match(Client &client, Request args,
bool fold_case)
{
SongFilter filter;
@ -298,19 +299,19 @@ handle_playlist_match(Client &client, ConstBuffer<const char *> args,
}
CommandResult
handle_playlistfind(Client &client, ConstBuffer<const char *> args)
handle_playlistfind(Client &client, Request args)
{
return handle_playlist_match(client, args, false);
}
CommandResult
handle_playlistsearch(Client &client, ConstBuffer<const char *> args)
handle_playlistsearch(Client &client, Request args)
{
return handle_playlist_match(client, args, true);
}
CommandResult
handle_prio(Client &client, ConstBuffer<const char *> args)
handle_prio(Client &client, Request args)
{
const char *const priority_string = args.shift();
unsigned priority;
@ -341,7 +342,7 @@ handle_prio(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_prioid(Client &client, ConstBuffer<const char *> args)
handle_prioid(Client &client, Request args)
{
const char *const priority_string = args.shift();
unsigned priority;
@ -370,7 +371,7 @@ handle_prioid(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_move(Client &client, ConstBuffer<const char *> args)
handle_move(Client &client, Request args)
{
RangeArg range;
int to;
@ -386,7 +387,7 @@ handle_move(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_moveid(Client &client, ConstBuffer<const char *> args)
handle_moveid(Client &client, Request args)
{
unsigned id;
int to;
@ -400,7 +401,7 @@ handle_moveid(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_swap(Client &client, ConstBuffer<const char *> args)
handle_swap(Client &client, Request args)
{
unsigned song1, song2;
@ -415,7 +416,7 @@ handle_swap(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_swapid(Client &client, ConstBuffer<const char *> args)
handle_swapid(Client &client, Request args)
{
unsigned id1, id2;

View File

@ -23,66 +23,66 @@
#include "CommandResult.hxx"
class Client;
template<typename T> struct ConstBuffer;
class Request;
CommandResult
handle_add(Client &client, ConstBuffer<const char *> args);
handle_add(Client &client, Request args);
CommandResult
handle_addid(Client &client, ConstBuffer<const char *> args);
handle_addid(Client &client, Request args);
CommandResult
handle_rangeid(Client &client, ConstBuffer<const char *> args);
handle_rangeid(Client &client, Request args);
CommandResult
handle_delete(Client &client, ConstBuffer<const char *> args);
handle_delete(Client &client, Request args);
CommandResult
handle_deleteid(Client &client, ConstBuffer<const char *> args);
handle_deleteid(Client &client, Request args);
CommandResult
handle_playlist(Client &client, ConstBuffer<const char *> args);
handle_playlist(Client &client, Request args);
CommandResult
handle_shuffle(Client &client, ConstBuffer<const char *> args);
handle_shuffle(Client &client, Request args);
CommandResult
handle_clear(Client &client, ConstBuffer<const char *> args);
handle_clear(Client &client, Request args);
CommandResult
handle_plchanges(Client &client, ConstBuffer<const char *> args);
handle_plchanges(Client &client, Request args);
CommandResult
handle_plchangesposid(Client &client, ConstBuffer<const char *> args);
handle_plchangesposid(Client &client, Request args);
CommandResult
handle_playlistinfo(Client &client, ConstBuffer<const char *> args);
handle_playlistinfo(Client &client, Request args);
CommandResult
handle_playlistid(Client &client, ConstBuffer<const char *> args);
handle_playlistid(Client &client, Request args);
CommandResult
handle_playlistfind(Client &client, ConstBuffer<const char *> args);
handle_playlistfind(Client &client, Request args);
CommandResult
handle_playlistsearch(Client &client, ConstBuffer<const char *> args);
handle_playlistsearch(Client &client, Request args);
CommandResult
handle_prio(Client &client, ConstBuffer<const char *> args);
handle_prio(Client &client, Request args);
CommandResult
handle_prioid(Client &client, ConstBuffer<const char *> args);
handle_prioid(Client &client, Request args);
CommandResult
handle_move(Client &client, ConstBuffer<const char *> args);
handle_move(Client &client, Request args);
CommandResult
handle_moveid(Client &client, ConstBuffer<const char *> args);
handle_moveid(Client &client, Request args);
CommandResult
handle_swap(Client &client, ConstBuffer<const char *> args);
handle_swap(Client &client, Request args);
CommandResult
handle_swapid(Client &client, ConstBuffer<const char *> args);
handle_swapid(Client &client, Request args);
#endif

34
src/command/Request.hxx Normal file
View File

@ -0,0 +1,34 @@
/*
* Copyright (C) 2003-2015 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef MPD_REQUEST_HXX
#define MPD_REQUEST_HXX
#include "check.h"
#include "util/ConstBuffer.hxx"
class Request : public ConstBuffer<const char *> {
typedef ConstBuffer<const char *> Base;
public:
constexpr Request(const char *const*argv, size_type n)
:Base(argv, n) {}
};
#endif

View File

@ -19,6 +19,7 @@
#include "config.h"
#include "StickerCommands.hxx"
#include "Request.hxx"
#include "SongPrint.hxx"
#include "db/Interface.hxx"
#include "db/DatabaseGlue.hxx"
@ -52,7 +53,7 @@ sticker_song_find_print_cb(const LightSong &song, const char *value,
}
static CommandResult
handle_sticker_song(Client &client, ConstBuffer<const char *> args)
handle_sticker_song(Client &client, Request args)
{
Error error;
const Database *db = client.GetDatabase(error);
@ -191,7 +192,7 @@ handle_sticker_song(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_sticker(Client &client, ConstBuffer<const char *> args)
handle_sticker(Client &client, Request args)
{
assert(args.size >= 3);

View File

@ -23,9 +23,9 @@
#include "CommandResult.hxx"
class Client;
template<typename T> struct ConstBuffer;
class Request;
CommandResult
handle_sticker(Client &client, ConstBuffer<const char *> args);
handle_sticker(Client &client, Request args);
#endif

View File

@ -21,6 +21,7 @@
#include "config.h"
#include "StorageCommands.hxx"
#include "Request.hxx"
#include "CommandError.hxx"
#include "protocol/Result.hxx"
#include "util/UriUtil.hxx"
@ -168,7 +169,7 @@ print_storage_uri(Client &client, const Storage &storage)
}
CommandResult
handle_listmounts(Client &client, gcc_unused ConstBuffer<const char *> args)
handle_listmounts(Client &client, gcc_unused Request args)
{
Storage *_composite = client.partition.instance.storage;
if (_composite == nullptr) {
@ -190,7 +191,7 @@ handle_listmounts(Client &client, gcc_unused ConstBuffer<const char *> args)
}
CommandResult
handle_mount(Client &client, ConstBuffer<const char *> args)
handle_mount(Client &client, Request args)
{
Storage *_composite = client.partition.instance.storage;
if (_composite == nullptr) {
@ -253,7 +254,7 @@ handle_mount(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_unmount(Client &client, ConstBuffer<const char *> args)
handle_unmount(Client &client, Request args)
{
Storage *_composite = client.partition.instance.storage;
if (_composite == nullptr) {

View File

@ -24,7 +24,7 @@
class Client;
class Storage;
template<typename T> struct ConstBuffer;
class Request;
CommandResult
handle_listfiles_storage(Client &client, Storage &storage, const char *uri);
@ -33,12 +33,12 @@ CommandResult
handle_listfiles_storage(Client &client, const char *uri);
CommandResult
handle_listmounts(Client &client, ConstBuffer<const char *> args);
handle_listmounts(Client &client, Request args);
CommandResult
handle_mount(Client &client, ConstBuffer<const char *> args);
handle_mount(Client &client, Request args);
CommandResult
handle_unmount(Client &client, ConstBuffer<const char *> args);
handle_unmount(Client &client, Request args);
#endif

View File

@ -19,6 +19,7 @@
#include "config.h"
#include "TagCommands.hxx"
#include "Request.hxx"
#include "CommandError.hxx"
#include "client/Client.hxx"
#include "protocol/ArgParser.hxx"
@ -28,7 +29,7 @@
#include "util/ConstBuffer.hxx"
CommandResult
handle_addtagid(Client &client, ConstBuffer<const char *> args)
handle_addtagid(Client &client, Request args)
{
unsigned song_id;
if (!check_unsigned(client, &song_id, args.front()))
@ -53,7 +54,7 @@ handle_addtagid(Client &client, ConstBuffer<const char *> args)
}
CommandResult
handle_cleartagid(Client &client, ConstBuffer<const char *> args)
handle_cleartagid(Client &client, Request args)
{
unsigned song_id;
if (!check_unsigned(client, &song_id, args.front()))

View File

@ -23,12 +23,12 @@
#include "CommandResult.hxx"
class Client;
template<typename T> struct ConstBuffer;
class Request;
CommandResult
handle_addtagid(Client &client, ConstBuffer<const char *> args);
handle_addtagid(Client &client, Request args);
CommandResult
handle_cleartagid(Client &client, ConstBuffer<const char *> args);
handle_cleartagid(Client &client, Request args);
#endif