SongFilter: convert argv to ConstBuffer
This commit is contained in:
parent
7fb9bebd46
commit
b999e16406
|
@ -22,6 +22,7 @@
|
||||||
#include "db/LightSong.hxx"
|
#include "db/LightSong.hxx"
|
||||||
#include "DetachedSong.hxx"
|
#include "DetachedSong.hxx"
|
||||||
#include "tag/Tag.hxx"
|
#include "tag/Tag.hxx"
|
||||||
|
#include "util/ConstBuffer.hxx"
|
||||||
#include "util/ASCII.hxx"
|
#include "util/ASCII.hxx"
|
||||||
#include "util/UriUtil.hxx"
|
#include "util/UriUtil.hxx"
|
||||||
#include "lib/icu/Collate.hxx"
|
#include "lib/icu/Collate.hxx"
|
||||||
|
@ -181,13 +182,13 @@ SongFilter::Parse(const char *tag_string, const char *value, bool fold_case)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
SongFilter::Parse(unsigned argc, char *argv[], bool fold_case)
|
SongFilter::Parse(ConstBuffer<const char *> args, bool fold_case)
|
||||||
{
|
{
|
||||||
if (argc == 0 || argc % 2 != 0)
|
if (args.size == 0 || args.size % 2 != 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
for (unsigned i = 0; i < argc; i += 2)
|
for (unsigned i = 0; i < args.size; i += 2)
|
||||||
if (!Parse(argv[i], argv[i + 1], fold_case))
|
if (!Parse(args[i], args[i + 1], fold_case))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#define LOCATE_TAG_FILE_TYPE TAG_NUM_OF_ITEM_TYPES+10
|
#define LOCATE_TAG_FILE_TYPE TAG_NUM_OF_ITEM_TYPES+10
|
||||||
#define LOCATE_TAG_ANY_TYPE TAG_NUM_OF_ITEM_TYPES+20
|
#define LOCATE_TAG_ANY_TYPE TAG_NUM_OF_ITEM_TYPES+20
|
||||||
|
|
||||||
|
template<typename T> struct ConstBuffer;
|
||||||
struct Tag;
|
struct Tag;
|
||||||
struct TagItem;
|
struct TagItem;
|
||||||
struct Song;
|
struct Song;
|
||||||
|
@ -101,8 +102,7 @@ public:
|
||||||
gcc_nonnull(2,3)
|
gcc_nonnull(2,3)
|
||||||
bool Parse(const char *tag, const char *value, bool fold_case=false);
|
bool Parse(const char *tag, const char *value, bool fold_case=false);
|
||||||
|
|
||||||
gcc_nonnull(3)
|
bool Parse(ConstBuffer<const char *> args, bool fold_case=false);
|
||||||
bool Parse(unsigned argc, char *argv[], bool fold_case=false);
|
|
||||||
|
|
||||||
gcc_pure
|
gcc_pure
|
||||||
bool Match(const Tag &tag) const;
|
bool Match(const Tag &tag) const;
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "CommandError.hxx"
|
#include "CommandError.hxx"
|
||||||
#include "client/Client.hxx"
|
#include "client/Client.hxx"
|
||||||
#include "tag/Tag.hxx"
|
#include "tag/Tag.hxx"
|
||||||
|
#include "util/ConstBuffer.hxx"
|
||||||
#include "util/Error.hxx"
|
#include "util/Error.hxx"
|
||||||
#include "SongFilter.hxx"
|
#include "SongFilter.hxx"
|
||||||
#include "protocol/Result.hxx"
|
#include "protocol/Result.hxx"
|
||||||
|
@ -63,8 +64,10 @@ handle_lsinfo2(Client &client, int argc, char *argv[])
|
||||||
static CommandResult
|
static CommandResult
|
||||||
handle_match(Client &client, int argc, char *argv[], bool fold_case)
|
handle_match(Client &client, int argc, char *argv[], bool fold_case)
|
||||||
{
|
{
|
||||||
|
ConstBuffer<const char *> args(argv + 1, argc - 1);
|
||||||
|
|
||||||
SongFilter filter;
|
SongFilter filter;
|
||||||
if (!filter.Parse(argc - 1, argv + 1, fold_case)) {
|
if (!filter.Parse(args, fold_case)) {
|
||||||
command_error(client, ACK_ERROR_ARG, "incorrect arguments");
|
command_error(client, ACK_ERROR_ARG, "incorrect arguments");
|
||||||
return CommandResult::ERROR;
|
return CommandResult::ERROR;
|
||||||
}
|
}
|
||||||
|
@ -92,8 +95,10 @@ handle_search(Client &client, int argc, char *argv[])
|
||||||
static CommandResult
|
static CommandResult
|
||||||
handle_match_add(Client &client, int argc, char *argv[], bool fold_case)
|
handle_match_add(Client &client, int argc, char *argv[], bool fold_case)
|
||||||
{
|
{
|
||||||
|
ConstBuffer<const char *> args(argv + 1, argc - 1);
|
||||||
|
|
||||||
SongFilter filter;
|
SongFilter filter;
|
||||||
if (!filter.Parse(argc - 1, argv + 1, fold_case)) {
|
if (!filter.Parse(args, fold_case)) {
|
||||||
command_error(client, ACK_ERROR_ARG, "incorrect arguments");
|
command_error(client, ACK_ERROR_ARG, "incorrect arguments");
|
||||||
return CommandResult::ERROR;
|
return CommandResult::ERROR;
|
||||||
}
|
}
|
||||||
|
@ -120,10 +125,11 @@ handle_searchadd(Client &client, int argc, char *argv[])
|
||||||
CommandResult
|
CommandResult
|
||||||
handle_searchaddpl(Client &client, int argc, char *argv[])
|
handle_searchaddpl(Client &client, int argc, char *argv[])
|
||||||
{
|
{
|
||||||
const char *playlist = argv[1];
|
ConstBuffer<const char *> args(argv + 1, argc - 1);
|
||||||
|
const char *playlist = args.shift();
|
||||||
|
|
||||||
SongFilter filter;
|
SongFilter filter;
|
||||||
if (!filter.Parse(argc - 2, argv + 2, true)) {
|
if (!filter.Parse(args, true)) {
|
||||||
command_error(client, ACK_ERROR_ARG, "incorrect arguments");
|
command_error(client, ACK_ERROR_ARG, "incorrect arguments");
|
||||||
return CommandResult::ERROR;
|
return CommandResult::ERROR;
|
||||||
}
|
}
|
||||||
|
@ -142,8 +148,10 @@ handle_searchaddpl(Client &client, int argc, char *argv[])
|
||||||
CommandResult
|
CommandResult
|
||||||
handle_count(Client &client, int argc, char *argv[])
|
handle_count(Client &client, int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
ConstBuffer<const char *> args(argv + 1, argc - 1);
|
||||||
|
|
||||||
SongFilter filter;
|
SongFilter filter;
|
||||||
if (!filter.Parse(argc - 1, argv + 1, false)) {
|
if (!filter.Parse(args, false)) {
|
||||||
command_error(client, ACK_ERROR_ARG, "incorrect arguments");
|
command_error(client, ACK_ERROR_ARG, "incorrect arguments");
|
||||||
return CommandResult::ERROR;
|
return CommandResult::ERROR;
|
||||||
}
|
}
|
||||||
|
@ -191,8 +199,10 @@ handle_list(Client &client, int argc, char *argv[])
|
||||||
|
|
||||||
filter = new SongFilter((unsigned)TAG_ARTIST, argv[2]);
|
filter = new SongFilter((unsigned)TAG_ARTIST, argv[2]);
|
||||||
} else if (argc > 2) {
|
} else if (argc > 2) {
|
||||||
|
ConstBuffer<const char *> args(argv + 2, argc - 2);
|
||||||
|
|
||||||
filter = new SongFilter();
|
filter = new SongFilter();
|
||||||
if (!filter->Parse(argc - 2, argv + 2, false)) {
|
if (!filter->Parse(args, false)) {
|
||||||
delete filter;
|
delete filter;
|
||||||
command_error(client, ACK_ERROR_ARG,
|
command_error(client, ACK_ERROR_ARG,
|
||||||
"not able to parse args");
|
"not able to parse args");
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include "protocol/ArgParser.hxx"
|
#include "protocol/ArgParser.hxx"
|
||||||
#include "protocol/Result.hxx"
|
#include "protocol/Result.hxx"
|
||||||
#include "ls.hxx"
|
#include "ls.hxx"
|
||||||
|
#include "util/ConstBuffer.hxx"
|
||||||
#include "util/UriUtil.hxx"
|
#include "util/UriUtil.hxx"
|
||||||
#include "util/Error.hxx"
|
#include "util/Error.hxx"
|
||||||
#include "fs/AllocatedPath.hxx"
|
#include "fs/AllocatedPath.hxx"
|
||||||
|
@ -231,8 +232,10 @@ static CommandResult
|
||||||
handle_playlist_match(Client &client, int argc, char *argv[],
|
handle_playlist_match(Client &client, int argc, char *argv[],
|
||||||
bool fold_case)
|
bool fold_case)
|
||||||
{
|
{
|
||||||
|
ConstBuffer<const char *> args(argv + 1, argc - 1);
|
||||||
|
|
||||||
SongFilter filter;
|
SongFilter filter;
|
||||||
if (!filter.Parse(argc - 1, argv + 1, fold_case)) {
|
if (!filter.Parse(args, fold_case)) {
|
||||||
command_error(client, ACK_ERROR_ARG, "incorrect arguments");
|
command_error(client, ACK_ERROR_ARG, "incorrect arguments");
|
||||||
return CommandResult::ERROR;
|
return CommandResult::ERROR;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue