diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2014-12-28 14:44:50 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2014-12-28 14:44:50 +0100 |
commit | 9b2257d680a5e4fa2fda8cf3302f25054a06710e (patch) | |
tree | 9abaf141018eb83d26ce07f5bd0e9436003ce732 /dummyresource/facade.cpp | |
parent | c83c2ef64b5a1e4b1dc0102df36687caebb96ff0 (diff) | |
download | sink-9b2257d680a5e4fa2fda8cf3302f25054a06710e.tar.gz sink-9b2257d680a5e4fa2fda8cf3302f25054a06710e.zip |
Buffers wrapped into entity buffer, async command progress tracking.
Diffstat (limited to 'dummyresource/facade.cpp')
-rw-r--r-- | dummyresource/facade.cpp | 48 |
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 | ||
32 | using namespace DummyCalendar; | 33 | using namespace DummyCalendar; |
33 | using namespace flatbuffers; | 34 | using 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; |