diff options
author | André Fabian Silva Delgado <emulatorman@parabola.nu> | 2015-09-21 00:28:27 -0300 |
---|---|---|
committer | André Fabian Silva Delgado <emulatorman@parabola.nu> | 2015-09-22 16:15:07 -0300 |
commit | bd260b323efbd97284a7569e942d55896bfa1cd5 (patch) | |
tree | dd77682680e4570b79b16c6dcbeaa1e5403cbf08 /nonprism/kdepim-runtime/kdepim-runtime-bug338658.patch | |
parent | cf68aac272d30afe11d2f1294d2563a7e5935d97 (diff) |
kdepim-runtime-15.08.1-2.nonprism1: updating version
Diffstat (limited to 'nonprism/kdepim-runtime/kdepim-runtime-bug338658.patch')
-rw-r--r-- | nonprism/kdepim-runtime/kdepim-runtime-bug338658.patch | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/nonprism/kdepim-runtime/kdepim-runtime-bug338658.patch b/nonprism/kdepim-runtime/kdepim-runtime-bug338658.patch new file mode 100644 index 000000000..c87880fc3 --- /dev/null +++ b/nonprism/kdepim-runtime/kdepim-runtime-bug338658.patch @@ -0,0 +1,181 @@ +From 038c604aba0cac22275e03c3497672cd254c2568 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Dan=20Vr=C3=A1til?= <dvratil@redhat.com> +Date: Mon, 7 Sep 2015 16:20:39 +0200 +Subject: [PATCH] IMAP: switch to GID-based merge when the Collection can + contain something else than emails + +In order to fix the recurrent multiple-merge-candidates issue which was breaking +ItemSync, ItemSync switched to RID-based merging, which is way more reliable. +However in some cases the IMAP resource still wants to use GID-based merging, +because RID might not be stable enough. + +(cherry picked from commit 93a2baac05a325b688aea2cc12d9714d6b186f69) +--- + CMakeLists.txt | 2 +- + resources/imap/autotests/dummyresourcestate.cpp | 8 +++++++- + resources/imap/autotests/dummyresourcestate.h | 3 +++ + resources/imap/resourcestate.cpp | 5 +++++ + resources/imap/resourcestate.h | 2 ++ + resources/imap/resourcestateinterface.h | 3 +++ + resources/imap/resourcetask.cpp | 5 +++++ + resources/imap/resourcetask.h | 1 + + resources/imap/retrieveitemstask.cpp | 10 ++++++++++ + 9 files changed, 37 insertions(+), 2 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 0511f78..17a39b0 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -54,7 +54,7 @@ include(ECMInstallIcons) + set(KF5_VERSION "5.12.0") + set(QT_REQUIRED_VERSION "5.4.0") + +-set(KDEPIMLIBS_LIB_VERSION "4.88.0") ++set(KDEPIMLIBS_LIB_VERSION "4.89.0") + + set(KDEPIMRUNTIME_LIB_VERSION "${KDEPIM_RUNTIME_VERSION_NUMBER}") + set(KDEPIMRUNTIME_LIB_SOVERSION "5") +diff --git a/resources/imap/autotests/dummyresourcestate.cpp b/resources/imap/autotests/dummyresourcestate.cpp +index 8b28f0b..9497f8e 100644 +--- a/resources/imap/autotests/dummyresourcestate.cpp ++++ b/resources/imap/autotests/dummyresourcestate.cpp +@@ -27,7 +27,8 @@ Q_DECLARE_METATYPE(TagListAndMembers); + + DummyResourceState::DummyResourceState() + : m_automaticExpunge(true), m_subscriptionEnabled(true), +- m_disconnectedMode(true), m_intervalCheckTime(-1) ++ m_disconnectedMode(true), m_intervalCheckTime(-1), ++ m_mergeMode(Akonadi::ItemSync::RIDMerge) + { + qRegisterMetaType<QList<qint64> >(); + qRegisterMetaType<QVector<qint64> >(); +@@ -428,6 +429,11 @@ int DummyResourceState::batchSize() const + return 10; + } + ++void DummyResourceState::setItemMergingMode(Akonadi::ItemSync::MergeMode mergeMode) ++{ ++ m_mergeMode = mergeMode; ++} ++ + MessageHelper::Ptr DummyResourceState::messageHelper() const + { + return MessageHelper::Ptr(new MessageHelper()); +diff --git a/resources/imap/autotests/dummyresourcestate.h b/resources/imap/autotests/dummyresourcestate.h +index 39cb055..339501f 100644 +--- a/resources/imap/autotests/dummyresourcestate.h ++++ b/resources/imap/autotests/dummyresourcestate.h +@@ -143,6 +143,7 @@ public: + virtual void showInformationDialog(const QString &message, const QString &title, const QString &dontShowAgainName); + + virtual int batchSize() const; ++ virtual void setItemMergingMode(Akonadi::ItemSync::MergeMode mergeMode); + + virtual MessageHelper::Ptr messageHelper() const; + +@@ -163,6 +164,8 @@ private: + int m_intervalCheckTime; + QChar m_separator; + ++ Akonadi::ItemSync::MergeMode m_mergeMode; ++ + Akonadi::Collection m_collection; + Akonadi::Item::List m_items; + +diff --git a/resources/imap/resourcestate.cpp b/resources/imap/resourcestate.cpp +index 9bf802a..690e562 100644 +--- a/resources/imap/resourcestate.cpp ++++ b/resources/imap/resourcestate.cpp +@@ -362,3 +362,8 @@ void ResourceState::relationsRetrieved(const Akonadi::Relation::List &relations) + { + m_resource->relationsRetrieved(relations); + } ++ ++void ResourceState::setItemMergingMode(Akonadi::ItemSync::MergeMode mode) ++{ ++ m_resource->setItemMergingMode(mode); ++} +\ No newline at end of file +diff --git a/resources/imap/resourcestate.h b/resources/imap/resourcestate.h +index 6471419..79ece01 100644 +--- a/resources/imap/resourcestate.h ++++ b/resources/imap/resourcestate.h +@@ -153,6 +153,8 @@ public: + + MessageHelper::Ptr messageHelper() const Q_DECL_OVERRIDE; + ++ void setItemMergingMode(Akonadi::ItemSync::MergeMode mergeMode); ++ + private: + ImapResourceBase *m_resource; + const TaskArguments m_arguments; +diff --git a/resources/imap/resourcestateinterface.h b/resources/imap/resourcestateinterface.h +index eb34a25..35647be 100644 +--- a/resources/imap/resourcestateinterface.h ++++ b/resources/imap/resourcestateinterface.h +@@ -26,6 +26,7 @@ + + #include <Collection> + #include <Item> ++#include <ItemSync> + + #include <kimap/listjob.h> + +@@ -125,6 +126,8 @@ public: + + virtual Akonadi::Relation::List addedRelations() const = 0; + virtual Akonadi::Relation::List removedRelations() const = 0; ++ ++ virtual void setItemMergingMode(Akonadi::ItemSync::MergeMode mergeMode) = 0; + }; + + #endif +diff --git a/resources/imap/resourcetask.cpp b/resources/imap/resourcetask.cpp +index 59532cd..e9c640c 100644 +--- a/resources/imap/resourcetask.cpp ++++ b/resources/imap/resourcetask.cpp +@@ -591,3 +591,8 @@ KIMAP::Acl::Rights ResourceTask::myRights(const Akonadi::Collection &col) + } + return KIMAP::Acl::None; + } ++ ++void ResourceTask::setItemMergingMode(Akonadi::ItemSync::MergeMode mode) ++{ ++ m_resource->setItemMergingMode(mode); ++} +diff --git a/resources/imap/resourcetask.h b/resources/imap/resourcetask.h +index 74aa518..d034c9d 100644 +--- a/resources/imap/resourcetask.h ++++ b/resources/imap/resourcetask.h +@@ -140,6 +140,7 @@ protected: + virtual bool serverSupportsCondstore() const; + + int batchSize() const; ++ void setItemMergingMode(Akonadi::ItemSync::MergeMode mode); + + ResourceStateInterface::Ptr resourceState(); + +diff --git a/resources/imap/retrieveitemstask.cpp b/resources/imap/retrieveitemstask.cpp +index a60c6ba..91b287c 100644 +--- a/resources/imap/retrieveitemstask.cpp ++++ b/resources/imap/retrieveitemstask.cpp +@@ -89,6 +89,16 @@ void RetrieveItemsTask::doStart(KIMAP::Session *session) + m_session = session; + + const Akonadi::Collection col = collection(); ++ // Only with emails we can be sure that RID is persistent and thus we can use ++ // it for merging. For other potential content types (like Kolab events etc.) ++ // use GID instead. ++ QStringList cts = col.contentMimeTypes(); ++ cts.removeOne(Akonadi::Collection::mimeType()); ++ cts.removeOne(KMime::Message::mimeType()); ++ if (!cts.isEmpty()) { ++ setItemMergingMode(Akonadi::ItemSync::GIDMerge); ++ } ++ + if (m_fetchMissingBodies && col.cachePolicy() + .localParts().contains(QLatin1String(Akonadi::MessagePart::Body))) { //disconnected mode, make sure we really have the body cached + +-- +2.4.6 + |