summaryrefslogtreecommitdiffstats
path: root/dummyresource/facade.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dummyresource/facade.cpp')
-rw-r--r--dummyresource/facade.cpp48
1 files changed, 41 insertions, 7 deletions
diff --git a/dummyresource/facade.cpp b/dummyresource/facade.cpp
index 458aba6..d3974e9 100644
--- a/dummyresource/facade.cpp
+++ b/dummyresource/facade.cpp
@@ -26,8 +26,9 @@
26#include "common/commands.h" 26#include "common/commands.h"
27#include "dummycalendar_generated.h" 27#include "dummycalendar_generated.h"
28#include "event_generated.h" 28#include "event_generated.h"
29#include "entitybuffer_generated.h" 29#include "entity_generated.h"
30#include "metadata_generated.h" 30#include "metadata_generated.h"
31#include <common/entitybuffer.h>
31 32
32using namespace DummyCalendar; 33using namespace DummyCalendar;
33using namespace flatbuffers; 34using namespace flatbuffers;
@@ -199,14 +200,47 @@ void DummyResourceFacade::load(const Akonadi2::Query &query, const std::function
199 storage->startTransaction(Akonadi2::Storage::ReadOnly); 200 storage->startTransaction(Akonadi2::Storage::ReadOnly);
200 //Because we have no indexes yet, we always do a full scan 201 //Because we have no indexes yet, we always do a full scan
201 storage->scan("", [=](void *keyValue, int keySize, void *dataValue, int dataSize) -> bool { 202 storage->scan("", [=](void *keyValue, int keySize, void *dataValue, int dataSize) -> bool {
202 qDebug() << QString::fromStdString(std::string(static_cast<char*>(keyValue), keySize)); 203
203 auto buffer = Akonadi2::GetEntityBuffer(dataValue); 204 //Skip internals
204 auto resourceBuffer = GetDummyEvent(buffer->resource()); 205 if (QByteArray::fromRawData(static_cast<char*>(keyValue), keySize).startsWith("__internal")) {
205 auto metadataBuffer = Akonadi2::GetMetadata(buffer->resource()); 206 return true;
206 auto localBuffer = Akonadi2::Domain::Buffer::GetEvent(buffer->local()); 207 }
208
209 //Extract buffers
210 Akonadi2::EntityBuffer buffer(dataValue, dataSize);
211
212 DummyEvent const *resourceBuffer = 0;
213 if (auto resourceData = buffer.resourceBuffer()) {
214 flatbuffers::Verifier verifyer(resourceData->Data(), resourceData->size());
215 if (VerifyDummyEventBuffer(verifyer)) {
216 resourceBuffer = GetDummyEvent(resourceData);
217 }
218 }
219
220 Akonadi2::Metadata const *metadataBuffer = 0;
221 if (auto metadataData = buffer.metadataBuffer()) {
222 flatbuffers::Verifier verifyer(metadataData->Data(), metadataData->size());
223 if (Akonadi2::VerifyMetadataBuffer(verifyer)) {
224 metadataBuffer = Akonadi2::GetMetadata(metadataData);
225 }
226 }
227
228 Akonadi2::Domain::Buffer::Event const *localBuffer = 0;
229 if (auto localData = buffer.localBuffer()) {
230 flatbuffers::Verifier verifyer(localData->Data(), localData->size());
231 if (Akonadi2::Domain::Buffer::VerifyEventBuffer(verifyer)) {
232 localBuffer = Akonadi2::Domain::Buffer::GetEvent(localData);
233 }
234 }
235
236 if (!resourceBuffer || !metadataBuffer) {
237 qWarning() << "invalid buffer " << QString::fromStdString(std::string(static_cast<char*>(keyValue), keySize));
238 return true;
239 }
240
207 //We probably only want to create all buffers after the scan 241 //We probably only want to create all buffers after the scan
208 if (preparedQuery && preparedQuery(std::string(static_cast<char*>(keyValue), keySize), resourceBuffer)) { 242 if (preparedQuery && preparedQuery(std::string(static_cast<char*>(keyValue), keySize), resourceBuffer)) {
209 qint64 revision = metadataBuffer->revision(); 243 qint64 revision = metadataBuffer ? metadataBuffer->revision() : -1;
210 auto adaptor = QSharedPointer<DummyEventAdaptor>::create(); 244 auto adaptor = QSharedPointer<DummyEventAdaptor>::create();
211 adaptor->mLocalBuffer = localBuffer; 245 adaptor->mLocalBuffer = localBuffer;
212 adaptor->mResourceBuffer = resourceBuffer; 246 adaptor->mResourceBuffer = resourceBuffer;