summaryrefslogtreecommitdiffstats
path: root/common/pipeline.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'common/pipeline.cpp')
-rw-r--r--common/pipeline.cpp40
1 files changed, 36 insertions, 4 deletions
diff --git a/common/pipeline.cpp b/common/pipeline.cpp
index 739909d..5ca8b95 100644
--- a/common/pipeline.cpp
+++ b/common/pipeline.cpp
@@ -23,6 +23,9 @@
23#include <QByteArray> 23#include <QByteArray>
24#include <QStandardPaths> 24#include <QStandardPaths>
25#include <QVector> 25#include <QVector>
26#include <QDebug>
27#include "entitybuffer_generated.h"
28#include "metadata_generated.h"
26 29
27namespace Akonadi2 30namespace Akonadi2
28{ 31{
@@ -69,11 +72,40 @@ void Pipeline::null()
69 state.step(); 72 state.step();
70} 73}
71 74
72void Pipeline::newEntity(const QByteArray &key, flatbuffers::FlatBufferBuilder &entity) 75void Pipeline::newEntity(const QByteArray &key, void *resourceBufferData, size_t size)
73{ 76{
74 const qint64 newRevision = storage().maxRevision() + 1; 77 const qint64 newRevision = storage().maxRevision() + 1;
75 //FIXME this should go into a preprocessor 78
76 storage().write(key, key.size(), reinterpret_cast<char*>(entity.GetBufferPointer()), entity.GetSize()); 79 flatbuffers::FlatBufferBuilder fbb;
80 auto builder = Akonadi2::EntityBufferBuilder(fbb);
81
82 //Add metadata buffer
83 {
84 flatbuffers::FlatBufferBuilder metadataFbb;
85 auto metadataBuilder = Akonadi2::MetadataBuilder(metadataFbb);
86 metadataBuilder.add_revision(newRevision);
87 auto metadataBuffer = metadataBuilder.Finish();
88 Akonadi2::FinishMetadataBuffer(fbb, metadataBuffer);
89 //TODO use memcpy
90 auto metadata = fbb.CreateVector<uint8_t>(metadataFbb.GetBufferPointer(), metadataFbb.GetSize());
91 builder.add_metadata(metadata);
92 }
93
94 //Add resource buffer
95 {
96 //TODO use memcpy
97 auto resource = fbb.CreateVector<uint8_t>(static_cast<uint8_t*>(resourceBufferData), size);
98 builder.add_resource(resource);
99 }
100
101 //We don't have a local buffer yet
102 // builder.add_local();
103
104 auto buffer = builder.Finish();
105 Akonadi2::FinishEntityBufferBuffer(fbb, buffer);
106
107 qDebug() << "writing new entity" << key;
108 storage().write(key.data(), key.size(), fbb.GetBufferPointer(), fbb.GetSize());
77 storage().setMaxRevision(newRevision); 109 storage().setMaxRevision(newRevision);
78 110
79 PipelineState state(this, NewPipeline, key, d->newPipeline); 111 PipelineState state(this, NewPipeline, key, d->newPipeline);
@@ -81,7 +113,7 @@ void Pipeline::newEntity(const QByteArray &key, flatbuffers::FlatBufferBuilder &
81 state.step(); 113 state.step();
82} 114}
83 115
84void Pipeline::modifiedEntity(const QByteArray &key, flatbuffers::FlatBufferBuilder &entityDelta) 116void Pipeline::modifiedEntity(const QByteArray &key, void *data, size_t size)
85{ 117{
86 PipelineState state(this, ModifiedPipeline, key, d->modifiedPipeline); 118 PipelineState state(this, ModifiedPipeline, key, d->modifiedPipeline);
87 d->activePipelines << state; 119 d->activePipelines << state;