diff options
Diffstat (limited to 'common/pipeline.cpp')
-rw-r--r-- | common/pipeline.cpp | 40 |
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 | ||
27 | namespace Akonadi2 | 30 | namespace Akonadi2 |
28 | { | 31 | { |
@@ -69,11 +72,40 @@ void Pipeline::null() | |||
69 | state.step(); | 72 | state.step(); |
70 | } | 73 | } |
71 | 74 | ||
72 | void Pipeline::newEntity(const QByteArray &key, flatbuffers::FlatBufferBuilder &entity) | 75 | void 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 | ||
84 | void Pipeline::modifiedEntity(const QByteArray &key, flatbuffers::FlatBufferBuilder &entityDelta) | 116 | void 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; |