From 4999ec5da028e3b11d9c7b7bc0fe25acdf0a8ddd Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Mon, 9 May 2016 22:17:28 +0200 Subject: Resource factory methods and capability filter. --- common/domain/applicationdomaintype.cpp | 22 ++++++++++++++++++++++ common/domain/applicationdomaintype.h | 7 +++++++ common/query.cpp | 4 ++++ common/query.h | 14 +++++++++++--- common/test.cpp | 1 + 5 files changed, 45 insertions(+), 3 deletions(-) (limited to 'common') diff --git a/common/domain/applicationdomaintype.cpp b/common/domain/applicationdomaintype.cpp index 27f94ce..166d3e6 100644 --- a/common/domain/applicationdomaintype.cpp +++ b/common/domain/applicationdomaintype.cpp @@ -239,6 +239,28 @@ Identity::~Identity() } +namespace MaildirResource { + SinkResource create(const QByteArray &account) + { + auto &&resource = ApplicationDomainType::createEntity(); + resource.setProperty("type", "org.kde.maildir"); + resource.setProperty("account", account); + resource.setProperty("capabilities", QVariant::fromValue(QByteArrayList() << "storage" << "drafts")); + return resource; + } +} + +namespace MailtransportResource { + SinkResource create(const QByteArray &account) + { + auto &&resource = ApplicationDomainType::createEntity(); + resource.setProperty("type", "org.kde.mailtransport"); + resource.setProperty("account", account); + resource.setProperty("capabilities", QVariant::fromValue(QByteArrayList() << "transport")); + return resource; + } +} + template<> QByteArray getTypeName() { diff --git a/common/domain/applicationdomaintype.h b/common/domain/applicationdomaintype.h index 1486f00..eadad00 100644 --- a/common/domain/applicationdomaintype.h +++ b/common/domain/applicationdomaintype.h @@ -187,6 +187,13 @@ struct SINK_EXPORT Identity : public ApplicationDomainType { virtual ~Identity(); }; +namespace MaildirResource { + SinkResource SINK_EXPORT create(const QByteArray &account); +}; +namespace MailtransportResource { + SinkResource SINK_EXPORT create(const QByteArray &account); +}; + /** * All types need to be registered here an MUST return a different name. * diff --git a/common/query.cpp b/common/query.cpp index eeacd69..5f93c82 100644 --- a/common/query.cpp +++ b/common/query.cpp @@ -42,6 +42,10 @@ Query::Comparator::Comparator(const QVariant &v) : value(v), comparator(Equals) { } +Query::Comparator::Comparator(const QVariant &v, Comparators c) : value(v), comparator(c) +{ +} + bool Query::Comparator::matches(const QVariant &v) const { switch(comparator) { diff --git a/common/query.h b/common/query.h index 5c0d5c9..8a420f9 100644 --- a/common/query.h +++ b/common/query.h @@ -35,7 +35,7 @@ class SINK_EXPORT Query public: enum Flag { - /** Leave the query running an contiously update the result set. */ + /** Leave the query running and continuously update the result set. */ LiveQuery }; Q_DECLARE_FLAGS(Flags, Flag) @@ -43,14 +43,14 @@ public: static Query PropertyFilter(const QByteArray &key, const QVariant &value) { Query query; - query.propertyFilter.insert(key, value); + query.propertyFilter.insert(key, Comparator(value)); return query; } static Query PropertyContainsFilter(const QByteArray &key, const QVariant &value) { Query query; - query.propertyFilter.insert(key, value); + query.propertyFilter.insert(key, Comparator(value, Comparator::Contains)); return query; } @@ -85,6 +85,13 @@ public: return query; } + static Query CapabilityFilter(const QByteArray &capability) + { + Query query; + query.propertyFilter.insert("capabilities", Comparator(capability, Comparator::Contains)); + return query; + } + static Query AccountFilter(const QByteArrayList &identifier) { Q_ASSERT(!identifier.isEmpty()); @@ -167,6 +174,7 @@ public: Comparator(); Comparator(const QVariant &v); + Comparator(const QVariant &v, Comparators c); bool matches(const QVariant &v) const; QVariant value; diff --git a/common/test.cpp b/common/test.cpp index c4dac89..1062e21 100644 --- a/common/test.cpp +++ b/common/test.cpp @@ -127,6 +127,7 @@ Test::TestAccount Sink::Test::TestAccount::registerAccount() ResourceConfig::addResource(account.identifier, "testresource"); QMap configuration; configuration.insert("account", account.identifier); + configuration.insert("capabilities", QVariant::fromValue(QByteArrayList() << "drafts" << "storage" << "transport")); ResourceConfig::configureResource(account.identifier, configuration); return account; } -- cgit v1.2.3