Branch 'kolab/integration/4.13.0' - 3 commits - resources/kolab
Christian Mollekopf
mollekopf at kolabsys.com
Wed Jan 7 10:02:13 CET 2015
resources/kolab/kolabchangeitemstagstask.cpp | 11 +++-
resources/kolab/kolabchangetagtask.cpp | 9 ++-
resources/kolab/kolabrelationresourcetask.cpp | 64 +++++++++++++++++++++++++-
resources/kolab/kolabrelationresourcetask.h | 3 +
4 files changed, 80 insertions(+), 7 deletions(-)
New commits:
commit b832a1eae51f585982895ce10562cb2533fa3bf9
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Wed Jan 7 10:02:05 2015 +0100
Fetch also on changeitem only from cache.
diff --git a/resources/kolab/kolabchangeitemstagstask.cpp b/resources/kolab/kolabchangeitemstagstask.cpp
index 00c88e9..21269fe 100644
--- a/resources/kolab/kolabchangeitemstagstask.cpp
+++ b/resources/kolab/kolabchangeitemstagstask.cpp
@@ -86,7 +86,7 @@ void KolabChangeItemsTagsTask::onTagFetchDone(KJob *job)
}
Akonadi::ItemFetchJob *fetch = new Akonadi::ItemFetchJob(tags.first());
- // fetch->fetchScope().setCacheOnly(true);
+ fetch->fetchScope().setCacheOnly(true);
fetch->fetchScope().setAncestorRetrieval(Akonadi::ItemFetchScope::All);
fetch->fetchScope().setFetchGid(true);
fetch->fetchScope().fetchFullPayload(true);
commit c9761baf173a01ce4a1f8e6cfccc7d7b4b45690c
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Tue Jan 6 19:41:22 2015 +0100
Filter tag items by resource.
diff --git a/resources/kolab/kolabchangeitemstagstask.cpp b/resources/kolab/kolabchangeitemstagstask.cpp
index ae55c7c..00c88e9 100644
--- a/resources/kolab/kolabchangeitemstagstask.cpp
+++ b/resources/kolab/kolabchangeitemstagstask.cpp
@@ -87,7 +87,6 @@ void KolabChangeItemsTagsTask::onTagFetchDone(KJob *job)
Akonadi::ItemFetchJob *fetch = new Akonadi::ItemFetchJob(tags.first());
// fetch->fetchScope().setCacheOnly(true);
- // TODO: does the fetch already limit to resource local items?
fetch->fetchScope().setAncestorRetrieval(Akonadi::ItemFetchScope::All);
fetch->fetchScope().setFetchGid(true);
fetch->fetchScope().fetchFullPayload(true);
@@ -104,7 +103,13 @@ void KolabChangeItemsTagsTask::onItemsFetchDone(KJob *job)
return;
}
- const Akonadi::Item::List items = static_cast<Akonadi::ItemFetchJob*>(job)->items();
+ Akonadi::Item::List items;
+ //Filter by resource as all other references make no sense
+ Q_FOREACH (const Akonadi::Item &i, static_cast<Akonadi::ItemFetchJob*>(job)->items()) {
+ if (i.parentCollection().resource() == resourceState()->resourceIdentifier()) {
+ items << i;
+ }
+ }
kDebug() << items.size();
TagChangeHelper *changeHelper = new TagChangeHelper(this);
diff --git a/resources/kolab/kolabchangetagtask.cpp b/resources/kolab/kolabchangetagtask.cpp
index 71bd221..e6b31ad 100644
--- a/resources/kolab/kolabchangetagtask.cpp
+++ b/resources/kolab/kolabchangetagtask.cpp
@@ -39,7 +39,6 @@ void KolabChangeTagTask::startRelationTask(KIMAP::Session *session)
Akonadi::ItemFetchJob *fetch = new Akonadi::ItemFetchJob(resourceState()->tag());
fetch->fetchScope().setCacheOnly(true);
- // TODO: does the fetch already limit to resource local items?
fetch->fetchScope().setAncestorRetrieval(Akonadi::ItemFetchScope::All);
fetch->fetchScope().fetchFullPayload(true);
connect(fetch, SIGNAL(result(KJob*)), this, SLOT(onItemsFetchDone(KJob*)));
@@ -53,7 +52,13 @@ void KolabChangeTagTask::onItemsFetchDone(KJob *job)
return;
}
- const Akonadi::Item::List items = static_cast<Akonadi::ItemFetchJob*>(job)->items();
+ Akonadi::Item::List items;
+ //Filter by resource as all other references make no sense
+ Q_FOREACH (const Akonadi::Item &i, static_cast<Akonadi::ItemFetchJob*>(job)->items()) {
+ if (i.parentCollection().resource() == resourceState()->resourceIdentifier()) {
+ items << i;
+ }
+ }
TagChangeHelper *changeHelper = new TagChangeHelper(this);
commit bcf41a922a5dca5cda8807a1d67ef96c03893186
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Tue Jan 6 18:37:48 2015 +0100
Create configuration folder if missing.
diff --git a/resources/kolab/kolabrelationresourcetask.cpp b/resources/kolab/kolabrelationresourcetask.cpp
index 3485bf4..95dc03d 100644
--- a/resources/kolab/kolabrelationresourcetask.cpp
+++ b/resources/kolab/kolabrelationresourcetask.cpp
@@ -25,6 +25,9 @@
#include <akonadi/collectionfetchjob.h>
#include <akonadi/collectionfetchscope.h>
+#include <akonadi/collectioncreatejob.h>
+#include <kimap/createjob.h>
+#include <kimap/setmetadatajob.h>
#include <KDE/KLocalizedString>
@@ -73,6 +76,63 @@ void KolabRelationResourceTask::onCollectionFetchResult(KJob *job)
}
}
- kDebug() << "Couldn't find collection for relations";
- cancelTask(i18n("No mailbox for storing relations available, cancelling tag operation."));
+ kDebug() << "Couldn't find collection for relations, creating one.";
+
+ const QChar separator = separatorCharacter();
+ mRelationCollection = Akonadi::Collection();
+ mRelationCollection.setName("Configuration");
+ mRelationCollection.setContentMimeTypes(QStringList() << KolabHelpers::getMimeType(Kolab::ConfigurationType));
+ mRelationCollection.setRemoteId(separator + mRelationCollection.name());
+ const QString newMailBox = "Configuration";
+ KIMAP::CreateJob *imapCreateJob = new KIMAP::CreateJob(mImapSession);
+ imapCreateJob->setMailBox(newMailBox);
+ connect(imapCreateJob, SIGNAL(result(KJob*)),
+ this, SLOT(onCreateDone(KJob*)));
+ imapCreateJob->start();
}
+
+void KolabRelationResourceTask::onCreateDone(KJob *job)
+{
+ if (job->error()) {
+ kWarning() << "Failed to create configuration folder: " << job->errorString();
+ cancelTask(i18n("Failed to create configuration folder on server"));
+ return;
+ }
+
+ KIMAP::SetMetaDataJob *setMetadataJob = new KIMAP::SetMetaDataJob(mImapSession);
+ if (serverCapabilities().contains(QLatin1String("METADATA"))) {
+ setMetadataJob->setServerCapability(KIMAP::MetaDataJobBase::Metadata);
+ } else {
+ setMetadataJob->setServerCapability(KIMAP::MetaDataJobBase::Annotatemore);
+ }
+ setMetadataJob->setMailBox("Configuration");
+ setMetadataJob->addMetaData("/shared/vendor/kolab/folder-type", "configuration.default");
+ connect(setMetadataJob, SIGNAL(result(KJob*)),
+ this, SLOT(onSetMetaDataDone(KJob*)));
+ setMetadataJob->start();
+}
+
+void KolabRelationResourceTask::onSetMetaDataDone(KJob *job)
+{
+ if (job->error()) {
+ kWarning() << "Failed to write annotations: " << job->errorString();
+ cancelTask(i18n("Failed to write some annotations for '%1' on the IMAP server. %2",
+ collection().name(), job->errorText()));
+ return;
+ }
+
+ Akonadi::CollectionCreateJob *createJob = new Akonadi::CollectionCreateJob(mRelationCollection, this);
+ connect(createJob, SIGNAL(result(KJob*)), this, SLOT(onLocalCreateDone(KJob*)));
+}
+
+void KolabRelationResourceTask::onLocalCreateDone(KJob *job)
+{
+ if (job->error()) {
+ kWarning() << "Failed to create local folder: " << job->errorString();
+ cancelTask(i18n("Failed to create configuration folder"));
+ return;
+ }
+ mRelationCollection = static_cast<Akonadi::CollectionCreateJob*>(job)->collection();
+ startRelationTask(mImapSession);
+}
+
diff --git a/resources/kolab/kolabrelationresourcetask.h b/resources/kolab/kolabrelationresourcetask.h
index 51707da..f947aad 100644
--- a/resources/kolab/kolabrelationresourcetask.h
+++ b/resources/kolab/kolabrelationresourcetask.h
@@ -48,6 +48,9 @@ private:
private Q_SLOTS:
void onCollectionFetchResult(KJob *job);
+ void onCreateDone(KJob *job);
+ void onSetMetaDataDone(KJob *job);
+ void onLocalCreateDone(KJob *job);
};
#endif // KOLABRELATIONRESOURCETASK_H
More information about the commits
mailing list