commit: b96e97c4cde08b064870110cb7b4edc314b05144 Author: Andreas Sturmlechner <andreas.sturmlechner <AT> gmail <DOT> com> AuthorDate: Sun Sep 13 14:45:03 2015 +0000 Commit: Michael Palimaka <kensington <AT> gentoo <DOT> org> CommitDate: Sun Sep 13 20:22:16 2015 +0000 URL: https://gitweb.gentoo.org/proj/kde.git/commit/?id=b96e97c4
kde-apps/kdepim-runtime: Backport GID merge fix for IMAP Upstream fix is in >=15.08.2 See also: https://bugs.kde.org/show_bug.cgi?id=338658#c39 Package-Manager: portage-2.2.20.1 .../kdepim-runtime-15.08.0-GID-based-merge.patch | 140 +++++++++++++++++++++ ...8.0.ebuild => kdepim-runtime-15.08.0-r1.ebuild} | 4 +- .../kdepim-runtime/kdepim-runtime-15.08.1.ebuild | 2 + 3 files changed, 145 insertions(+), 1 deletion(-) diff --git a/kde-apps/kdepim-runtime/files/kdepim-runtime-15.08.0-GID-based-merge.patch b/kde-apps/kdepim-runtime/files/kdepim-runtime-15.08.0-GID-based-merge.patch new file mode 100644 index 0000000..61aeaa0 --- /dev/null +++ b/kde-apps/kdepim-runtime/files/kdepim-runtime-15.08.0-GID-based-merge.patch @@ -0,0 +1,140 @@ +From: Dan Vrátil <dvra...@redhat.com> +Date: Mon, 07 Sep 2015 14:20:39 +0000 +Subject: IMAP: switch to GID-based merge when the Collection can contain something else than emails +X-Git-Url: http://quickgit.kde.org/?p=kdepim-runtime.git&a=commitdiff&h=038c604aba0cac22275e03c3497672cd254c2568 +--- +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) +--- + + +--- a/resources/imap/autotests/dummyresourcestate.cpp ++++ b/resources/imap/autotests/dummyresourcestate.cpp +@@ -27,7 +27,8 @@ + + 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 @@ + return 10; + } + ++void DummyResourceState::setItemMergingMode(Akonadi::ItemSync::MergeMode mergeMode) ++{ ++ m_mergeMode = mergeMode; ++} ++ + MessageHelper::Ptr DummyResourceState::messageHelper() const + { + return MessageHelper::Ptr(new MessageHelper()); +--- a/resources/imap/autotests/dummyresourcestate.h ++++ b/resources/imap/autotests/dummyresourcestate.h +@@ -143,6 +143,7 @@ + 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 @@ + int m_intervalCheckTime; + QChar m_separator; + ++ Akonadi::ItemSync::MergeMode m_mergeMode; ++ + Akonadi::Collection m_collection; + Akonadi::Item::List m_items; + +--- a/resources/imap/resourcestate.cpp ++++ b/resources/imap/resourcestate.cpp +@@ -363,2 +363,7 @@ + m_resource->relationsRetrieved(relations); + } ++ ++void ResourceState::setItemMergingMode(Akonadi::ItemSync::MergeMode mode) ++{ ++ m_resource->setItemMergingMode(mode); ++} +--- a/resources/imap/resourcestate.h ++++ b/resources/imap/resourcestate.h +@@ -153,6 +153,8 @@ + + MessageHelper::Ptr messageHelper() const Q_DECL_OVERRIDE; + ++ void setItemMergingMode(Akonadi::ItemSync::MergeMode mergeMode); ++ + private: + ImapResourceBase *m_resource; + const TaskArguments m_arguments; +--- 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 @@ + + virtual Akonadi::Relation::List addedRelations() const = 0; + virtual Akonadi::Relation::List removedRelations() const = 0; ++ ++ virtual void setItemMergingMode(Akonadi::ItemSync::MergeMode mergeMode) = 0; + }; + + #endif +--- a/resources/imap/resourcetask.cpp ++++ b/resources/imap/resourcetask.cpp +@@ -592,2 +592,8 @@ + return KIMAP::Acl::None; + } ++ ++void ResourceTask::setItemMergingMode(Akonadi::ItemSync::MergeMode mode) ++{ ++ m_resource->setItemMergingMode(mode); ++} ++ +--- a/resources/imap/resourcetask.h ++++ b/resources/imap/resourcetask.h +@@ -140,6 +140,7 @@ + virtual bool serverSupportsCondstore() const; + + int batchSize() const; ++ void setItemMergingMode(Akonadi::ItemSync::MergeMode mode); + + ResourceStateInterface::Ptr resourceState(); + +--- a/resources/imap/retrieveitemstask.cpp ++++ b/resources/imap/retrieveitemstask.cpp +@@ -89,6 +89,16 @@ + 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 + + diff --git a/kde-apps/kdepim-runtime/kdepim-runtime-15.08.0.ebuild b/kde-apps/kdepim-runtime/kdepim-runtime-15.08.0-r1.ebuild similarity index 94% rename from kde-apps/kdepim-runtime/kdepim-runtime-15.08.0.ebuild rename to kde-apps/kdepim-runtime/kdepim-runtime-15.08.0-r1.ebuild index 5298b4c..e11cca0 100644 --- a/kde-apps/kdepim-runtime/kdepim-runtime-15.08.0.ebuild +++ b/kde-apps/kdepim-runtime/kdepim-runtime-15.08.0-r1.ebuild @@ -19,7 +19,7 @@ CDEPEND=" $(add_kdeapps_dep kcalcore) $(add_kdeapps_dep kcalutils) $(add_kdeapps_dep kcontacts) - $(add_kdeapps_dep kdepimlibs) + $(add_kdeapps_dep kdepimlibs '' 15.08.0-r1) $(add_kdeapps_dep kidentitymanagement) $(add_kdeapps_dep kimap) $(add_kdeapps_dep kmailtransport) @@ -68,6 +68,8 @@ RDEPEND="${CDEPEND} !kde-base/kdepim-runtime " +PATCHES=( "${FILESDIR}/${PN}-15.08.0-GID-based-merge.patch" ) + src_configure() { local mycmakeargs=( $(cmake-utils_use_find_package google KF5GAPI) diff --git a/kde-apps/kdepim-runtime/kdepim-runtime-15.08.1.ebuild b/kde-apps/kdepim-runtime/kdepim-runtime-15.08.1.ebuild index 5298b4c..0e204f9 100644 --- a/kde-apps/kdepim-runtime/kdepim-runtime-15.08.1.ebuild +++ b/kde-apps/kdepim-runtime/kdepim-runtime-15.08.1.ebuild @@ -68,6 +68,8 @@ RDEPEND="${CDEPEND} !kde-base/kdepim-runtime " +PATCHES=( "${FILESDIR}/${PN}-15.08.0-GID-based-merge.patch" ) + src_configure() { local mycmakeargs=( $(cmake-utils_use_find_package google KF5GAPI)