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