Branch 'kolab/integration/4.13.0' - 2 commits - resources/imap resources/kolab

Christian Mollekopf mollekopf at kolabsys.com
Fri Jan 9 17:04:10 CET 2015


 resources/imap/replacemessagejob.cpp      |   10 +++++-----
 resources/imap/replacemessagejob.h        |    5 +++--
 resources/kolab/kolabretrievetagstask.cpp |    4 ++++
 resources/kolab/tagchangehelper.cpp       |    1 +
 resources/kolab/updatemessagejob.cpp      |   11 +++++++----
 resources/kolab/updatemessagejob.h        |    1 +
 6 files changed, 21 insertions(+), 11 deletions(-)

New commits:
commit f3d81a3dd0caeb16dea3f32d7c3690f2142b7690
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date:   Fri Jan 9 17:02:49 2015 +0100

    Skip tags that are flagged as deleted.

diff --git a/resources/kolab/kolabretrievetagstask.cpp b/resources/kolab/kolabretrievetagstask.cpp
index 3330c4d..081232d 100644
--- a/resources/kolab/kolabretrievetagstask.cpp
+++ b/resources/kolab/kolabretrievetagstask.cpp
@@ -23,6 +23,7 @@
 
 #include <kimap/selectjob.h>
 #include <kimap/fetchjob.h>
+#include <imapflags.h>
 #include <kolabobject.h>
 
 KolabRetrieveTagTask::KolabRetrieveTagTask(ResourceStateInterface::Ptr resource, RetrieveType type, QObject *parent)
