summaryrefslogtreecommitdiffstats
path: root/common/pipeline.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'common/pipeline.cpp')
-rw-r--r--common/pipeline.cpp29
1 files changed, 15 insertions, 14 deletions
diff --git a/common/pipeline.cpp b/common/pipeline.cpp
index 5ca8b95..dc6d389 100644
--- a/common/pipeline.cpp
+++ b/common/pipeline.cpp
@@ -24,7 +24,7 @@
24#include <QStandardPaths> 24#include <QStandardPaths>
25#include <QVector> 25#include <QVector>
26#include <QDebug> 26#include <QDebug>
27#include "entitybuffer_generated.h" 27#include "entity_generated.h"
28#include "metadata_generated.h" 28#include "metadata_generated.h"
29 29
30namespace Akonadi2 30namespace Akonadi2
@@ -76,33 +76,31 @@ void Pipeline::newEntity(const QByteArray &key, void *resourceBufferData, size_t
76{ 76{
77 const qint64 newRevision = storage().maxRevision() + 1; 77 const qint64 newRevision = storage().maxRevision() + 1;
78 78
79 flatbuffers::FlatBufferBuilder fbb;
80 auto builder = Akonadi2::EntityBufferBuilder(fbb);
81 79
80 std::vector<uint8_t> metadataData;
82 //Add metadata buffer 81 //Add metadata buffer
83 { 82 {
84 flatbuffers::FlatBufferBuilder metadataFbb; 83 flatbuffers::FlatBufferBuilder metadataFbb;
85 auto metadataBuilder = Akonadi2::MetadataBuilder(metadataFbb); 84 auto metadataBuilder = Akonadi2::MetadataBuilder(metadataFbb);
86 metadataBuilder.add_revision(newRevision); 85 metadataBuilder.add_revision(newRevision);
87 auto metadataBuffer = metadataBuilder.Finish(); 86 auto metadataBuffer = metadataBuilder.Finish();
88 Akonadi2::FinishMetadataBuffer(fbb, metadataBuffer); 87 Akonadi2::FinishMetadataBuffer(metadataFbb, metadataBuffer);
89 //TODO use memcpy 88 metadataData.resize(metadataFbb.GetSize());
90 auto metadata = fbb.CreateVector<uint8_t>(metadataFbb.GetBufferPointer(), metadataFbb.GetSize()); 89 std::copy_n(metadataFbb.GetBufferPointer(), metadataFbb.GetSize(), back_inserter(metadataData));
91 builder.add_metadata(metadata);
92 } 90 }
93 91
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 92
93 flatbuffers::FlatBufferBuilder fbb;
94 auto metadata = fbb.CreateVector<uint8_t>(metadataData.data(), metadataData.size());
95 auto resource = fbb.CreateVector<uint8_t>(static_cast<uint8_t*>(resourceBufferData), size);
96 auto builder = Akonadi2::EntityBuilder(fbb);
97 builder.add_metadata(metadata);
98 builder.add_resource(resource);
101 //We don't have a local buffer yet 99 //We don't have a local buffer yet
102 // builder.add_local(); 100 // builder.add_local();
103 101
104 auto buffer = builder.Finish(); 102 auto buffer = builder.Finish();
105 Akonadi2::FinishEntityBufferBuffer(fbb, buffer); 103 Akonadi2::FinishEntityBuffer(fbb, buffer);
106 104
107 qDebug() << "writing new entity" << key; 105 qDebug() << "writing new entity" << key;
108 storage().write(key.data(), key.size(), fbb.GetBufferPointer(), fbb.GetSize()); 106 storage().write(key.data(), key.size(), fbb.GetBufferPointer(), fbb.GetSize());
@@ -163,6 +161,9 @@ void Pipeline::pipelineCompleted(const PipelineState &state)
163 emit revisionUpdated(); 161 emit revisionUpdated();
164 } 162 }
165 scheduleStep(); 163 scheduleStep();
164 if (d->activePipelines.isEmpty()) {
165 emit pipelinesDrained();
166 }
166} 167}
167 168
168 169