From 1d713d9e2dbaf27de9da087f9270d260dfc40c31 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Mon, 21 Nov 2016 23:13:38 +0100 Subject: Folded the SourceWriteback into the Synchronizer. By concentrating all communication to the source in one place we get rid of several oddities. * Quite a bit of duplication since both need access to the synchronizationStore and the source. * We currently have an akward locking in place because both classes access the ync store. This is not easier to resolve cleanly. * The live of resource implementers becomes easier. * An implementation could elect to not use changereplay and always do a full sync... (maybe?) --- examples/dummyresource/resourcefactory.cpp | 3 +- examples/imapresource/imapresource.cpp | 23 ------------- examples/maildirresource/maildirresource.cpp | 16 --------- .../mailtransportresource.cpp | 40 ++++++---------------- 4 files changed, 13 insertions(+), 69 deletions(-) (limited to 'examples') diff --git a/examples/dummyresource/resourcefactory.cpp b/examples/dummyresource/resourcefactory.cpp index 46e67f3..f5ab2d9 100644 --- a/examples/dummyresource/resourcefactory.cpp +++ b/examples/dummyresource/resourcefactory.cpp @@ -126,13 +126,14 @@ class DummySynchronizer : public Sink::Synchronizer { }); } + bool canReplay(const QByteArray &type, const QByteArray &key, const QByteArray &value) Q_DECL_OVERRIDE { return false; } + }; DummyResource::DummyResource(const Sink::ResourceContext &resourceContext, const QSharedPointer &pipeline) : Sink::GenericResource(resourceContext, pipeline) { setupSynchronizer(QSharedPointer::create(resourceContext)); - setupChangereplay(QSharedPointer::create(resourceContext)); setupPreprocessors(ENTITY_TYPE_MAIL, QVector() << new MailPropertyExtractor); setupPreprocessors(ENTITY_TYPE_FOLDER, diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp index 2b9659e..8fc7702 100644 --- a/examples/imapresource/imapresource.cpp +++ b/examples/imapresource/imapresource.cpp @@ -28,7 +28,6 @@ #include "definitions.h" #include "inspection.h" #include "synchronizer.h" -#include "sourcewriteback.h" #include "remoteidmap.h" #include "query.h" @@ -393,22 +392,6 @@ public: return KAsync::error("Nothing to do"); } -public: - QString mServer; - int mPort; - QString mUser; - QString mPassword; - QByteArray mResourceInstanceIdentifier; -}; - -class ImapWriteback : public Sink::SourceWriteBack -{ -public: - ImapWriteback(const ResourceContext &resourceContext) : Sink::SourceWriteBack(resourceContext) - { - - } - KAsync::Job replay(const ApplicationDomain::Mail &mail, Sink::Operation operation, const QByteArray &oldRemoteId, const QList &changedProperties) Q_DECL_OVERRIDE { auto imap = QSharedPointer::create(mServer, mPort); @@ -595,12 +578,6 @@ ImapResource::ImapResource(const ResourceContext &resourceContext, const QShared synchronizer->mUser = mUser; synchronizer->mPassword = mPassword; setupSynchronizer(synchronizer); - auto changereplay = QSharedPointer::create(resourceContext); - changereplay->mServer = mServer; - changereplay->mPort = mPort; - changereplay->mUser = mUser; - changereplay->mPassword = mPassword; - setupChangereplay(changereplay); setupPreprocessors(ENTITY_TYPE_MAIL, QVector() << new SpecialPurposeProcessor(resourceContext.resourceType, resourceContext.instanceId()) << new MimeMessageMover << new MailPropertyExtractor); setupPreprocessors(ENTITY_TYPE_FOLDER, QVector()); diff --git a/examples/maildirresource/maildirresource.cpp b/examples/maildirresource/maildirresource.cpp index fc77315..fed18c4 100644 --- a/examples/maildirresource/maildirresource.cpp +++ b/examples/maildirresource/maildirresource.cpp @@ -28,7 +28,6 @@ #include "libmaildir/maildir.h" #include "inspection.h" #include "synchronizer.h" -#include "sourcewriteback.h" #include "facadefactory.h" #include "adaptorfactoryregistry.h" @@ -383,18 +382,6 @@ public: return job; } -public: - QString mMaildirPath; -}; - -class MaildirWriteback : public Sink::SourceWriteBack -{ -public: - MaildirWriteback(const Sink::ResourceContext &resourceContext) : Sink::SourceWriteBack(resourceContext) - { - - } - KAsync::Job replay(const ApplicationDomain::Mail &mail, Sink::Operation operation, const QByteArray &oldRemoteId, const QList &changedProperties) Q_DECL_OVERRIDE { if (operation == Sink::Operation_Creation) { @@ -453,9 +440,6 @@ MaildirResource::MaildirResource(const Sink::ResourceContext &resourceContext, c auto synchronizer = QSharedPointer::create(resourceContext); synchronizer->mMaildirPath = mMaildirPath; setupSynchronizer(synchronizer); - auto changereplay = QSharedPointer::create(resourceContext); - changereplay->mMaildirPath = mMaildirPath; - setupChangereplay(changereplay); setupPreprocessors(ENTITY_TYPE_MAIL, QVector() << new SpecialPurposeProcessor(resourceContext.resourceType, resourceContext.instanceId()) << new MaildirMimeMessageMover(resourceContext.instanceId(), mMaildirPath) << new MaildirMailPropertyExtractor); setupPreprocessors(ENTITY_TYPE_FOLDER, QVector() << new FolderPreprocessor(mMaildirPath)); diff --git a/examples/mailtransportresource/mailtransportresource.cpp b/examples/mailtransportresource/mailtransportresource.cpp index 3fe551a..0688af6 100644 --- a/examples/mailtransportresource/mailtransportresource.cpp +++ b/examples/mailtransportresource/mailtransportresource.cpp @@ -23,7 +23,6 @@ #include "resourceconfig.h" #include "definitions.h" #include "domainadaptor.h" -#include "sourcewriteback.h" #include #include #include @@ -45,30 +44,6 @@ SINK_DEBUG_AREA("mailtransportresource") using namespace Sink; -//TODO fold into synchronizer -class MailtransportWriteback : public Sink::SourceWriteBack -{ -public: - MailtransportWriteback(const Sink::ResourceContext &resourceContext) : Sink::SourceWriteBack(resourceContext) - { - - } - - KAsync::Job replay(const ApplicationDomain::Mail &mail, Sink::Operation operation, const QByteArray &oldRemoteId, const QList &changedProperties) Q_DECL_OVERRIDE - { - if (operation == Sink::Operation_Creation) { - SinkTrace() << "Dispatching message."; - // return send(mail, mSettings); - } else if (operation == Sink::Operation_Removal) { - } else if (operation == Sink::Operation_Modification) { - } - return KAsync::null(); - } - -public: - MailtransportResource::Settings mSettings; -}; - class MailtransportSynchronizer : public Sink::Synchronizer { public: MailtransportSynchronizer(const Sink::ResourceContext &resourceContext) @@ -134,6 +109,17 @@ public: }); } + KAsync::Job replay(const ApplicationDomain::Mail &mail, Sink::Operation operation, const QByteArray &oldRemoteId, const QList &changedProperties) Q_DECL_OVERRIDE + { + if (operation == Sink::Operation_Creation) { + SinkTrace() << "Dispatching message."; + // return send(mail, mSettings); + } else if (operation == Sink::Operation_Removal) { + } else if (operation == Sink::Operation_Modification) { + } + return KAsync::null(); + } + public: QByteArray mResourceInstanceIdentifier; MailtransportResource::Settings mSettings; @@ -154,10 +140,6 @@ MailtransportResource::MailtransportResource(const Sink::ResourceContext &resour synchronizer->mSettings = mSettings; setupSynchronizer(synchronizer); - auto changereplay = QSharedPointer::create(resourceContext); - changereplay->mSettings = mSettings; - setupChangereplay(changereplay); - setupPreprocessors(ENTITY_TYPE_MAIL, QVector() << new MimeMessageMover << new MailPropertyExtractor); } -- cgit v1.2.3