@@ -98,6 +99,9 @@ void KolabRetrieveTagTask::onHeadersReceived(const QString &mailBox,
     Q_ASSERT(fetch);
 
     foreach (qint64 number, uids.keys()) { //krazy:exclude=foreach
+        if (flags[number].contains(ImapFlags::Deleted)) {
+            continue;
+        }
         const KMime::Message::Ptr msg = messages[number];
         const Kolab::KolabObjectReader reader(msg);
         switch (reader.getType()) {


commit 17ad36d77bfa40948fb8ea8f0a801e59696e2cb3
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date:   Fri Jan 9 14:49:12 2015 +0100

    During merging delete all conflicting files.
    
    Unfortunately we cannot merge reasonably because we don't know the diff
    of the local modifications. We therefore simply replace the tag object.

diff --git a/resources/imap/replacemessagejob.cpp b/resources/imap/replacemessagejob.cpp
index 57e61b1..008fb16 100644
--- a/resources/imap/replacemessagejob.cpp
+++ b/resources/imap/replacemessagejob.cpp
@@ -29,13 +29,13 @@
 
 #include "imapflags.h"
 
-ReplaceMessageJob::ReplaceMessageJob(const KMime::Message::Ptr &msg, KIMAP::Session *session, const QString &mailbox, qint64 uidNext, qint64 oldUid, QObject *parent)
+ReplaceMessageJob::ReplaceMessageJob(const KMime::Message::Ptr &msg, KIMAP::Session *session, const QString &mailbox, qint64 uidNext, KIMAP::ImapSet oldUids, QObject *parent)
     : KJob(parent),
     mSession(session),
     mMessage(msg),
     mMailbox(mailbox),
     mUidNext(uidNext),
-    mOldUid(oldUid),
+    mOldUids(oldUids),
     mNewUid(-1),
     mMessageId(msg->messageID()->asUnicodeString().toUtf8())
 {
@@ -65,7 +65,7 @@ void ReplaceMessageJob::onAppendMessageDone(KJob *job)
     // We get it directly if UIDPLUS is supported...
     mNewUid = append->uid();
 
-    if (mNewUid > 0 && mOldUid <= 0) {
+    if (mNewUid > 0 && mOldUids.isEmpty()) {
         //We have the uid an no message to delete, we're done
         emitResult();
         return;
@@ -156,13 +156,13 @@ void ReplaceMessageJob::onSearchDone(KJob *job)
 
 void ReplaceMessageJob::triggerDeleteJobIfNecessary()
 {
-    if (mOldUid <= 0) {
+    if (mOldUids.isEmpty()) {
         //Nothing to do, we're done
         emitResult();
     } else {
         KIMAP::StoreJob *store = new KIMAP::StoreJob(mSession);
         store->setUidBased(true);
-        store->setSequenceSet(KIMAP::ImapSet(mOldUid));
+        store->setSequenceSet(mOldUids);
         store->setFlags(QList<QByteArray>() << ImapFlags::Deleted);
         store->setMode(KIMAP::StoreJob::AppendFlags);
         connect(store, SIGNAL(result(KJob*)), this, SLOT(onDeleteDone(KJob*)));
diff --git a/resources/imap/replacemessagejob.h b/resources/imap/replacemessagejob.h
index d9ebc12..364ea2c 100644
--- a/resources/imap/replacemessagejob.h
+++ b/resources/imap/replacemessagejob.h
@@ -23,6 +23,7 @@
 #include <KJob>
 #include <KMime/Message>
 #include <KIMAP/Session>
+#include <KIMAP/ImapSet>
 
 /**
  * This job appends a message, marks the old one as deleted, and returns the uid of the appended message.
@@ -31,7 +32,7 @@ class ReplaceMessageJob : public KJob
 {
     Q_OBJECT
 public:
-    ReplaceMessageJob(const KMime::Message::Ptr &msg, KIMAP::Session *session, const QString &mailbox, qint64 uidNext = -1, qint64 oldUid = -1, QObject *parent = 0);
+    ReplaceMessageJob(const KMime::Message::Ptr &msg, KIMAP::Session *session, const QString &mailbox, qint64 uidNext = -1, KIMAP::ImapSet oldUids = KIMAP::ImapSet(), QObject *parent = 0);
 
     qint64 newUid() const;
 
@@ -52,7 +53,7 @@ private:
     const KMime::Message::Ptr mMessage;
     const QString mMailbox;
     qint64 mUidNext;
-    qint64 mOldUid;
+    KIMAP::ImapSet mOldUids;
     qint64 mNewUid;
     const QByteArray mMessageId;
 };
diff --git a/resources/kolab/tagchangehelper.cpp b/resources/kolab/tagchangehelper.cpp
index 56d021a..a1d6dd4 100644
--- a/resources/kolab/tagchangehelper.cpp
+++ b/resources/kolab/tagchangehelper.cpp
@@ -66,6 +66,7 @@ KMime::Message::Ptr TagConverter::createMessage(const Akonadi::Tag &tag, const A
 struct TagMerger : public Merger {
     virtual KMime::Message::Ptr merge(KMime::Message::Ptr newMessage, QList<KMime::Message::Ptr> conflictingMessages) const
     {
+        kDebug() << "Got " << conflictingMessages.size() << " conflicting relation configuration objects. Overwriting with local version.";
         return newMessage;
     }
 };
diff --git a/resources/kolab/updatemessagejob.cpp b/resources/kolab/updatemessagejob.cpp
index a5149e1..f845c14 100644
--- a/resources/kolab/updatemessagejob.cpp
+++ b/resources/kolab/updatemessagejob.cpp
@@ -46,6 +46,7 @@ UpdateMessageJob::UpdateMessageJob(const KMime::Message::Ptr &msg, KIMAP::Sessio
     mKolabUid(kolabUid),
     mMerger(merger)
 {
+    mOldUids.add(oldUid);
 }
 
 void UpdateMessageJob::start()
@@ -149,11 +150,13 @@ void UpdateMessageJob::onSearchDone(KJob *job)
     KIMAP::SearchJob *search = static_cast<KIMAP::SearchJob*>(job);
 
     if (search->results().count() >= 1) {
-        mOldUid = search->results().first();
-        //TODO deal with all of them
+        mOldUids = KIMAP::ImapSet();
+        foreach (qint64 id, search->results()) {
+            mOldUids.add(id);
+        }
 
         KIMAP::FetchJob * fetchJob = new KIMAP::FetchJob(mSession);
-        fetchJob->setSequenceSet(KIMAP::ImapSet(mOldUid));
+        fetchJob->setSequenceSet(mOldUids);
         fetchJob->setUidBased(true);
 
         KIMAP::FetchJob::FetchScope scope;
@@ -208,7 +211,7 @@ void UpdateMessageJob::onConflictingMessageFetchDone(KJob *job)
 void UpdateMessageJob::appendMessage()
 {
     const qint64 uidNext = -1;
-    ReplaceMessageJob *replace = new ReplaceMessageJob(mMessage, mSession, mMailbox, uidNext, mOldUid, this);
+    ReplaceMessageJob *replace = new ReplaceMessageJob(mMessage, mSession, mMailbox, uidNext, mOldUids, this);
     connect(replace, SIGNAL(result(KJob*)), this, SLOT(onReplaceDone(KJob*)));
     replace->start();
 }
diff --git a/resources/kolab/updatemessagejob.h b/resources/kolab/updatemessagejob.h
index 99ddc90..9567959 100644
--- a/resources/kolab/updatemessagejob.h
+++ b/resources/kolab/updatemessagejob.h
@@ -72,6 +72,7 @@ private:
     const QString mMailbox;
     qint64 mUidNext;
     qint64 mOldUid;
+    KIMAP::ImapSet mOldUids;
     qint64 mNewUid;
     const QByteArray mMessageId;
     const QByteArray mKolabUid;




More information about the commits mailing list