From cc5363fe4b0cd4ea95ac98d9d37f2028fe226145 Mon Sep 17 00:00:00 2001 From: Aaron Seigo Date: Mon, 28 Dec 2015 22:00:19 +0100 Subject: typeCompleter and resourceOrTypeCompleter --- akonadish/akonadish_utils.cpp | 36 ++++++++++++++++++++++------- akonadish/akonadish_utils.h | 2 ++ akonadish/syntax_modules/akonadi_count.cpp | 2 +- akonadish/syntax_modules/akonadi_list.cpp | 7 +++--- akonadish/syntax_modules/akonadi_modify.cpp | 2 +- 5 files changed, 35 insertions(+), 14 deletions(-) (limited to 'akonadish') diff --git a/akonadish/akonadish_utils.cpp b/akonadish/akonadish_utils.cpp index 90847f6..070d788 100644 --- a/akonadish/akonadish_utils.cpp +++ b/akonadish/akonadish_utils.cpp @@ -25,10 +25,11 @@ namespace AkonadishUtils { +static QStringList s_types = QStringList() << "resource" << "folder" << "mail" << "event"; + bool isValidStoreType(const QString &type) { - static const QSet types = QSet() << "folder" << "mail" << "event" << "resource"; - return types.contains(type); + return s_types.contains(type); } StoreBase &getStore(const QString &type) @@ -97,23 +98,42 @@ QStringList resourceIds(State &state) return resources; } -QStringList resourceCompleter(const QStringList &commands, const QString &fragment, State &state) +QStringList filtered(const QStringList &list, const QString &fragment) { - QStringList resources = resourceIds(state); if (fragment.isEmpty()) { - return resources; + return list; } QStringList filtered; - for (auto resource: resources) { - if (resource.startsWith(fragment)) { - filtered << resource; + for (auto item: list) { + if (item.startsWith(fragment)) { + filtered << item; } } return filtered; } +QStringList resourceCompleter(const QStringList &, const QString &fragment, State &state) +{ + return filtered(resourceIds(state), fragment); +} + +QStringList resourceOrTypeCompleter(const QStringList &commands, const QString &fragment, State &state) +{ + static QStringList types = QStringList() << "resource" << "folder" << "mail" << "event"; + if (commands.count() == 1) { + return filtered(s_types, fragment); + } + + return filtered(resourceIds(state), fragment); +} + +QStringList typeCompleter(const QStringList &commands, const QString &fragment, State &state) +{ + return filtered(s_types, fragment); +} + QMap keyValueMapFromArgs(const QStringList &args) { //TODO: this is not the most clever of algorithms. preserved during the port of commands diff --git a/akonadish/akonadish_utils.h b/akonadish/akonadish_utils.h index 5671157..5dd24f1 100644 --- a/akonadish/akonadish_utils.h +++ b/akonadish/akonadish_utils.h @@ -38,6 +38,8 @@ StoreBase &getStore(const QString &type); QSharedPointer loadModel(const QString &type, Akonadi2::Query query); QStringList resourceIds(); QStringList resourceCompleter(const QStringList &, const QString &fragment, State &state); +QStringList resourceOrTypeCompleter(const QStringList &commands, const QString &fragment, State &state); +QStringList typeCompleter(const QStringList &commands, const QString &fragment, State &state); QMap keyValueMapFromArgs(const QStringList &args); /** diff --git a/akonadish/syntax_modules/akonadi_count.cpp b/akonadish/syntax_modules/akonadi_count.cpp index fa3f1fb..5acdcdd 100644 --- a/akonadish/syntax_modules/akonadi_count.cpp +++ b/akonadish/syntax_modules/akonadi_count.cpp @@ -75,7 +75,7 @@ bool count(const QStringList &args, State &state) Syntax::List syntax() { Syntax count("count", QObject::tr("Returns the number of items of a given type in a resource. Usage: count "), &AkonadiCount::count, Syntax::EventDriven); - count.completer = &AkonadishUtils::resourceCompleter; + count.completer = &AkonadishUtils::typeCompleter; return Syntax::List() << count; } diff --git a/akonadish/syntax_modules/akonadi_list.cpp b/akonadish/syntax_modules/akonadi_list.cpp index 18f15e7..82f13b5 100644 --- a/akonadish/syntax_modules/akonadi_list.cpp +++ b/akonadish/syntax_modules/akonadi_list.cpp @@ -106,10 +106,9 @@ bool list(const QStringList &args, State &state) Syntax::List syntax() { - Syntax::List syntax; - syntax << Syntax("list", QObject::tr("List all resources, or the contents of one or more resources"), &AkonadiList::list, Syntax::EventDriven); - - return syntax; + Syntax list("list", QObject::tr("List all resources, or the contents of one or more resources"), &AkonadiList::list, Syntax::EventDriven); + list.completer = &AkonadishUtils::resourceOrTypeCompleter; + return Syntax::List() << list; } REGISTER_SYNTAX(AkonadiList) diff --git a/akonadish/syntax_modules/akonadi_modify.cpp b/akonadish/syntax_modules/akonadi_modify.cpp index 8ab873a..76a7f5e 100644 --- a/akonadish/syntax_modules/akonadi_modify.cpp +++ b/akonadish/syntax_modules/akonadi_modify.cpp @@ -109,7 +109,7 @@ Syntax::List syntax() { Syntax modify("modify", QObject::tr("Modify items in a resource"), &AkonadiModify::modify); Syntax resource("resource", QObject::tr("Modify a resource"), &AkonadiModify::resource);//, Syntax::EventDriven); - resource.completer = &AkonadishUtils::resourceCompleter; + resource.completer = &AkonadishUtils::resourceOrTypeCompleter; modify.children << resource; return Syntax::List() << modify; -- cgit v1.2.3