From 50df30dfea10a3c1ee6fe8de9856fdb4596a08fe Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Thu, 25 Jan 2018 11:02:59 +0100 Subject: Share the filter syntax for count and list --- sinksh/sinksh_utils.cpp | 21 ++++++++++++++++++++- sinksh/syntax_modules/sink_count.cpp | 2 +- sinksh/syntax_modules/sink_list.cpp | 25 +++---------------------- 3 files changed, 24 insertions(+), 24 deletions(-) (limited to 'sinksh') diff --git a/sinksh/sinksh_utils.cpp b/sinksh/sinksh_utils.cpp index 3a3484a..3fc9c29 100644 --- a/sinksh/sinksh_utils.cpp +++ b/sinksh/sinksh_utils.cpp @@ -22,6 +22,7 @@ #include "common/store.h" #include "common/log.h" +#include "common/propertyparser.h" #include "utils.h" @@ -195,7 +196,25 @@ bool applyFilter(Sink::Query &query, const QStringList &args_) bool applyFilter(Sink::Query &query, const SyntaxTree::Options &options) { - return applyFilter(query, options.positionalArguments); + bool ret = applyFilter(query, options.positionalArguments); + if (options.options.contains("resource")) { + for (const auto &f : options.options.value("resource")) { + query.resourceFilter(f.toLatin1()); + } + } + if (options.options.contains("filter")) { + for (const auto &f : options.options.value("filter")) { + auto filter = f.split("="); + const auto property = filter.value(0).toLatin1(); + query.filter(property, Sink::PropertyParser::parse(query.type(), property, filter.value(1))); + } + } + if (options.options.contains("id")) { + for (const auto &f : options.options.value("id")) { + query.filter(f.toUtf8()); + } + } + return ret; } } diff --git a/sinksh/syntax_modules/sink_count.cpp b/sinksh/syntax_modules/sink_count.cpp index 9b6aa1e..04a9550 100644 --- a/sinksh/syntax_modules/sink_count.cpp +++ b/sinksh/syntax_modules/sink_count.cpp @@ -41,7 +41,7 @@ bool count(const QStringList &args, State &state) { Sink::Query query; query.setId("count"); - if (!SinkshUtils::applyFilter(query, args)) { + if (!SinkshUtils::applyFilter(query, SyntaxTree::parseOptions(args))) { state.printError(QObject::tr("Options: $type $filter")); return false; } diff --git a/sinksh/syntax_modules/sink_list.cpp b/sinksh/syntax_modules/sink_list.cpp index e4c4837..b002438 100644 --- a/sinksh/syntax_modules/sink_list.cpp +++ b/sinksh/syntax_modules/sink_list.cpp @@ -96,9 +96,6 @@ bool list(const QStringList &args_, State &state) } auto options = SyntaxTree::parseOptions(args_); - - auto type = options.positionalArguments.isEmpty() ? QString{} : options.positionalArguments.first(); - bool asLine = true; Sink::Query query; @@ -107,30 +104,14 @@ bool list(const QStringList &args_, State &state) state.printError(QObject::tr("Options: $type [--resource $resource] [--compact] [--filter $property=$value] [--showall|--show $property]")); return false; } - if (options.options.contains("resource")) { - for (const auto &f : options.options.value("resource")) { - query.resourceFilter(f.toLatin1()); - } - } - if (options.options.contains("filter")) { - for (const auto &f : options.options.value("filter")) { - auto filter = f.split("="); - const auto property = filter.value(0).toLatin1(); - query.filter(property, Sink::PropertyParser::parse(type.toLatin1(), property, filter.value(1))); - } - } - if (options.options.contains("id")) { - for (const auto &f : options.options.value("id")) { - query.filter(f.toUtf8()); - } - } + auto compact = options.options.contains("compact"); if (!options.options.contains("showall")) { if (options.options.contains("show")) { auto list = options.options.value("show"); std::transform(list.constBegin(), list.constEnd(), std::back_inserter(query.requestedProperties), [] (const QString &s) { return s.toLatin1(); }); } else { - query.requestedProperties = SinkshUtils::requestedProperties(type); + query.requestedProperties = SinkshUtils::requestedProperties(query.type()); } } else { asLine = false; @@ -139,7 +120,7 @@ bool list(const QStringList &args_, State &state) QByteArrayList toPrint; QStringList tableLine; - for (const auto &o : SinkshUtils::getStore(type).read(query)) { + for (const auto &o : SinkshUtils::getStore(query.type()).read(query)) { if (tableLine.isEmpty()) { tableLine << QObject::tr("Resource") << QObject::tr("Identifier"); if (query.requestedProperties.isEmpty()) { -- cgit v1.2.3