Branch 'feature/remoterelationsyc' - resources/kolab

Aaron Seigo seigo at kolabsys.com
Tue Nov 11 12:33:57 CET 2014


 resources/kolab/kolabresource.cpp              |    9 ++++++++-
 resources/kolab/kolabresource.h                |    1 +
 resources/kolab/kolabretrievetagstask.cpp      |   13 ++++++-------
 resources/kolab/kolabretrievetagstask.h        |    8 +++++++-
 resources/kolab/tests/testretrievetagstask.cpp |    2 +-
 5 files changed, 23 insertions(+), 10 deletions(-)

New commits:
commit a5d3abff423c66b3a705592741779d6b0e910a06
Author: Aaron Seigo <aseigo at kde.org>
Date:   Tue Nov 11 12:32:42 2014 +0100

    split retrieval of tags and relations

diff --git a/resources/kolab/kolabresource.cpp b/resources/kolab/kolabresource.cpp
index 7c7576e..704d998 100644
--- a/resources/kolab/kolabresource.cpp
+++ b/resources/kolab/kolabresource.cpp
@@ -98,6 +98,7 @@ void KolabResource::retrieveCollections()
 
     startTask(new KolabRetrieveCollectionsTask(createResourceState(TaskArguments()), this));
     synchronizeTags();
+    synchronizeRelations();
 }
 
 void KolabResource::itemAdded(const Akonadi::Item& item, const Akonadi::Collection& collection)
@@ -197,7 +198,13 @@ void KolabResource::itemsTagsChanged(const Akonadi::Item::List &items, const QSe
 
 void KolabResource::retrieveTags()
 {
-    KolabRetrieveTagTask *task = new KolabRetrieveTagTask(createResourceState(TaskArguments()), this);
+    KolabRetrieveTagTask *task = new KolabRetrieveTagTask(createResourceState(TaskArguments()), KolabRetrieveTagTask::RetrieveTags, this);
+    startTask(task);
+}
+
+void KolabResource::retrieveRelations()
+{
+    KolabRetrieveTagTask *task = new KolabRetrieveTagTask(createResourceState(TaskArguments()), KolabRetrieveTagTask::RetrieveRelations, this);
     startTask(task);
 }
 
diff --git a/resources/kolab/kolabresource.h b/resources/kolab/kolabresource.h
index 44fb725..72fea8f 100644
--- a/resources/kolab/kolabresource.h
+++ b/resources/kolab/kolabresource.h
@@ -66,6 +66,7 @@ protected:
 
 private Q_SLOTS:
     void retrieveTags();
+    void retrieveRelations();
 };
 
 #endif
diff --git a/resources/kolab/kolabretrievetagstask.cpp b/resources/kolab/kolabretrievetagstask.cpp
index 43e540d..1783867 100644
--- a/resources/kolab/kolabretrievetagstask.cpp
+++ b/resources/kolab/kolabretrievetagstask.cpp
@@ -25,9 +25,10 @@
 #include <kimap/fetchjob.h>
 #include <kolabobject.h>
 
-KolabRetrieveTagTask::KolabRetrieveTagTask(ResourceStateInterface::Ptr resource, QObject *parent)
+KolabRetrieveTagTask::KolabRetrieveTagTask(ResourceStateInterface::Ptr resource, RetrieveType type, QObject *parent)
     : KolabRelationResourceTask(resource, parent)
     , mSession(0)
+    , mRetrieveType(type)
 {
 }
 
@@ -102,9 +103,9 @@ void KolabRetrieveTagTask::onHeadersReceived(const QString &mailBox,
         const Kolab::KolabObjectReader reader(msg);
         switch (reader.getType()) {
             case Kolab::RelationConfigurationObject:
-                if (reader.isTag()) {
+                if (mRetrieveType == RetrieveTags && reader.isTag()) {
                     extractTag(reader, uids[number]);
-                } else if (reader.isRelation()) {
+                } else if (mRetrieveType == RetrieveRelations && reader.isRelation()) {
                     extractRelation(reader, uids[number]);
                 }
                 break;
@@ -174,12 +175,10 @@ void KolabRetrieveTagTask::onHeadersFetchDone(KJob *job)
         return;
     }
 
-    if (!mTags.isEmpty() || !mTagMembers.isEmpty()) {
+    if (mRetrieveType == RetrieveTags) {
         kDebug() << "Fetched tags: " << mTags.size() << mTagMembers.keys().size();
         resourceState()->tagsRetrieved(mTags, mTagMembers);
-    }
-
-    if (!mRelations.isEmpty()) {
+    } else if (mRetrieveType == RetrieveRelations) {
         kDebug() << "Fetched relations:" << mRelations.size();
         resourceState()->relationsRetrieved(mRelations);
     }
diff --git a/resources/kolab/kolabretrievetagstask.h b/resources/kolab/kolabretrievetagstask.h
index 0dab163..8ea371f 100644
--- a/resources/kolab/kolabretrievetagstask.h
+++ b/resources/kolab/kolabretrievetagstask.h
@@ -32,7 +32,12 @@ class KolabRetrieveTagTask : public KolabRelationResourceTask
 {
     Q_OBJECT
 public:
-    explicit KolabRetrieveTagTask(ResourceStateInterface::Ptr resource, QObject *parent = 0);
+    enum RetrieveType {
+        RetrieveTags,
+        RetrieveRelations
+    };
+
+    explicit KolabRetrieveTagTask(ResourceStateInterface::Ptr resource, RetrieveType type, QObject *parent = 0);
 
 protected:
     virtual void startRelationTask(KIMAP::Session *session);
@@ -42,6 +47,7 @@ private:
     Akonadi::Tag::List mTags;
     QHash<QString, Akonadi::Item::List> mTagMembers;
     Akonadi::Relation::List mRelations;
+    RetrieveType mRetrieveType;
 
 private Q_SLOTS:
     // void onItemsFetchDone(KJob *job);
diff --git a/resources/kolab/tests/testretrievetagstask.cpp b/resources/kolab/tests/testretrievetagstask.cpp
index 6ae2609..767c737 100644
--- a/resources/kolab/tests/testretrievetagstask.cpp
+++ b/resources/kolab/tests/testretrievetagstask.cpp
@@ -133,7 +133,7 @@ private slots:
         DummyResourceState::Ptr state = DummyResourceState::Ptr(new DummyResourceState);
         state->setServerCapabilities(QStringList() << "METADATA" << "ACL");
         state->setUserName("Hans");
-        KolabRetrieveTagTask *task = new KolabRetrieveTagTask(state);
+        KolabRetrieveTagTask *task = new KolabRetrieveTagTask(state, KolabRetrieveTagTask::RetrieveTags);
 
         task->start(&pool);
 




More information about the commits mailing list