diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/dummyresource/facade.cpp | 12 | ||||
-rw-r--r-- | examples/dummyresource/facade.h | 6 | ||||
-rw-r--r-- | examples/dummyresource/resourcefactory.cpp | 16 | ||||
-rw-r--r-- | examples/dummyresource/resourcefactory.h | 4 | ||||
-rw-r--r-- | examples/imapresource/facade.cpp | 8 | ||||
-rw-r--r-- | examples/imapresource/facade.h | 4 | ||||
-rw-r--r-- | examples/imapresource/imapresource.cpp | 66 | ||||
-rw-r--r-- | examples/imapresource/imapresource.h | 4 | ||||
-rw-r--r-- | examples/maildirresource/facade.cpp | 11 | ||||
-rw-r--r-- | examples/maildirresource/facade.h | 4 | ||||
-rw-r--r-- | examples/maildirresource/maildirresource.cpp | 77 | ||||
-rw-r--r-- | examples/maildirresource/maildirresource.h | 4 | ||||
-rw-r--r-- | examples/mailtransportresource/mailtransportresource.cpp | 32 | ||||
-rw-r--r-- | examples/mailtransportresource/mailtransportresource.h | 4 |
14 files changed, 107 insertions, 145 deletions
diff --git a/examples/dummyresource/facade.cpp b/examples/dummyresource/facade.cpp index 120498a..4343eba 100644 --- a/examples/dummyresource/facade.cpp +++ b/examples/dummyresource/facade.cpp | |||
@@ -21,8 +21,8 @@ | |||
21 | 21 | ||
22 | #include "domainadaptor.h" | 22 | #include "domainadaptor.h" |
23 | 23 | ||
24 | DummyResourceFacade::DummyResourceFacade(const QByteArray &instanceIdentifier) | 24 | DummyResourceFacade::DummyResourceFacade(const Sink::ResourceContext &context) |
25 | : Sink::GenericFacade<Sink::ApplicationDomain::Event>(instanceIdentifier, QSharedPointer<DummyEventAdaptorFactory>::create()) | 25 | : Sink::GenericFacade<Sink::ApplicationDomain::Event>(context) |
26 | { | 26 | { |
27 | } | 27 | } |
28 | 28 | ||
@@ -31,8 +31,8 @@ DummyResourceFacade::~DummyResourceFacade() | |||
31 | } | 31 | } |
32 | 32 | ||
33 | 33 | ||
34 | DummyResourceMailFacade::DummyResourceMailFacade(const QByteArray &instanceIdentifier) | 34 | DummyResourceMailFacade::DummyResourceMailFacade(const Sink::ResourceContext &context) |
35 | : Sink::GenericFacade<Sink::ApplicationDomain::Mail>(instanceIdentifier, QSharedPointer<DummyMailAdaptorFactory>::create()) | 35 | : Sink::GenericFacade<Sink::ApplicationDomain::Mail>(context) |
36 | { | 36 | { |
37 | } | 37 | } |
38 | 38 | ||
@@ -41,8 +41,8 @@ DummyResourceMailFacade::~DummyResourceMailFacade() | |||
41 | } | 41 | } |
42 | 42 | ||
43 | 43 | ||
44 | DummyResourceFolderFacade::DummyResourceFolderFacade(const QByteArray &instanceIdentifier) | 44 | DummyResourceFolderFacade::DummyResourceFolderFacade(const Sink::ResourceContext &context) |
45 | : Sink::GenericFacade<Sink::ApplicationDomain::Folder>(instanceIdentifier, QSharedPointer<DummyFolderAdaptorFactory>::create()) | 45 | : Sink::GenericFacade<Sink::ApplicationDomain::Folder>(context) |
46 | { | 46 | { |
47 | } | 47 | } |
48 | 48 | ||
diff --git a/examples/dummyresource/facade.h b/examples/dummyresource/facade.h index 5e0096d..1bb45fd 100644 --- a/examples/dummyresource/facade.h +++ b/examples/dummyresource/facade.h | |||
@@ -25,20 +25,20 @@ | |||
25 | class DummyResourceFacade : public Sink::GenericFacade<Sink::ApplicationDomain::Event> | 25 | class DummyResourceFacade : public Sink::GenericFacade<Sink::ApplicationDomain::Event> |
26 | { | 26 | { |
27 | public: | 27 | public: |
28 | DummyResourceFacade(const QByteArray &instanceIdentifier); | 28 | DummyResourceFacade(const Sink::ResourceContext &context); |
29 | virtual ~DummyResourceFacade(); | 29 | virtual ~DummyResourceFacade(); |
30 | }; | 30 | }; |
31 | 31 | ||
32 | class DummyResourceMailFacade : public Sink::GenericFacade<Sink::ApplicationDomain::Mail> | 32 | class DummyResourceMailFacade : public Sink::GenericFacade<Sink::ApplicationDomain::Mail> |
33 | { | 33 | { |
34 | public: | 34 | public: |
35 | DummyResourceMailFacade(const QByteArray &instanceIdentifier); | 35 | DummyResourceMailFacade(const Sink::ResourceContext &context); |
36 | virtual ~DummyResourceMailFacade(); | 36 | virtual ~DummyResourceMailFacade(); |
37 | }; | 37 | }; |
38 | 38 | ||
39 | class DummyResourceFolderFacade : public Sink::GenericFacade<Sink::ApplicationDomain::Folder> | 39 | class DummyResourceFolderFacade : public Sink::GenericFacade<Sink::ApplicationDomain::Folder> |
40 | { | 40 | { |
41 | public: | 41 | public: |
42 | DummyResourceFolderFacade(const QByteArray &instanceIdentifier); | 42 | DummyResourceFolderFacade(const Sink::ResourceContext &context); |
43 | virtual ~DummyResourceFolderFacade(); | 43 | virtual ~DummyResourceFolderFacade(); |
44 | }; | 44 | }; |
diff --git a/examples/dummyresource/resourcefactory.cpp b/examples/dummyresource/resourcefactory.cpp index 6d14721..e288be2 100644 --- a/examples/dummyresource/resourcefactory.cpp +++ b/examples/dummyresource/resourcefactory.cpp | |||
@@ -53,8 +53,8 @@ SINK_DEBUG_AREA("dummyresource") | |||
53 | class DummySynchronizer : public Sink::Synchronizer { | 53 | class DummySynchronizer : public Sink::Synchronizer { |
54 | public: | 54 | public: |
55 | 55 | ||
56 | DummySynchronizer(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier) | 56 | DummySynchronizer(const Sink::ResourceContext &context) |
57 | : Sink::Synchronizer(resourceType, resourceInstanceIdentifier) | 57 | : Sink::Synchronizer(context) |
58 | { | 58 | { |
59 | 59 | ||
60 | } | 60 | } |
@@ -129,11 +129,11 @@ class DummySynchronizer : public Sink::Synchronizer { | |||
129 | 129 | ||
130 | }; | 130 | }; |
131 | 131 | ||
132 | DummyResource::DummyResource(const QByteArray &instanceIdentifier, const QSharedPointer<Sink::Pipeline> &pipeline) | 132 | DummyResource::DummyResource(const Sink::ResourceContext &resourceContext, const QSharedPointer<Sink::Pipeline> &pipeline) |
133 | : Sink::GenericResource(PLUGIN_NAME, instanceIdentifier, pipeline) | 133 | : Sink::GenericResource(resourceContext, pipeline) |
134 | { | 134 | { |
135 | setupSynchronizer(QSharedPointer<DummySynchronizer>::create(PLUGIN_NAME, instanceIdentifier)); | 135 | setupSynchronizer(QSharedPointer<DummySynchronizer>::create(resourceContext)); |
136 | setupChangereplay(QSharedPointer<Sink::NullChangeReplay>::create(instanceIdentifier)); | 136 | setupChangereplay(QSharedPointer<Sink::NullChangeReplay>::create(resourceContext)); |
137 | setupPreprocessors(ENTITY_TYPE_MAIL, | 137 | setupPreprocessors(ENTITY_TYPE_MAIL, |
138 | QVector<Sink::Preprocessor*>() << new MailPropertyExtractor << new DefaultIndexUpdater<Sink::ApplicationDomain::Mail>); | 138 | QVector<Sink::Preprocessor*>() << new MailPropertyExtractor << new DefaultIndexUpdater<Sink::ApplicationDomain::Mail>); |
139 | setupPreprocessors(ENTITY_TYPE_FOLDER, | 139 | setupPreprocessors(ENTITY_TYPE_FOLDER, |
@@ -182,9 +182,9 @@ DummyResourceFactory::DummyResourceFactory(QObject *parent) | |||
182 | 182 | ||
183 | } | 183 | } |
184 | 184 | ||
185 | Sink::Resource *DummyResourceFactory::createResource(const QByteArray &instanceIdentifier) | 185 | Sink::Resource *DummyResourceFactory::createResource(const Sink::ResourceContext &resourceContext) |
186 | { | 186 | { |
187 | return new DummyResource(instanceIdentifier); | 187 | return new DummyResource(resourceContext); |
188 | } | 188 | } |
189 | 189 | ||
190 | void DummyResourceFactory::registerFacades(Sink::FacadeFactory &factory) | 190 | void DummyResourceFactory::registerFacades(Sink::FacadeFactory &factory) |
diff --git a/examples/dummyresource/resourcefactory.h b/examples/dummyresource/resourcefactory.h index 0a29d53..3dd82ff 100644 --- a/examples/dummyresource/resourcefactory.h +++ b/examples/dummyresource/resourcefactory.h | |||
@@ -32,7 +32,7 @@ | |||
32 | class DummyResource : public Sink::GenericResource | 32 | class DummyResource : public Sink::GenericResource |
33 | { | 33 | { |
34 | public: | 34 | public: |
35 | DummyResource(const QByteArray &instanceIdentifier, const QSharedPointer<Sink::Pipeline> &pipeline = QSharedPointer<Sink::Pipeline>()); | 35 | DummyResource(const Sink::ResourceContext &resourceContext, const QSharedPointer<Sink::Pipeline> &pipeline = QSharedPointer<Sink::Pipeline>()); |
36 | virtual ~DummyResource(); | 36 | virtual ~DummyResource(); |
37 | 37 | ||
38 | KAsync::Job<void> synchronizeWithSource() Q_DECL_OVERRIDE; | 38 | KAsync::Job<void> synchronizeWithSource() Q_DECL_OVERRIDE; |
@@ -48,7 +48,7 @@ class DummyResourceFactory : public Sink::ResourceFactory | |||
48 | public: | 48 | public: |
49 | DummyResourceFactory(QObject *parent = 0); | 49 | DummyResourceFactory(QObject *parent = 0); |
50 | 50 | ||
51 | Sink::Resource *createResource(const QByteArray &instanceIdentifier) Q_DECL_OVERRIDE; | 51 | Sink::Resource *createResource(const Sink::ResourceContext &resourceContext) Q_DECL_OVERRIDE; |
52 | void registerFacades(Sink::FacadeFactory &factory) Q_DECL_OVERRIDE; | 52 | void registerFacades(Sink::FacadeFactory &factory) Q_DECL_OVERRIDE; |
53 | void registerAdaptorFactories(Sink::AdaptorFactoryRegistry ®istry) Q_DECL_OVERRIDE; | 53 | void registerAdaptorFactories(Sink::AdaptorFactoryRegistry ®istry) Q_DECL_OVERRIDE; |
54 | void removeDataFromDisk(const QByteArray &instanceIdentifier) Q_DECL_OVERRIDE; | 54 | void removeDataFromDisk(const QByteArray &instanceIdentifier) Q_DECL_OVERRIDE; |
diff --git a/examples/imapresource/facade.cpp b/examples/imapresource/facade.cpp index d338b01..2829bb1 100644 --- a/examples/imapresource/facade.cpp +++ b/examples/imapresource/facade.cpp | |||
@@ -25,8 +25,8 @@ | |||
25 | #include "domainadaptor.h" | 25 | #include "domainadaptor.h" |
26 | #include "queryrunner.h" | 26 | #include "queryrunner.h" |
27 | 27 | ||
28 | ImapResourceMailFacade::ImapResourceMailFacade(const QByteArray &instanceIdentifier) | 28 | ImapResourceMailFacade::ImapResourceMailFacade(const Sink::ResourceContext &context) |
29 | : Sink::GenericFacade<Sink::ApplicationDomain::Mail>(instanceIdentifier, QSharedPointer<ImapMailAdaptorFactory>::create()) | 29 | : Sink::GenericFacade<Sink::ApplicationDomain::Mail>(context) |
30 | { | 30 | { |
31 | } | 31 | } |
32 | 32 | ||
@@ -34,8 +34,8 @@ ImapResourceMailFacade::~ImapResourceMailFacade() | |||
34 | { | 34 | { |
35 | } | 35 | } |
36 | 36 | ||
37 | ImapResourceFolderFacade::ImapResourceFolderFacade(const QByteArray &instanceIdentifier) | 37 | ImapResourceFolderFacade::ImapResourceFolderFacade(const Sink::ResourceContext &context) |
38 | : Sink::GenericFacade<Sink::ApplicationDomain::Folder>(instanceIdentifier, QSharedPointer<ImapFolderAdaptorFactory>::create()) | 38 | : Sink::GenericFacade<Sink::ApplicationDomain::Folder>(context) |
39 | { | 39 | { |
40 | } | 40 | } |
41 | 41 | ||
diff --git a/examples/imapresource/facade.h b/examples/imapresource/facade.h index 479ad96..1d24856 100644 --- a/examples/imapresource/facade.h +++ b/examples/imapresource/facade.h | |||
@@ -24,13 +24,13 @@ | |||
24 | class ImapResourceMailFacade : public Sink::GenericFacade<Sink::ApplicationDomain::Mail> | 24 | class ImapResourceMailFacade : public Sink::GenericFacade<Sink::ApplicationDomain::Mail> |
25 | { | 25 | { |
26 | public: | 26 | public: |
27 | ImapResourceMailFacade(const QByteArray &instanceIdentifier); | 27 | ImapResourceMailFacade(const Sink::ResourceContext &context); |
28 | virtual ~ImapResourceMailFacade(); | 28 | virtual ~ImapResourceMailFacade(); |
29 | }; | 29 | }; |
30 | 30 | ||
31 | class ImapResourceFolderFacade : public Sink::GenericFacade<Sink::ApplicationDomain::Folder> | 31 | class ImapResourceFolderFacade : public Sink::GenericFacade<Sink::ApplicationDomain::Folder> |
32 | { | 32 | { |
33 | public: | 33 | public: |
34 | ImapResourceFolderFacade(const QByteArray &instanceIdentifier); | 34 | ImapResourceFolderFacade(const Sink::ResourceContext &context); |
35 | virtual ~ImapResourceFolderFacade(); | 35 | virtual ~ImapResourceFolderFacade(); |
36 | }; | 36 | }; |
diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp index c72579c..0ea07bf 100644 --- a/examples/imapresource/imapresource.cpp +++ b/examples/imapresource/imapresource.cpp | |||
@@ -50,8 +50,8 @@ | |||
50 | #include <QtAlgorithms> | 50 | #include <QtAlgorithms> |
51 | 51 | ||
52 | #include "imapserverproxy.h" | 52 | #include "imapserverproxy.h" |
53 | #include "entityreader.h" | ||
54 | #include "mailpreprocessor.h" | 53 | #include "mailpreprocessor.h" |
54 | #include "adaptorfactoryregistry.h" | ||
55 | #include "specialpurposepreprocessor.h" | 55 | #include "specialpurposepreprocessor.h" |
56 | 56 | ||
57 | //This is the resources entity type, and not the domain type | 57 | //This is the resources entity type, and not the domain type |
@@ -92,8 +92,8 @@ static QByteArray assembleMailRid(const ApplicationDomain::Mail &mail, qint64 im | |||
92 | 92 | ||
93 | class ImapSynchronizer : public Sink::Synchronizer { | 93 | class ImapSynchronizer : public Sink::Synchronizer { |
94 | public: | 94 | public: |
95 | ImapSynchronizer(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier) | 95 | ImapSynchronizer(const ResourceContext &resourceContext) |
96 | : Sink::Synchronizer(resourceType, resourceInstanceIdentifier) | 96 | : Sink::Synchronizer(resourceContext) |
97 | { | 97 | { |
98 | 98 | ||
99 | } | 99 | } |
@@ -126,17 +126,6 @@ public: | |||
126 | SinkTrace() << "Found folders " << folderList.size(); | 126 | SinkTrace() << "Found folders " << folderList.size(); |
127 | 127 | ||
128 | scanForRemovals(bufferType, | 128 | scanForRemovals(bufferType, |
129 | [this, &bufferType](const std::function<void(const QByteArray &)> &callback) { | ||
130 | //TODO Instead of iterating over all entries in the database, which can also pick up the same item multiple times, | ||
131 | //we should rather iterate over an index that contains every uid exactly once. The remoteId index would be such an index, | ||
132 | //but we currently fail to iterate over all entries in an index it seems. | ||
133 | // auto remoteIds = synchronizationTransaction.openDatabase("rid.mapping." + bufferType, std::function<void(const Sink::Storage::Error &)>(), true); | ||
134 | auto mainDatabase = Sink::Storage::mainDatabase(transaction(), bufferType); | ||
135 | mainDatabase.scan("", [&](const QByteArray &key, const QByteArray &) { | ||
136 | callback(key); | ||
137 | return true; | ||
138 | }); | ||
139 | }, | ||
140 | [&folderList](const QByteArray &remoteId) -> bool { | 129 | [&folderList](const QByteArray &remoteId) -> bool { |
141 | // folderList.contains(remoteId) | 130 | // folderList.contains(remoteId) |
142 | for (const auto &folderPath : folderList) { | 131 | for (const auto &folderPath : folderList) { |
@@ -190,18 +179,12 @@ public: | |||
190 | const auto folderLocalId = syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, path.toUtf8()); | 179 | const auto folderLocalId = syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, path.toUtf8()); |
191 | 180 | ||
192 | int count = 0; | 181 | int count = 0; |
193 | auto property = Sink::ApplicationDomain::Mail::Folder::name; | 182 | |
194 | scanForRemovals(bufferType, | 183 | scanForRemovals(bufferType, |
195 | [&](const std::function<void(const QByteArray &)> &callback) { | 184 | [&](const std::function<void(const QByteArray &)> &callback) { |
196 | Index index(bufferType + ".index." + property, transaction()); | 185 | store().indexLookup<ApplicationDomain::Mail, ApplicationDomain::Mail::Folder>(folderLocalId, callback); |
197 | index.lookup(folderLocalId, [&](const QByteArray &sinkId) { | ||
198 | callback(sinkId); | ||
199 | }, | ||
200 | [&](const Index::Error &error) { | ||
201 | SinkWarning() << "Error in index: " << error.message << property; | ||
202 | }); | ||
203 | }, | 186 | }, |
204 | [messages, path, &count](const QByteArray &remoteId) -> bool { | 187 | [&](const QByteArray &remoteId) -> bool { |
205 | if (messages.contains(uidFromMailRid(remoteId))) { | 188 | if (messages.contains(uidFromMailRid(remoteId))) { |
206 | return true; | 189 | return true; |
207 | } | 190 | } |
@@ -347,7 +330,7 @@ public: | |||
347 | class ImapWriteback : public Sink::SourceWriteBack | 330 | class ImapWriteback : public Sink::SourceWriteBack |
348 | { | 331 | { |
349 | public: | 332 | public: |
350 | ImapWriteback(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier) : Sink::SourceWriteBack(resourceType, resourceInstanceIdentifier) | 333 | ImapWriteback(const ResourceContext &resourceContext) : Sink::SourceWriteBack(resourceContext) |
351 | { | 334 | { |
352 | 335 | ||
353 | } | 336 | } |
@@ -514,10 +497,10 @@ public: | |||
514 | QByteArray mResourceInstanceIdentifier; | 497 | QByteArray mResourceInstanceIdentifier; |
515 | }; | 498 | }; |
516 | 499 | ||
517 | ImapResource::ImapResource(const QByteArray &instanceIdentifier, const QSharedPointer<Sink::Pipeline> &pipeline) | 500 | ImapResource::ImapResource(const ResourceContext &resourceContext, const QSharedPointer<Sink::Pipeline> &pipeline) |
518 | : Sink::GenericResource(PLUGIN_NAME, instanceIdentifier, pipeline) | 501 | : Sink::GenericResource(resourceContext, pipeline) |
519 | { | 502 | { |
520 | auto config = ResourceConfig::getConfiguration(instanceIdentifier); | 503 | auto config = ResourceConfig::getConfiguration(resourceContext.instanceId()); |
521 | mServer = config.value("server").toString(); | 504 | mServer = config.value("server").toString(); |
522 | mPort = config.value("port").toInt(); | 505 | mPort = config.value("port").toInt(); |
523 | mUser = config.value("username").toString(); | 506 | mUser = config.value("username").toString(); |
@@ -532,46 +515,45 @@ ImapResource::ImapResource(const QByteArray &instanceIdentifier, const QSharedPo | |||
532 | mPort = list.at(1).toInt(); | 515 | mPort = list.at(1).toInt(); |
533 | } | 516 | } |
534 | 517 | ||
535 | auto synchronizer = QSharedPointer<ImapSynchronizer>::create(PLUGIN_NAME, instanceIdentifier); | 518 | auto synchronizer = QSharedPointer<ImapSynchronizer>::create(resourceContext); |
536 | synchronizer->mServer = mServer; | 519 | synchronizer->mServer = mServer; |
537 | synchronizer->mPort = mPort; | 520 | synchronizer->mPort = mPort; |
538 | synchronizer->mUser = mUser; | 521 | synchronizer->mUser = mUser; |
539 | synchronizer->mPassword = mPassword; | 522 | synchronizer->mPassword = mPassword; |
540 | synchronizer->mResourceInstanceIdentifier = instanceIdentifier; | ||
541 | setupSynchronizer(synchronizer); | 523 | setupSynchronizer(synchronizer); |
542 | auto changereplay = QSharedPointer<ImapWriteback>::create(PLUGIN_NAME, instanceIdentifier); | 524 | auto changereplay = QSharedPointer<ImapWriteback>::create(resourceContext); |
543 | changereplay->mServer = mServer; | 525 | changereplay->mServer = mServer; |
544 | changereplay->mPort = mPort; | 526 | changereplay->mPort = mPort; |
545 | changereplay->mUser = mUser; | 527 | changereplay->mUser = mUser; |
546 | changereplay->mPassword = mPassword; | 528 | changereplay->mPassword = mPassword; |
547 | setupChangereplay(changereplay); | 529 | setupChangereplay(changereplay); |
548 | 530 | ||
549 | setupPreprocessors(ENTITY_TYPE_MAIL, QVector<Sink::Preprocessor*>() << new SpecialPurposeProcessor(mResourceType, mResourceInstanceIdentifier) << new MimeMessageMover << new MailPropertyExtractor << new DefaultIndexUpdater<Sink::ApplicationDomain::Mail>); | 531 | setupPreprocessors(ENTITY_TYPE_MAIL, QVector<Sink::Preprocessor*>() << new SpecialPurposeProcessor(resourceContext.resourceType, resourceContext.instanceId()) << new MimeMessageMover << new MailPropertyExtractor << new DefaultIndexUpdater<Sink::ApplicationDomain::Mail>); |
550 | setupPreprocessors(ENTITY_TYPE_FOLDER, QVector<Sink::Preprocessor*>() << new DefaultIndexUpdater<Sink::ApplicationDomain::Folder>); | 532 | setupPreprocessors(ENTITY_TYPE_FOLDER, QVector<Sink::Preprocessor*>() << new DefaultIndexUpdater<Sink::ApplicationDomain::Folder>); |
551 | } | 533 | } |
552 | 534 | ||
553 | void ImapResource::removeFromDisk(const QByteArray &instanceIdentifier) | 535 | void ImapResource::removeFromDisk(const QByteArray &instanceIdentifier) |
554 | { | 536 | { |
555 | GenericResource::removeFromDisk(instanceIdentifier); | 537 | GenericResource::removeFromDisk(instanceIdentifier); |
556 | Sink::Storage(Sink::storageLocation(), instanceIdentifier + ".synchronization", Sink::Storage::ReadWrite).removeFromDisk(); | 538 | Sink::Storage::DataStore(Sink::storageLocation(), instanceIdentifier + ".synchronization", Sink::Storage::DataStore::ReadWrite).removeFromDisk(); |
557 | } | 539 | } |
558 | 540 | ||
559 | KAsync::Job<void> ImapResource::inspect(int inspectionType, const QByteArray &inspectionId, const QByteArray &domainType, const QByteArray &entityId, const QByteArray &property, const QVariant &expectedValue) | 541 | KAsync::Job<void> ImapResource::inspect(int inspectionType, const QByteArray &inspectionId, const QByteArray &domainType, const QByteArray &entityId, const QByteArray &property, const QVariant &expectedValue) |
560 | { | 542 | { |
561 | auto synchronizationStore = QSharedPointer<Sink::Storage>::create(Sink::storageLocation(), mResourceInstanceIdentifier + ".synchronization", Sink::Storage::ReadOnly); | 543 | auto synchronizationStore = QSharedPointer<Sink::Storage::DataStore>::create(Sink::storageLocation(), mResourceContext.instanceId() + ".synchronization", Sink::Storage::DataStore::ReadOnly); |
562 | auto synchronizationTransaction = synchronizationStore->createTransaction(Sink::Storage::ReadOnly); | 544 | auto synchronizationTransaction = synchronizationStore->createTransaction(Sink::Storage::DataStore::ReadOnly); |
563 | 545 | ||
564 | auto mainStore = QSharedPointer<Sink::Storage>::create(Sink::storageLocation(), mResourceInstanceIdentifier, Sink::Storage::ReadOnly); | 546 | auto mainStore = QSharedPointer<Sink::Storage::DataStore>::create(Sink::storageLocation(), mResourceContext.instanceId(), Sink::Storage::DataStore::ReadOnly); |
565 | auto transaction = mainStore->createTransaction(Sink::Storage::ReadOnly); | 547 | auto transaction = mainStore->createTransaction(Sink::Storage::DataStore::ReadOnly); |
566 | 548 | ||
567 | auto entityStore = QSharedPointer<Sink::EntityStore>::create(mResourceType, mResourceInstanceIdentifier, transaction); | 549 | Sink::Storage::EntityStore entityStore(mResourceContext); |
568 | auto syncStore = QSharedPointer<Sink::RemoteIdMap>::create(synchronizationTransaction); | 550 | auto syncStore = QSharedPointer<Sink::RemoteIdMap>::create(synchronizationTransaction); |
569 | 551 | ||
570 | SinkTrace() << "Inspecting " << inspectionType << domainType << entityId << property << expectedValue; | 552 | SinkTrace() << "Inspecting " << inspectionType << domainType << entityId << property << expectedValue; |
571 | 553 | ||
572 | if (domainType == ENTITY_TYPE_MAIL) { | 554 | if (domainType == ENTITY_TYPE_MAIL) { |
573 | const auto mail = entityStore->read<Sink::ApplicationDomain::Mail>(entityId); | 555 | const auto mail = entityStore.readLatest<Sink::ApplicationDomain::Mail>(entityId); |
574 | const auto folder = entityStore->read<Sink::ApplicationDomain::Folder>(mail.getFolder()); | 556 | const auto folder = entityStore.readLatest<Sink::ApplicationDomain::Folder>(mail.getFolder()); |
575 | const auto folderRemoteId = syncStore->resolveLocalId(ENTITY_TYPE_FOLDER, mail.getFolder()); | 557 | const auto folderRemoteId = syncStore->resolveLocalId(ENTITY_TYPE_FOLDER, mail.getFolder()); |
576 | const auto mailRemoteId = syncStore->resolveLocalId(ENTITY_TYPE_MAIL, mail.identifier()); | 558 | const auto mailRemoteId = syncStore->resolveLocalId(ENTITY_TYPE_MAIL, mail.identifier()); |
577 | if (mailRemoteId.isEmpty() || folderRemoteId.isEmpty()) { | 559 | if (mailRemoteId.isEmpty() || folderRemoteId.isEmpty()) { |
@@ -635,7 +617,7 @@ KAsync::Job<void> ImapResource::inspect(int inspectionType, const QByteArray &in | |||
635 | } | 617 | } |
636 | if (domainType == ENTITY_TYPE_FOLDER) { | 618 | if (domainType == ENTITY_TYPE_FOLDER) { |
637 | const auto remoteId = syncStore->resolveLocalId(ENTITY_TYPE_FOLDER, entityId); | 619 | const auto remoteId = syncStore->resolveLocalId(ENTITY_TYPE_FOLDER, entityId); |
638 | const auto folder = entityStore->read<Sink::ApplicationDomain::Folder>(entityId); | 620 | const auto folder = entityStore.readLatest<Sink::ApplicationDomain::Folder>(entityId); |
639 | 621 | ||
640 | if (inspectionType == Sink::ResourceControl::Inspection::CacheIntegrityInspectionType) { | 622 | if (inspectionType == Sink::ResourceControl::Inspection::CacheIntegrityInspectionType) { |
641 | SinkLog() << "Inspecting cache integrity" << remoteId; | 623 | SinkLog() << "Inspecting cache integrity" << remoteId; |
@@ -698,9 +680,9 @@ ImapResourceFactory::ImapResourceFactory(QObject *parent) | |||
698 | 680 | ||
699 | } | 681 | } |
700 | 682 | ||
701 | Sink::Resource *ImapResourceFactory::createResource(const QByteArray &instanceIdentifier) | 683 | Sink::Resource *ImapResourceFactory::createResource(const ResourceContext &context) |
702 | { | 684 | { |
703 | return new ImapResource(instanceIdentifier); | 685 | return new ImapResource(context); |
704 | } | 686 | } |
705 | 687 | ||
706 | void ImapResourceFactory::registerFacades(Sink::FacadeFactory &factory) | 688 | void ImapResourceFactory::registerFacades(Sink::FacadeFactory &factory) |
diff --git a/examples/imapresource/imapresource.h b/examples/imapresource/imapresource.h index 236e695..684a3c9 100644 --- a/examples/imapresource/imapresource.h +++ b/examples/imapresource/imapresource.h | |||
@@ -42,7 +42,7 @@ struct Folder; | |||
42 | class ImapResource : public Sink::GenericResource | 42 | class ImapResource : public Sink::GenericResource |
43 | { | 43 | { |
44 | public: | 44 | public: |
45 | ImapResource(const QByteArray &instanceIdentifier, const QSharedPointer<Sink::Pipeline> &pipeline = QSharedPointer<Sink::Pipeline>()); | 45 | ImapResource(const Sink::ResourceContext &resourceContext, const QSharedPointer<Sink::Pipeline> &pipeline = QSharedPointer<Sink::Pipeline>()); |
46 | KAsync::Job<void> inspect(int inspectionType, const QByteArray &inspectionId, const QByteArray &domainType, const QByteArray &entityId, const QByteArray &property, const QVariant &expectedValue) Q_DECL_OVERRIDE; | 46 | KAsync::Job<void> inspect(int inspectionType, const QByteArray &inspectionId, const QByteArray &domainType, const QByteArray &entityId, const QByteArray &property, const QVariant &expectedValue) Q_DECL_OVERRIDE; |
47 | static void removeFromDisk(const QByteArray &instanceIdentifier); | 47 | static void removeFromDisk(const QByteArray &instanceIdentifier); |
48 | 48 | ||
@@ -62,7 +62,7 @@ class ImapResourceFactory : public Sink::ResourceFactory | |||
62 | public: | 62 | public: |
63 | ImapResourceFactory(QObject *parent = 0); | 63 | ImapResourceFactory(QObject *parent = 0); |
64 | 64 | ||
65 | Sink::Resource *createResource(const QByteArray &instanceIdentifier) Q_DECL_OVERRIDE; | 65 | Sink::Resource *createResource(const Sink::ResourceContext &resourceContext) Q_DECL_OVERRIDE; |
66 | void registerFacades(Sink::FacadeFactory &factory) Q_DECL_OVERRIDE; | 66 | void registerFacades(Sink::FacadeFactory &factory) Q_DECL_OVERRIDE; |
67 | void registerAdaptorFactories(Sink::AdaptorFactoryRegistry ®istry) Q_DECL_OVERRIDE; | 67 | void registerAdaptorFactories(Sink::AdaptorFactoryRegistry ®istry) Q_DECL_OVERRIDE; |
68 | void removeDataFromDisk(const QByteArray &instanceIdentifier) Q_DECL_OVERRIDE; | 68 | void removeDataFromDisk(const QByteArray &instanceIdentifier) Q_DECL_OVERRIDE; |
diff --git a/examples/maildirresource/facade.cpp b/examples/maildirresource/facade.cpp index 256b255..ba53c5f 100644 --- a/examples/maildirresource/facade.cpp +++ b/examples/maildirresource/facade.cpp | |||
@@ -22,11 +22,10 @@ | |||
22 | #include <QDir> | 22 | #include <QDir> |
23 | #include <QFileInfo> | 23 | #include <QFileInfo> |
24 | 24 | ||
25 | #include "domainadaptor.h" | 25 | #include "query.h" |
26 | #include "queryrunner.h" | ||
27 | 26 | ||
28 | MaildirResourceMailFacade::MaildirResourceMailFacade(const QByteArray &instanceIdentifier) | 27 | MaildirResourceMailFacade::MaildirResourceMailFacade(const Sink::ResourceContext &context) |
29 | : Sink::GenericFacade<Sink::ApplicationDomain::Mail>(instanceIdentifier, QSharedPointer<MaildirMailAdaptorFactory>::create()) | 28 | : Sink::GenericFacade<Sink::ApplicationDomain::Mail>(context) |
30 | { | 29 | { |
31 | mResultTransformation = [](Sink::ApplicationDomain::ApplicationDomainType &value) { | 30 | mResultTransformation = [](Sink::ApplicationDomain::ApplicationDomainType &value) { |
32 | if (value.hasProperty("mimeMessage")) { | 31 | if (value.hasProperty("mimeMessage")) { |
@@ -62,8 +61,8 @@ QPair<KAsync::Job<void>, Sink::ResultEmitter<Sink::ApplicationDomain::Mail::Ptr> | |||
62 | } | 61 | } |
63 | 62 | ||
64 | 63 | ||
65 | MaildirResourceFolderFacade::MaildirResourceFolderFacade(const QByteArray &instanceIdentifier) | 64 | MaildirResourceFolderFacade::MaildirResourceFolderFacade(const Sink::ResourceContext &context) |
66 | : Sink::GenericFacade<Sink::ApplicationDomain::Folder>(instanceIdentifier, QSharedPointer<MaildirFolderAdaptorFactory>::create()) | 65 | : Sink::GenericFacade<Sink::ApplicationDomain::Folder>(context) |
67 | { | 66 | { |
68 | } | 67 | } |
69 | 68 | ||
diff --git a/examples/maildirresource/facade.h b/examples/maildirresource/facade.h index 38981d0..fdb693e 100644 --- a/examples/maildirresource/facade.h +++ b/examples/maildirresource/facade.h | |||
@@ -24,7 +24,7 @@ | |||
24 | class MaildirResourceMailFacade : public Sink::GenericFacade<Sink::ApplicationDomain::Mail> | 24 | class MaildirResourceMailFacade : public Sink::GenericFacade<Sink::ApplicationDomain::Mail> |
25 | { | 25 | { |
26 | public: | 26 | public: |
27 | MaildirResourceMailFacade(const QByteArray &instanceIdentifier); | 27 | MaildirResourceMailFacade(const Sink::ResourceContext &context); |
28 | virtual ~MaildirResourceMailFacade(); | 28 | virtual ~MaildirResourceMailFacade(); |
29 | QPair<KAsync::Job<void>, Sink::ResultEmitter<Sink::ApplicationDomain::Mail::Ptr>::Ptr> load(const Sink::Query &query) Q_DECL_OVERRIDE; | 29 | QPair<KAsync::Job<void>, Sink::ResultEmitter<Sink::ApplicationDomain::Mail::Ptr>::Ptr> load(const Sink::Query &query) Q_DECL_OVERRIDE; |
30 | }; | 30 | }; |
@@ -32,6 +32,6 @@ public: | |||
32 | class MaildirResourceFolderFacade : public Sink::GenericFacade<Sink::ApplicationDomain::Folder> | 32 | class MaildirResourceFolderFacade : public Sink::GenericFacade<Sink::ApplicationDomain::Folder> |
33 | { | 33 | { |
34 | public: | 34 | public: |
35 | MaildirResourceFolderFacade(const QByteArray &instanceIdentifier); | 35 | MaildirResourceFolderFacade(const Sink::ResourceContext &context); |
36 | virtual ~MaildirResourceFolderFacade(); | 36 | virtual ~MaildirResourceFolderFacade(); |
37 | }; | 37 | }; |
diff --git a/examples/maildirresource/maildirresource.cpp b/examples/maildirresource/maildirresource.cpp index 1ed7fc8..b89d78c 100644 --- a/examples/maildirresource/maildirresource.cpp +++ b/examples/maildirresource/maildirresource.cpp | |||
@@ -85,13 +85,13 @@ class MaildirMimeMessageMover : public Sink::Preprocessor | |||
85 | public: | 85 | public: |
86 | MaildirMimeMessageMover(const QByteArray &resourceInstanceIdentifier, const QString &maildirPath) : mResourceInstanceIdentifier(resourceInstanceIdentifier), mMaildirPath(maildirPath) {} | 86 | MaildirMimeMessageMover(const QByteArray &resourceInstanceIdentifier, const QString &maildirPath) : mResourceInstanceIdentifier(resourceInstanceIdentifier), mMaildirPath(maildirPath) {} |
87 | 87 | ||
88 | QString getPath(const QByteArray &folderIdentifier, Sink::Storage::Transaction &transaction) | 88 | QString getPath(const QByteArray &folderIdentifier, Sink::Storage::DataStore::Transaction &transaction) |
89 | { | 89 | { |
90 | if (folderIdentifier.isEmpty()) { | 90 | if (folderIdentifier.isEmpty()) { |
91 | return mMaildirPath; | 91 | return mMaildirPath; |
92 | } | 92 | } |
93 | QString folderPath; | 93 | QString folderPath; |
94 | auto db = Sink::Storage::mainDatabase(transaction, ENTITY_TYPE_FOLDER); | 94 | auto db = Sink::Storage::DataStore::mainDatabase(transaction, ENTITY_TYPE_FOLDER); |
95 | db.findLatest(folderIdentifier, [&](const QByteArray &, const QByteArray &value) { | 95 | db.findLatest(folderIdentifier, [&](const QByteArray &, const QByteArray &value) { |
96 | Sink::EntityBuffer buffer(value); | 96 | Sink::EntityBuffer buffer(value); |
97 | const Sink::Entity &entity = buffer.entity(); | 97 | const Sink::Entity &entity = buffer.entity(); |
@@ -108,7 +108,7 @@ public: | |||
108 | return folderPath; | 108 | return folderPath; |
109 | } | 109 | } |
110 | 110 | ||
111 | QString moveMessage(const QString &oldPath, const QByteArray &folder, Sink::Storage::Transaction &transaction) | 111 | QString moveMessage(const QString &oldPath, const QByteArray &folder, Sink::Storage::DataStore::Transaction &transaction) |
112 | { | 112 | { |
113 | if (oldPath.startsWith(Sink::temporaryFileLocation())) { | 113 | if (oldPath.startsWith(Sink::temporaryFileLocation())) { |
114 | const auto path = getPath(folder, transaction); | 114 | const auto path = getPath(folder, transaction); |
@@ -141,7 +141,7 @@ public: | |||
141 | } | 141 | } |
142 | } | 142 | } |
143 | 143 | ||
144 | void newEntity(const QByteArray &uid, qint64 revision, Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE | 144 | void newEntity(const QByteArray &uid, qint64 revision, Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::DataStore::Transaction &transaction) Q_DECL_OVERRIDE |
145 | { | 145 | { |
146 | const auto mimeMessage = newEntity.getProperty("mimeMessage"); | 146 | const auto mimeMessage = newEntity.getProperty("mimeMessage"); |
147 | if (mimeMessage.isValid()) { | 147 | if (mimeMessage.isValid()) { |
@@ -150,7 +150,7 @@ public: | |||
150 | } | 150 | } |
151 | 151 | ||
152 | void modifiedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::ApplicationDomain::BufferAdaptor &newEntity, | 152 | void modifiedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::ApplicationDomain::BufferAdaptor &newEntity, |
153 | Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE | 153 | Sink::Storage::DataStore::Transaction &transaction) Q_DECL_OVERRIDE |
154 | { | 154 | { |
155 | const auto mimeMessage = newEntity.getProperty("mimeMessage"); | 155 | const auto mimeMessage = newEntity.getProperty("mimeMessage"); |
156 | const auto newFolder = newEntity.getProperty("folder"); | 156 | const auto newFolder = newEntity.getProperty("folder"); |
@@ -185,7 +185,7 @@ public: | |||
185 | maildir.changeEntryFlags(identifier, flags); | 185 | maildir.changeEntryFlags(identifier, flags); |
186 | } | 186 | } |
187 | 187 | ||
188 | void deletedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE | 188 | void deletedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::Storage::DataStore::Transaction &transaction) Q_DECL_OVERRIDE |
189 | { | 189 | { |
190 | const auto filePath = getFilePathFromMimeMessagePath(oldEntity.getProperty("mimeMessage").toString()); | 190 | const auto filePath = getFilePathFromMimeMessagePath(oldEntity.getProperty("mimeMessage").toString()); |
191 | QFile::remove(filePath); | 191 | QFile::remove(filePath); |
@@ -199,7 +199,7 @@ class FolderPreprocessor : public Sink::Preprocessor | |||
199 | public: | 199 | public: |
200 | FolderPreprocessor(const QString maildirPath) : mMaildirPath(maildirPath) {} | 200 | FolderPreprocessor(const QString maildirPath) : mMaildirPath(maildirPath) {} |
201 | 201 | ||
202 | void newEntity(const QByteArray &uid, qint64 revision, Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE | 202 | void newEntity(const QByteArray &uid, qint64 revision, Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::DataStore::Transaction &transaction) Q_DECL_OVERRIDE |
203 | { | 203 | { |
204 | auto folderName = newEntity.getProperty("name").toString(); | 204 | auto folderName = newEntity.getProperty("name").toString(); |
205 | const auto path = mMaildirPath + "/" + folderName; | 205 | const auto path = mMaildirPath + "/" + folderName; |
@@ -208,11 +208,11 @@ public: | |||
208 | } | 208 | } |
209 | 209 | ||
210 | void modifiedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::ApplicationDomain::BufferAdaptor &newEntity, | 210 | void modifiedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::ApplicationDomain::BufferAdaptor &newEntity, |
211 | Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE | 211 | Sink::Storage::DataStore::Transaction &transaction) Q_DECL_OVERRIDE |
212 | { | 212 | { |
213 | } | 213 | } |
214 | 214 | ||
215 | void deletedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE | 215 | void deletedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::Storage::DataStore::Transaction &transaction) Q_DECL_OVERRIDE |
216 | { | 216 | { |
217 | } | 217 | } |
218 | QString mMaildirPath; | 218 | QString mMaildirPath; |
@@ -221,8 +221,8 @@ public: | |||
221 | 221 | ||
222 | class MaildirSynchronizer : public Sink::Synchronizer { | 222 | class MaildirSynchronizer : public Sink::Synchronizer { |
223 | public: | 223 | public: |
224 | MaildirSynchronizer(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier) | 224 | MaildirSynchronizer(const Sink::ResourceContext &resourceContext) |
225 | : Sink::Synchronizer(resourceType, resourceInstanceIdentifier) | 225 | : Sink::Synchronizer(resourceContext) |
226 | { | 226 | { |
227 | 227 | ||
228 | } | 228 | } |
@@ -278,19 +278,7 @@ public: | |||
278 | const QByteArray bufferType = ENTITY_TYPE_FOLDER; | 278 | const QByteArray bufferType = ENTITY_TYPE_FOLDER; |
279 | QStringList folderList = listAvailableFolders(); | 279 | QStringList folderList = listAvailableFolders(); |
280 | SinkTrace() << "Found folders " << folderList; | 280 | SinkTrace() << "Found folders " << folderList; |
281 | |||
282 | scanForRemovals(bufferType, | 281 | scanForRemovals(bufferType, |
283 | [this, &bufferType](const std::function<void(const QByteArray &)> &callback) { | ||
284 | //TODO Instead of iterating over all entries in the database, which can also pick up the same item multiple times, | ||
285 | //we should rather iterate over an index that contains every uid exactly once. The remoteId index would be such an index, | ||
286 | //but we currently fail to iterate over all entries in an index it seems. | ||
287 | // auto remoteIds = synchronizationTransaction.openDatabase("rid.mapping." + bufferType, std::function<void(const Sink::Storage::Error &)>(), true); | ||
288 | auto mainDatabase = Sink::Storage::mainDatabase(transaction(), bufferType); | ||
289 | mainDatabase.scan("", [&](const QByteArray &key, const QByteArray &) { | ||
290 | callback(key); | ||
291 | return true; | ||
292 | }); | ||
293 | }, | ||
294 | [&folderList](const QByteArray &remoteId) -> bool { | 282 | [&folderList](const QByteArray &remoteId) -> bool { |
295 | return folderList.contains(remoteId); | 283 | return folderList.contains(remoteId); |
296 | } | 284 | } |
@@ -323,16 +311,9 @@ public: | |||
323 | 311 | ||
324 | const auto folderLocalId = syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, path.toUtf8()); | 312 | const auto folderLocalId = syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, path.toUtf8()); |
325 | 313 | ||
326 | auto property = "folder"; | ||
327 | scanForRemovals(bufferType, | 314 | scanForRemovals(bufferType, |
328 | [&](const std::function<void(const QByteArray &)> &callback) { | 315 | [&](const std::function<void(const QByteArray &)> &callback) { |
329 | Index index(bufferType + ".index." + property, transaction()); | 316 | store().indexLookup<ApplicationDomain::Mail, ApplicationDomain::Mail::Folder>(folderLocalId, callback); |
330 | index.lookup(folderLocalId, [&](const QByteArray &sinkId) { | ||
331 | callback(sinkId); | ||
332 | }, | ||
333 | [&](const Index::Error &error) { | ||
334 | SinkWarning() << "Error in index: " << error.message << property; | ||
335 | }); | ||
336 | }, | 317 | }, |
337 | [](const QByteArray &remoteId) -> bool { | 318 | [](const QByteArray &remoteId) -> bool { |
338 | return QFile(remoteId).exists(); | 319 | return QFile(remoteId).exists(); |
@@ -392,7 +373,7 @@ public: | |||
392 | class MaildirWriteback : public Sink::SourceWriteBack | 373 | class MaildirWriteback : public Sink::SourceWriteBack |
393 | { | 374 | { |
394 | public: | 375 | public: |
395 | MaildirWriteback(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier) : Sink::SourceWriteBack(resourceType, resourceInstanceIdentifier) | 376 | MaildirWriteback(const Sink::ResourceContext &resourceContext) : Sink::SourceWriteBack(resourceContext) |
396 | { | 377 | { |
397 | 378 | ||
398 | } | 379 | } |
@@ -442,24 +423,24 @@ public: | |||
442 | }; | 423 | }; |
443 | 424 | ||
444 | 425 | ||
445 | MaildirResource::MaildirResource(const QByteArray &instanceIdentifier, const QSharedPointer<Sink::Pipeline> &pipeline) | 426 | MaildirResource::MaildirResource(const Sink::ResourceContext &resourceContext, const QSharedPointer<Sink::Pipeline> &pipeline) |
446 | : Sink::GenericResource(PLUGIN_NAME, instanceIdentifier, pipeline) | 427 | : Sink::GenericResource(resourceContext, pipeline) |
447 | { | 428 | { |
448 | auto config = ResourceConfig::getConfiguration(instanceIdentifier); | 429 | auto config = ResourceConfig::getConfiguration(resourceContext.instanceId()); |
449 | mMaildirPath = QDir::cleanPath(QDir::fromNativeSeparators(config.value("path").toString())); | 430 | mMaildirPath = QDir::cleanPath(QDir::fromNativeSeparators(config.value("path").toString())); |
450 | //Chop a trailing slash if necessary | 431 | //Chop a trailing slash if necessary |
451 | if (mMaildirPath.endsWith("/")) { | 432 | if (mMaildirPath.endsWith("/")) { |
452 | mMaildirPath.chop(1); | 433 | mMaildirPath.chop(1); |
453 | } | 434 | } |
454 | 435 | ||
455 | auto synchronizer = QSharedPointer<MaildirSynchronizer>::create(PLUGIN_NAME, instanceIdentifier); | 436 | auto synchronizer = QSharedPointer<MaildirSynchronizer>::create(resourceContext); |
456 | synchronizer->mMaildirPath = mMaildirPath; | 437 | synchronizer->mMaildirPath = mMaildirPath; |
457 | setupSynchronizer(synchronizer); | 438 | setupSynchronizer(synchronizer); |
458 | auto changereplay = QSharedPointer<MaildirWriteback>::create(PLUGIN_NAME, instanceIdentifier); | 439 | auto changereplay = QSharedPointer<MaildirWriteback>::create(resourceContext); |
459 | changereplay->mMaildirPath = mMaildirPath; | 440 | changereplay->mMaildirPath = mMaildirPath; |
460 | setupChangereplay(changereplay); | 441 | setupChangereplay(changereplay); |
461 | 442 | ||
462 | setupPreprocessors(ENTITY_TYPE_MAIL, QVector<Sink::Preprocessor*>() << new SpecialPurposeProcessor(mResourceType, mResourceInstanceIdentifier) << new MaildirMimeMessageMover(mResourceInstanceIdentifier, mMaildirPath) << new MaildirMailPropertyExtractor << new DefaultIndexUpdater<Sink::ApplicationDomain::Mail>); | 443 | setupPreprocessors(ENTITY_TYPE_MAIL, QVector<Sink::Preprocessor*>() << new SpecialPurposeProcessor(resourceContext.resourceType, resourceContext.instanceId()) << new MaildirMimeMessageMover(resourceContext.instanceId(), mMaildirPath) << new MaildirMailPropertyExtractor << new DefaultIndexUpdater<Sink::ApplicationDomain::Mail>); |
463 | setupPreprocessors(ENTITY_TYPE_FOLDER, QVector<Sink::Preprocessor*>() << new FolderPreprocessor(mMaildirPath) << new DefaultIndexUpdater<Sink::ApplicationDomain::Folder>); | 444 | setupPreprocessors(ENTITY_TYPE_FOLDER, QVector<Sink::Preprocessor*>() << new FolderPreprocessor(mMaildirPath) << new DefaultIndexUpdater<Sink::ApplicationDomain::Folder>); |
464 | 445 | ||
465 | KPIM::Maildir dir(mMaildirPath, true); | 446 | KPIM::Maildir dir(mMaildirPath, true); |
@@ -480,24 +461,24 @@ MaildirResource::MaildirResource(const QByteArray &instanceIdentifier, const QSh | |||
480 | void MaildirResource::removeFromDisk(const QByteArray &instanceIdentifier) | 461 | void MaildirResource::removeFromDisk(const QByteArray &instanceIdentifier) |
481 | { | 462 | { |
482 | GenericResource::removeFromDisk(instanceIdentifier); | 463 | GenericResource::removeFromDisk(instanceIdentifier); |
483 | Sink::Storage(Sink::storageLocation(), instanceIdentifier + ".synchronization", Sink::Storage::ReadWrite).removeFromDisk(); | 464 | Sink::Storage::DataStore(Sink::storageLocation(), instanceIdentifier + ".synchronization", Sink::Storage::DataStore::ReadWrite).removeFromDisk(); |
484 | } | 465 | } |
485 | 466 | ||
486 | KAsync::Job<void> MaildirResource::inspect(int inspectionType, const QByteArray &inspectionId, const QByteArray &domainType, const QByteArray &entityId, const QByteArray &property, const QVariant &expectedValue) | 467 | KAsync::Job<void> MaildirResource::inspect(int inspectionType, const QByteArray &inspectionId, const QByteArray &domainType, const QByteArray &entityId, const QByteArray &property, const QVariant &expectedValue) |
487 | { | 468 | { |
488 | auto synchronizationStore = QSharedPointer<Sink::Storage>::create(Sink::storageLocation(), mResourceInstanceIdentifier + ".synchronization", Sink::Storage::ReadOnly); | 469 | auto synchronizationStore = QSharedPointer<Sink::Storage::DataStore>::create(Sink::storageLocation(), mResourceContext.instanceId() + ".synchronization", Sink::Storage::DataStore::ReadOnly); |
489 | auto synchronizationTransaction = synchronizationStore->createTransaction(Sink::Storage::ReadOnly); | 470 | auto synchronizationTransaction = synchronizationStore->createTransaction(Sink::Storage::DataStore::ReadOnly); |
490 | 471 | ||
491 | auto mainStore = QSharedPointer<Sink::Storage>::create(Sink::storageLocation(), mResourceInstanceIdentifier, Sink::Storage::ReadOnly); | 472 | auto mainStore = QSharedPointer<Sink::Storage::DataStore>::create(Sink::storageLocation(), mResourceContext.instanceId(), Sink::Storage::DataStore::ReadOnly); |
492 | auto transaction = mainStore->createTransaction(Sink::Storage::ReadOnly); | 473 | auto transaction = mainStore->createTransaction(Sink::Storage::DataStore::ReadOnly); |
493 | 474 | ||
494 | auto entityStore = QSharedPointer<EntityStore>::create(mResourceType, mResourceInstanceIdentifier, transaction); | 475 | Sink::Storage::EntityStore entityStore(mResourceContext); |
495 | auto syncStore = QSharedPointer<RemoteIdMap>::create(synchronizationTransaction); | 476 | auto syncStore = QSharedPointer<RemoteIdMap>::create(synchronizationTransaction); |
496 | 477 | ||
497 | SinkTrace() << "Inspecting " << inspectionType << domainType << entityId << property << expectedValue; | 478 | SinkTrace() << "Inspecting " << inspectionType << domainType << entityId << property << expectedValue; |
498 | 479 | ||
499 | if (domainType == ENTITY_TYPE_MAIL) { | 480 | if (domainType == ENTITY_TYPE_MAIL) { |
500 | auto mail = entityStore->read<Sink::ApplicationDomain::Mail>(entityId); | 481 | auto mail = entityStore.readLatest<Sink::ApplicationDomain::Mail>(entityId); |
501 | const auto filePath = getFilePathFromMimeMessagePath(mail.getMimeMessagePath()); | 482 | const auto filePath = getFilePathFromMimeMessagePath(mail.getMimeMessagePath()); |
502 | 483 | ||
503 | if (inspectionType == Sink::ResourceControl::Inspection::PropertyInspectionType) { | 484 | if (inspectionType == Sink::ResourceControl::Inspection::PropertyInspectionType) { |
@@ -530,7 +511,7 @@ KAsync::Job<void> MaildirResource::inspect(int inspectionType, const QByteArray | |||
530 | } | 511 | } |
531 | if (domainType == ENTITY_TYPE_FOLDER) { | 512 | if (domainType == ENTITY_TYPE_FOLDER) { |
532 | const auto remoteId = syncStore->resolveLocalId(ENTITY_TYPE_FOLDER, entityId); | 513 | const auto remoteId = syncStore->resolveLocalId(ENTITY_TYPE_FOLDER, entityId); |
533 | auto folder = entityStore->read<Sink::ApplicationDomain::Folder>(entityId); | 514 | auto folder = entityStore.readLatest<Sink::ApplicationDomain::Folder>(entityId); |
534 | 515 | ||
535 | if (inspectionType == Sink::ResourceControl::Inspection::CacheIntegrityInspectionType) { | 516 | if (inspectionType == Sink::ResourceControl::Inspection::CacheIntegrityInspectionType) { |
536 | SinkTrace() << "Inspecting cache integrity" << remoteId; | 517 | SinkTrace() << "Inspecting cache integrity" << remoteId; |
@@ -577,9 +558,9 @@ MaildirResourceFactory::MaildirResourceFactory(QObject *parent) | |||
577 | 558 | ||
578 | } | 559 | } |
579 | 560 | ||
580 | Sink::Resource *MaildirResourceFactory::createResource(const QByteArray &instanceIdentifier) | 561 | Sink::Resource *MaildirResourceFactory::createResource(const ResourceContext &context) |
581 | { | 562 | { |
582 | return new MaildirResource(instanceIdentifier); | 563 | return new MaildirResource(context); |
583 | } | 564 | } |
584 | 565 | ||
585 | void MaildirResourceFactory::registerFacades(Sink::FacadeFactory &factory) | 566 | void MaildirResourceFactory::registerFacades(Sink::FacadeFactory &factory) |
diff --git a/examples/maildirresource/maildirresource.h b/examples/maildirresource/maildirresource.h index 490e1e6..6265819 100644 --- a/examples/maildirresource/maildirresource.h +++ b/examples/maildirresource/maildirresource.h | |||
@@ -45,7 +45,7 @@ class MaildirFolderAdaptorFactory; | |||
45 | class MaildirResource : public Sink::GenericResource | 45 | class MaildirResource : public Sink::GenericResource |
46 | { | 46 | { |
47 | public: | 47 | public: |
48 | MaildirResource(const QByteArray &instanceIdentifier, const QSharedPointer<Sink::Pipeline> &pipeline = QSharedPointer<Sink::Pipeline>()); | 48 | MaildirResource(const Sink::ResourceContext &resourceContext, const QSharedPointer<Sink::Pipeline> &pipeline = QSharedPointer<Sink::Pipeline>()); |
49 | KAsync::Job<void> inspect(int inspectionType, const QByteArray &inspectionId, const QByteArray &domainType, const QByteArray &entityId, const QByteArray &property, const QVariant &expectedValue) Q_DECL_OVERRIDE; | 49 | KAsync::Job<void> inspect(int inspectionType, const QByteArray &inspectionId, const QByteArray &domainType, const QByteArray &entityId, const QByteArray &property, const QVariant &expectedValue) Q_DECL_OVERRIDE; |
50 | static void removeFromDisk(const QByteArray &instanceIdentifier); | 50 | static void removeFromDisk(const QByteArray &instanceIdentifier); |
51 | private: | 51 | private: |
@@ -64,7 +64,7 @@ class MaildirResourceFactory : public Sink::ResourceFactory | |||
64 | public: | 64 | public: |
65 | MaildirResourceFactory(QObject *parent = 0); | 65 | MaildirResourceFactory(QObject *parent = 0); |
66 | 66 | ||
67 | Sink::Resource *createResource(const QByteArray &instanceIdentifier) Q_DECL_OVERRIDE; | 67 | Sink::Resource *createResource(const Sink::ResourceContext &context) Q_DECL_OVERRIDE; |
68 | void registerFacades(Sink::FacadeFactory &factory) Q_DECL_OVERRIDE; | 68 | void registerFacades(Sink::FacadeFactory &factory) Q_DECL_OVERRIDE; |
69 | void registerAdaptorFactories(Sink::AdaptorFactoryRegistry ®istry) Q_DECL_OVERRIDE; | 69 | void registerAdaptorFactories(Sink::AdaptorFactoryRegistry ®istry) Q_DECL_OVERRIDE; |
70 | void removeDataFromDisk(const QByteArray &instanceIdentifier) Q_DECL_OVERRIDE; | 70 | void removeDataFromDisk(const QByteArray &instanceIdentifier) Q_DECL_OVERRIDE; |
diff --git a/examples/mailtransportresource/mailtransportresource.cpp b/examples/mailtransportresource/mailtransportresource.cpp index 3ce9476..9a22c41 100644 --- a/examples/mailtransportresource/mailtransportresource.cpp +++ b/examples/mailtransportresource/mailtransportresource.cpp | |||
@@ -41,6 +41,7 @@ | |||
41 | #include <pipeline.h> | 41 | #include <pipeline.h> |
42 | #include <mailpreprocessor.h> | 42 | #include <mailpreprocessor.h> |
43 | #include <indexupdater.h> | 43 | #include <indexupdater.h> |
44 | #include <adaptorfactoryregistry.h> | ||
44 | 45 | ||
45 | #define ENTITY_TYPE_MAIL "mail" | 46 | #define ENTITY_TYPE_MAIL "mail" |
46 | 47 | ||
@@ -52,7 +53,7 @@ using namespace Sink; | |||
52 | class MailtransportWriteback : public Sink::SourceWriteBack | 53 | class MailtransportWriteback : public Sink::SourceWriteBack |
53 | { | 54 | { |
54 | public: | 55 | public: |
55 | MailtransportWriteback(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier) : Sink::SourceWriteBack(resourceType, resourceInstanceIdentifier) | 56 | MailtransportWriteback(const Sink::ResourceContext &resourceContext) : Sink::SourceWriteBack(resourceContext) |
56 | { | 57 | { |
57 | 58 | ||
58 | } | 59 | } |
@@ -74,9 +75,9 @@ public: | |||
74 | 75 | ||
75 | class MailtransportSynchronizer : public Sink::Synchronizer { | 76 | class MailtransportSynchronizer : public Sink::Synchronizer { |
76 | public: | 77 | public: |
77 | MailtransportSynchronizer(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier) | 78 | MailtransportSynchronizer(const Sink::ResourceContext &resourceContext) |
78 | : Sink::Synchronizer(resourceType, resourceInstanceIdentifier), | 79 | : Sink::Synchronizer(resourceContext), |
79 | mResourceInstanceIdentifier(resourceInstanceIdentifier) | 80 | mResourceInstanceIdentifier(resourceContext.instanceId()) |
80 | { | 81 | { |
81 | 82 | ||
82 | } | 83 | } |
@@ -112,10 +113,9 @@ public: | |||
112 | { | 113 | { |
113 | SinkLog() << " Synchronizing"; | 114 | SinkLog() << " Synchronizing"; |
114 | return KAsync::start<void>([this](KAsync::Future<void> future) { | 115 | return KAsync::start<void>([this](KAsync::Future<void> future) { |
115 | Sink::Query query; | ||
116 | QList<ApplicationDomain::Mail> toSend; | 116 | QList<ApplicationDomain::Mail> toSend; |
117 | SinkLog() << " Looking for mail"; | 117 | SinkLog() << " Looking for mail"; |
118 | store().reader<ApplicationDomain::Mail>().query(query, [&](const ApplicationDomain::Mail &mail) -> bool { | 118 | store().readAll<ApplicationDomain::Mail>([&](const ApplicationDomain::Mail &mail) -> bool { |
119 | SinkTrace() << "Found mail: " << mail.identifier(); | 119 | SinkTrace() << "Found mail: " << mail.identifier(); |
120 | if (!mail.getSent()) { | 120 | if (!mail.getSent()) { |
121 | toSend << mail; | 121 | toSend << mail; |
@@ -143,10 +143,10 @@ public: | |||
143 | MailtransportResource::Settings mSettings; | 143 | MailtransportResource::Settings mSettings; |
144 | }; | 144 | }; |
145 | 145 | ||
146 | MailtransportResource::MailtransportResource(const QByteArray &instanceIdentifier, const QSharedPointer<Sink::Pipeline> &pipeline) | 146 | MailtransportResource::MailtransportResource(const Sink::ResourceContext &resourceContext, const QSharedPointer<Sink::Pipeline> &pipeline) |
147 | : Sink::GenericResource(PLUGIN_NAME, instanceIdentifier, pipeline) | 147 | : Sink::GenericResource(resourceContext, pipeline) |
148 | { | 148 | { |
149 | auto config = ResourceConfig::getConfiguration(instanceIdentifier); | 149 | auto config = ResourceConfig::getConfiguration(resourceContext.instanceId()); |
150 | mSettings = {config.value("server").toString(), | 150 | mSettings = {config.value("server").toString(), |
151 | config.value("username").toString(), | 151 | config.value("username").toString(), |
152 | config.value("cacert").toString(), | 152 | config.value("cacert").toString(), |
@@ -154,11 +154,11 @@ MailtransportResource::MailtransportResource(const QByteArray &instanceIdentifie | |||
154 | config.value("testmode").toBool() | 154 | config.value("testmode").toBool() |
155 | }; | 155 | }; |
156 | 156 | ||
157 | auto synchronizer = QSharedPointer<MailtransportSynchronizer>::create(PLUGIN_NAME, instanceIdentifier); | 157 | auto synchronizer = QSharedPointer<MailtransportSynchronizer>::create(resourceContext); |
158 | synchronizer->mSettings = mSettings; | 158 | synchronizer->mSettings = mSettings; |
159 | setupSynchronizer(synchronizer); | 159 | setupSynchronizer(synchronizer); |
160 | 160 | ||
161 | auto changereplay = QSharedPointer<MailtransportWriteback>::create(PLUGIN_NAME, instanceIdentifier); | 161 | auto changereplay = QSharedPointer<MailtransportWriteback>::create(resourceContext); |
162 | changereplay->mSettings = mSettings; | 162 | changereplay->mSettings = mSettings; |
163 | setupChangereplay(changereplay); | 163 | setupChangereplay(changereplay); |
164 | 164 | ||
@@ -168,14 +168,14 @@ MailtransportResource::MailtransportResource(const QByteArray &instanceIdentifie | |||
168 | void MailtransportResource::removeFromDisk(const QByteArray &instanceIdentifier) | 168 | void MailtransportResource::removeFromDisk(const QByteArray &instanceIdentifier) |
169 | { | 169 | { |
170 | GenericResource::removeFromDisk(instanceIdentifier); | 170 | GenericResource::removeFromDisk(instanceIdentifier); |
171 | Sink::Storage(Sink::storageLocation(), instanceIdentifier + ".synchronization", Sink::Storage::ReadWrite).removeFromDisk(); | 171 | Sink::Storage::DataStore(Sink::storageLocation(), instanceIdentifier + ".synchronization", Sink::Storage::DataStore::ReadWrite).removeFromDisk(); |
172 | } | 172 | } |
173 | 173 | ||
174 | KAsync::Job<void> MailtransportResource::inspect(int inspectionType, const QByteArray &inspectionId, const QByteArray &domainType, const QByteArray &entityId, const QByteArray &property, const QVariant &expectedValue) | 174 | KAsync::Job<void> MailtransportResource::inspect(int inspectionType, const QByteArray &inspectionId, const QByteArray &domainType, const QByteArray &entityId, const QByteArray &property, const QVariant &expectedValue) |
175 | { | 175 | { |
176 | if (domainType == ENTITY_TYPE_MAIL) { | 176 | if (domainType == ENTITY_TYPE_MAIL) { |
177 | if (inspectionType == Sink::ResourceControl::Inspection::ExistenceInspectionType) { | 177 | if (inspectionType == Sink::ResourceControl::Inspection::ExistenceInspectionType) { |
178 | auto path = resourceStorageLocation(mResourceInstanceIdentifier) + "/test/" + entityId; | 178 | auto path = resourceStorageLocation(mResourceContext.instanceId()) + "/test/" + entityId; |
179 | if (QFileInfo::exists(path)) { | 179 | if (QFileInfo::exists(path)) { |
180 | return KAsync::null<void>(); | 180 | return KAsync::null<void>(); |
181 | } | 181 | } |
@@ -191,14 +191,14 @@ MailtransportResourceFactory::MailtransportResourceFactory(QObject *parent) | |||
191 | 191 | ||
192 | } | 192 | } |
193 | 193 | ||
194 | Sink::Resource *MailtransportResourceFactory::createResource(const QByteArray &instanceIdentifier) | 194 | Sink::Resource *MailtransportResourceFactory::createResource(const Sink::ResourceContext &context) |
195 | { | 195 | { |
196 | return new MailtransportResource(instanceIdentifier); | 196 | return new MailtransportResource(context); |
197 | } | 197 | } |
198 | 198 | ||
199 | void MailtransportResourceFactory::registerFacades(Sink::FacadeFactory &factory) | 199 | void MailtransportResourceFactory::registerFacades(Sink::FacadeFactory &factory) |
200 | { | 200 | { |
201 | factory.registerFacade<ApplicationDomain::Mail, DefaultFacade<ApplicationDomain::Mail, DomainTypeAdaptorFactory<ApplicationDomain::Mail>>>(PLUGIN_NAME); | 201 | factory.registerFacade<ApplicationDomain::Mail, DefaultFacade<ApplicationDomain::Mail>>(PLUGIN_NAME); |
202 | } | 202 | } |
203 | 203 | ||
204 | void MailtransportResourceFactory::registerAdaptorFactories(Sink::AdaptorFactoryRegistry ®istry) | 204 | void MailtransportResourceFactory::registerAdaptorFactories(Sink::AdaptorFactoryRegistry ®istry) |
diff --git a/examples/mailtransportresource/mailtransportresource.h b/examples/mailtransportresource/mailtransportresource.h index dcc33df..212880c 100644 --- a/examples/mailtransportresource/mailtransportresource.h +++ b/examples/mailtransportresource/mailtransportresource.h | |||
@@ -28,7 +28,7 @@ | |||
28 | class MailtransportResource : public Sink::GenericResource | 28 | class MailtransportResource : public Sink::GenericResource |
29 | { | 29 | { |
30 | public: | 30 | public: |
31 | MailtransportResource(const QByteArray &instanceIdentifier, const QSharedPointer<Sink::Pipeline> &pipeline = QSharedPointer<Sink::Pipeline>()); | 31 | MailtransportResource(const Sink::ResourceContext &resourceContext, const QSharedPointer<Sink::Pipeline> &pipeline = QSharedPointer<Sink::Pipeline>()); |
32 | KAsync::Job<void> inspect(int inspectionType, const QByteArray &inspectionId, const QByteArray &domainType, const QByteArray &entityId, const QByteArray &property, const QVariant &expectedValue) Q_DECL_OVERRIDE; | 32 | KAsync::Job<void> inspect(int inspectionType, const QByteArray &inspectionId, const QByteArray &domainType, const QByteArray &entityId, const QByteArray &property, const QVariant &expectedValue) Q_DECL_OVERRIDE; |
33 | static void removeFromDisk(const QByteArray &instanceIdentifier); | 33 | static void removeFromDisk(const QByteArray &instanceIdentifier); |
34 | 34 | ||
@@ -52,7 +52,7 @@ class MailtransportResourceFactory : public Sink::ResourceFactory | |||
52 | public: | 52 | public: |
53 | MailtransportResourceFactory(QObject *parent = 0); | 53 | MailtransportResourceFactory(QObject *parent = 0); |
54 | 54 | ||
55 | Sink::Resource *createResource(const QByteArray &instanceIdentifier) Q_DECL_OVERRIDE; | 55 | Sink::Resource *createResource(const Sink::ResourceContext &resourceContext) Q_DECL_OVERRIDE; |
56 | void registerFacades(Sink::FacadeFactory &factory) Q_DECL_OVERRIDE; | 56 | void registerFacades(Sink::FacadeFactory &factory) Q_DECL_OVERRIDE; |
57 | void registerAdaptorFactories(Sink::AdaptorFactoryRegistry ®istry) Q_DECL_OVERRIDE; | 57 | void registerAdaptorFactories(Sink::AdaptorFactoryRegistry ®istry) Q_DECL_OVERRIDE; |
58 | void removeDataFromDisk(const QByteArray &instanceIdentifier) Q_DECL_OVERRIDE; | 58 | void removeDataFromDisk(const QByteArray &instanceIdentifier) Q_DECL_OVERRIDE; |