summaryrefslogtreecommitdiff
path: root/nonprism/kdepim-runtime/kdepim-runtime-bug338658.patch
diff options
context:
space:
mode:
authorAndré Fabian Silva Delgado <emulatorman@parabola.nu>2015-09-21 00:28:27 -0300
committerAndré Fabian Silva Delgado <emulatorman@parabola.nu>2015-09-22 16:15:07 -0300
commitbd260b323efbd97284a7569e942d55896bfa1cd5 (patch)
treedd77682680e4570b79b16c6dcbeaa1e5403cbf08 /nonprism/kdepim-runtime/kdepim-runtime-bug338658.patch
parentcf68aac272d30afe11d2f1294d2563a7e5935d97 (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.patch181
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
+