command/database: move code to ParseDatabaseSelection()
This commit is contained in:
parent
95d8b30864
commit
de4fd4c059
@ -70,8 +70,13 @@ ParseSortTag(const char *s)
|
|||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
static CommandResult
|
/**
|
||||||
handle_match(Client &client, Request args, Response &r, bool fold_case)
|
* Convert all remaining arguments to a #DatabaseSelection.
|
||||||
|
*
|
||||||
|
* @param filter a buffer to be used for DatabaseSelection::filter
|
||||||
|
*/
|
||||||
|
static DatabaseSelection
|
||||||
|
ParseDatabaseSelection(Request args, bool fold_case, SongFilter &filter)
|
||||||
{
|
{
|
||||||
RangeArg window = RangeArg::All();
|
RangeArg window = RangeArg::All();
|
||||||
if (args.size >= 2 && StringIsEqual(args[args.size - 2], "window")) {
|
if (args.size >= 2 && StringIsEqual(args[args.size - 2], "window")) {
|
||||||
@ -96,13 +101,11 @@ handle_match(Client &client, Request args, Response &r, bool fold_case)
|
|||||||
args.pop_back();
|
args.pop_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
SongFilter filter;
|
|
||||||
try {
|
try {
|
||||||
filter.Parse(args, fold_case);
|
filter.Parse(args, fold_case);
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
r.Error(ACK_ERROR_ARG,
|
throw ProtocolError(ACK_ERROR_ARG,
|
||||||
GetFullMessage(std::current_exception()).c_str());
|
GetFullMessage(std::current_exception()).c_str());
|
||||||
return CommandResult::ERROR;
|
|
||||||
}
|
}
|
||||||
filter.Optimize();
|
filter.Optimize();
|
||||||
|
|
||||||
@ -110,6 +113,14 @@ handle_match(Client &client, Request args, Response &r, bool fold_case)
|
|||||||
selection.window = window;
|
selection.window = window;
|
||||||
selection.sort = sort;
|
selection.sort = sort;
|
||||||
selection.descending = descending;
|
selection.descending = descending;
|
||||||
|
return selection;
|
||||||
|
}
|
||||||
|
|
||||||
|
static CommandResult
|
||||||
|
handle_match(Client &client, Request args, Response &r, bool fold_case)
|
||||||
|
{
|
||||||
|
SongFilter filter;
|
||||||
|
const auto selection = ParseDatabaseSelection(args, fold_case, filter);
|
||||||
|
|
||||||
db_selection_print(r, client.GetPartition(),
|
db_selection_print(r, client.GetPartition(),
|
||||||
selection, true, false);
|
selection, true, false);
|
||||||
|
Loading…
Reference in New Issue
Block a user