diff options
-rw-r--r-- | nonprism/kdepim-runtime/PKGBUILD | 15 | ||||
-rw-r--r-- | nonprism/kdepim-runtime/kdepim-runtime-bug338658.patch | 181 |
2 files changed, 191 insertions, 5 deletions
diff --git a/nonprism/kdepim-runtime/PKGBUILD b/nonprism/kdepim-runtime/PKGBUILD index 920cf85f6..8fe807116 100644 --- a/nonprism/kdepim-runtime/PKGBUILD +++ b/nonprism/kdepim-runtime/PKGBUILD @@ -1,12 +1,12 @@ -# $Id: PKGBUILD 244411 2015-08-20 09:51:07Z arojas $ +# $Id: PKGBUILD 246374 2015-09-15 20:13:05Z arojas $ # Maintainer (Arch): Felix Yan <felixonmars@archlinux.org> # Contributor (Arch): Andrea Scarpino <andrea@archlinux.org> # Contributor (Arch): Pierre Schmitz <pierre@archlinux.de> # Maintainer: André Silva <emulatorman@parabola.nu> pkgname=kdepim-runtime -pkgver=15.08.0 -pkgrel=1.nonprism1 +pkgver=15.08.1 +pkgrel=2.nonprism1 pkgdesc='Extends the functionality of kdepim, without libkgapi support' arch=('i686' 'x86_64') url='https://projects.kde.org/projects/kde/kdepim-runtime' @@ -15,11 +15,16 @@ depends=(hicolor-icon-theme qt5-quick1 libkolab akonadi-socialutils akonadi-cale knotifyconfig kross kalarmcal kmbox kimap kde-syndication) makedepends=(extra-cmake-modules kdoctools boost) install=$pkgname.install -source=("http://download.kde.org/stable/applications/$pkgver/src/$pkgname-$pkgver.tar.xz") -sha1sums=('fcc9549bdacc25cb464a18efefcbacf7494dfd34') +source=("http://download.kde.org/stable/applications/$pkgver/src/$pkgname-$pkgver.tar.xz" kdepim-runtime-bug338658.patch) +sha1sums=('fcab275175a82152ee2345a8657e0ab238f7033a' + '4d0bcdb3887f1146d289471d7e2494e2a76bb8bd') prepare() { mkdir -p build + +# Fix https://bugs.kde.org/show_bug.cgi?id=338658 + cd $pkgname-$pkgver + patch -p1 -i ../kdepim-runtime-bug338658.patch } build() { 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 + |