diff options
Diffstat (limited to 'dummyresource/resourcefactory.cpp')
-rw-r--r-- | dummyresource/resourcefactory.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/dummyresource/resourcefactory.cpp b/dummyresource/resourcefactory.cpp index 60a9cf6..18083cb 100644 --- a/dummyresource/resourcefactory.cpp +++ b/dummyresource/resourcefactory.cpp | |||
@@ -28,6 +28,7 @@ | |||
28 | #include "domainadaptor.h" | 28 | #include "domainadaptor.h" |
29 | #include "commands.h" | 29 | #include "commands.h" |
30 | #include "clientapi.h" | 30 | #include "clientapi.h" |
31 | #include "index.h" | ||
31 | #include <QUuid> | 32 | #include <QUuid> |
32 | #include <assert.h> | 33 | #include <assert.h> |
33 | 34 | ||
@@ -261,8 +262,31 @@ void DummyResource::configurePipeline(Akonadi2::Pipeline *pipeline) | |||
261 | auto adaptor = eventFactory->createAdaptor(entity); | 262 | auto adaptor = eventFactory->createAdaptor(entity); |
262 | qDebug() << "Summary preprocessor: " << adaptor->getProperty("summary").toString(); | 263 | qDebug() << "Summary preprocessor: " << adaptor->getProperty("summary").toString(); |
263 | }); | 264 | }); |
265 | |||
266 | auto uidIndexer = new SimpleProcessor("uidIndexer", [eventFactory](const Akonadi2::PipelineState &state, const Akonadi2::Entity &entity) { | ||
267 | static Index uidIndex(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/akonadi2/storage", "org.kde.dummy.index.uid", Akonadi2::Storage::ReadWrite); | ||
268 | |||
269 | auto adaptor = eventFactory->createAdaptor(entity); | ||
270 | const auto uid = adaptor->getProperty("uid"); | ||
271 | if (uid.isValid()) { | ||
272 | uidIndex.add(uid.toByteArray(), state.key()); | ||
273 | } | ||
274 | |||
275 | //TODO would this be worthwhile for performance reasons? | ||
276 | // flatbuffers::Verifier verifyer(entity.local()->Data(), entity.local()->size()); | ||
277 | // if (!Akonadi2::Domain::Buffer::VerifyEventBuffer(verifyer)) { | ||
278 | // qWarning() << "invalid local buffer"; | ||
279 | // return; | ||
280 | // } | ||
281 | // auto localEvent = Akonadi2::Domain::Buffer::GetEvent(entity.local()->Data()); | ||
282 | // if (localEvent && localEvent->uid()) { | ||
283 | // qDebug() << "got uid: " << QByteArray::fromRawData(reinterpret_cast<const char *>(localEvent->uid()->Data()), localEvent->uid()->size()); | ||
284 | // uidIndex.add(QByteArray::fromRawData(reinterpret_cast<const char *>(localEvent->uid()->Data()), localEvent->uid()->size()), state.key()); | ||
285 | // } | ||
286 | }); | ||
287 | |||
264 | //event is the entitytype and not the domain type | 288 | //event is the entitytype and not the domain type |
265 | pipeline->setPreprocessors("event", Akonadi2::Pipeline::NewPipeline, QVector<Akonadi2::Preprocessor*>() << eventIndexer); | 289 | pipeline->setPreprocessors("event", Akonadi2::Pipeline::NewPipeline, QVector<Akonadi2::Preprocessor*>() << eventIndexer << uidIndexer); |
266 | mProcessor = new Processor(pipeline, QList<MessageQueue*>() << &mUserQueue << &mSynchronizerQueue); | 290 | mProcessor = new Processor(pipeline, QList<MessageQueue*>() << &mUserQueue << &mSynchronizerQueue); |
267 | QObject::connect(mProcessor, &Processor::error, [this](int errorCode, const QString &msg) { onProcessorError(errorCode, msg); }); | 291 | QObject::connect(mProcessor, &Processor::error, [this](int errorCode, const QString &msg) { onProcessorError(errorCode, msg); }); |
268 | } | 292 | } |