From c9f928ea2ea10220d40cddf9d7fc8009a22cf02a Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Mon, 29 Jan 2018 13:43:40 +0100 Subject: Support UUID's without curly braces --- sinksh/sinksh_utils.cpp | 19 ++++++++++++++----- sinksh/sinksh_utils.h | 1 + sinksh/syntax_modules/sink_list.cpp | 3 +++ sinksh/syntax_modules/sink_sync.cpp | 2 +- 4 files changed, 19 insertions(+), 6 deletions(-) (limited to 'sinksh') diff --git a/sinksh/sinksh_utils.cpp b/sinksh/sinksh_utils.cpp index c542670..e2cd977 100644 --- a/sinksh/sinksh_utils.cpp +++ b/sinksh/sinksh_utils.cpp @@ -164,7 +164,7 @@ bool applyFilter(Sink::Query &query, const QStringList &args_) if (resource.contains('/')) { //The resource isn't an id but a path auto list = resource.split('/'); - const auto resourceId = list.takeFirst(); + const auto resourceId = parseUid(list.takeFirst()); query.resourceFilter(resourceId); if (type == Sink::ApplicationDomain::getTypeName() && !list.isEmpty()) { auto value = list.takeFirst(); @@ -188,7 +188,7 @@ bool applyFilter(Sink::Query &query, const QStringList &args_) } } } else { - query.resourceFilter(resource); + query.resourceFilter(parseUid(resource)); } } return true; @@ -199,22 +199,31 @@ bool applyFilter(Sink::Query &query, const SyntaxTree::Options &options) bool ret = applyFilter(query, options.positionalArguments); if (options.options.contains("resource")) { for (const auto &f : options.options.value("resource")) { - query.resourceFilter(f.toLatin1()); + query.resourceFilter(parseUid(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))); + const auto value = filter.value(1); + query.filter(property, Sink::PropertyParser::parse(query.type(), property, QString::fromUtf8(parseUid(value.toUtf8())))); } } if (options.options.contains("id")) { for (const auto &f : options.options.value("id")) { - query.filter(f.toUtf8()); + query.filter(parseUid(f.toUtf8())); } } return ret; } +QByteArray parseUid(const QByteArray &uid) +{ + if (uid.size() == 36 && uid.contains('-') && !uid.startsWith('{')) { + return '{' + uid + '}'; + } + return uid; +} + } diff --git a/sinksh/sinksh_utils.h b/sinksh/sinksh_utils.h index e251803..e11a428 100644 --- a/sinksh/sinksh_utils.h +++ b/sinksh/sinksh_utils.h @@ -45,6 +45,7 @@ QStringList debugareaCompleter(const QStringList &, const QString &fragment, Sta QMap keyValueMapFromArgs(const QStringList &args); bool applyFilter(Sink::Query &query, const QStringList &args); bool applyFilter(Sink::Query &query, const SyntaxTree::Options &args); +QByteArray parseUid(const QByteArray &); /** * A small abstraction layer to use the sink store with the type available as string. diff --git a/sinksh/syntax_modules/sink_list.cpp b/sinksh/syntax_modules/sink_list.cpp index b002438..a56740d 100644 --- a/sinksh/syntax_modules/sink_list.cpp +++ b/sinksh/syntax_modules/sink_list.cpp @@ -42,6 +42,9 @@ namespace SinkList static QByteArray compressId(bool compress, const QByteArray &id) { if (!compress) { + if (id.startsWith('{')) { + return id.mid(1, id.length() - 2); + } return id; } auto compactId = id.mid(1, id.length() - 2).split('-'); diff --git a/sinksh/syntax_modules/sink_sync.cpp b/sinksh/syntax_modules/sink_sync.cpp index 8b48785..f165f58 100644 --- a/sinksh/syntax_modules/sink_sync.cpp +++ b/sinksh/syntax_modules/sink_sync.cpp @@ -49,7 +49,7 @@ bool sync(const QStringList &args, State &state) Sink::Query query; if (!options.positionalArguments.isEmpty() && !SinkshUtils::isValidStoreType(options.positionalArguments.first())) { //We have only specified a resource - query.resourceFilter(options.positionalArguments.first().toLatin1()); + query.resourceFilter(SinkshUtils::parseUid(options.positionalArguments.first().toLatin1())); } else { //We have specified a full filter if (!SinkshUtils::applyFilter(query, options.positionalArguments)) { -- cgit v1.2.3