#include "entitybuffer.h" #include "entity_generated.h" #include "metadata_generated.h" #include using namespace Akonadi2; EntityBuffer::EntityBuffer(void *dataValue, int dataSize) : mEntity(nullptr) { flatbuffers::Verifier verifyer(reinterpret_cast(dataValue), dataSize); // Q_ASSERT(Akonadi2::VerifyEntity(verifyer)); if (!Akonadi2::VerifyEntityBuffer(verifyer)) { qWarning() << "invalid buffer"; } else { mEntity = Akonadi2::GetEntity(dataValue); } } const Akonadi2::Entity &EntityBuffer::entity() { return *mEntity; } const uint8_t* EntityBuffer::resourceBuffer() { if (!mEntity) { qDebug() << "no buffer"; return nullptr; } return mEntity->resource()->Data(); } const uint8_t* EntityBuffer::metadataBuffer() { if (!mEntity) { return nullptr; } return mEntity->metadata()->Data(); } const uint8_t* EntityBuffer::localBuffer() { if (!mEntity) { return nullptr; } return mEntity->local()->Data(); } void EntityBuffer::extractResourceBuffer(void *dataValue, int dataSize, const std::function &handler) { Akonadi2::EntityBuffer buffer(dataValue, dataSize); if (auto resourceData = buffer.entity().resource()) { handler(resourceData->Data(), resourceData->size()); } } void EntityBuffer::assembleEntityBuffer(flatbuffers::FlatBufferBuilder &fbb, void const *metadataData, size_t metadataSize, void const *resourceData, size_t resourceSize, void const *localData, size_t localSize) { qDebug() << "res size: " << resourceSize; auto metadata = fbb.CreateVector(static_cast(metadataData), metadataSize); auto resource = fbb.CreateVector(static_cast(resourceData), resourceSize); auto local = fbb.CreateVector(static_cast(localData), localSize); auto builder = Akonadi2::EntityBuilder(fbb); builder.add_metadata(metadata); builder.add_resource(resource); builder.add_local(local); auto buffer = builder.Finish(); Akonadi2::FinishEntityBuffer(fbb, buffer); }