diff options
Diffstat (limited to 'common/pipeline.cpp')
-rw-r--r-- | common/pipeline.cpp | 29 |
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 | ||
30 | namespace Akonadi2 | 30 | namespace 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 | ||