summaryrefslogtreecommitdiffstats
path: root/common/pipeline.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/pipeline.h')
-rw-r--r--common/pipeline.h19
1 files changed, 13 insertions, 6 deletions
diff --git a/common/pipeline.h b/common/pipeline.h
index 496e037..fee6a5e 100644
--- a/common/pipeline.h
+++ b/common/pipeline.h
@@ -115,7 +115,7 @@ public:
115 virtual ~Preprocessor(); 115 virtual ~Preprocessor();
116 116
117 //TODO pass actual command as well, for changerecording 117 //TODO pass actual command as well, for changerecording
118 virtual void process(const PipelineState &state, const Akonadi2::Entity &); 118 virtual void process(const PipelineState &state, Akonadi2::Storage::Transaction &transaction);
119 //TODO to record progress 119 //TODO to record progress
120 virtual QString id() const; 120 virtual QString id() const;
121 121
@@ -133,17 +133,24 @@ private:
133class AKONADI2COMMON_EXPORT SimpleProcessor : public Akonadi2::Preprocessor 133class AKONADI2COMMON_EXPORT SimpleProcessor : public Akonadi2::Preprocessor
134{ 134{
135public: 135public:
136 SimpleProcessor(const QString &id, const std::function<void(const Akonadi2::PipelineState &state, const Akonadi2::Entity &e)> &f) 136 SimpleProcessor(const QString &id, const std::function<void(const Akonadi2::PipelineState &state, const Akonadi2::Entity &e, Akonadi2::Storage::Transaction &transaction)> &f)
137 : Akonadi2::Preprocessor(), 137 : Akonadi2::Preprocessor(),
138 mFunction(f), 138 mFunction(f),
139 mId(id) 139 mId(id)
140 { 140 {
141 } 141 }
142 142
143 void process(const Akonadi2::PipelineState &state, const Akonadi2::Entity &e) Q_DECL_OVERRIDE 143 void process(const PipelineState &state, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE
144 { 144 {
145 mFunction(state, e); 145 transaction.scan(state.key(), [this, &state, &transaction](const QByteArray &key, const QByteArray &value) -> bool {
146 processingCompleted(state); 146 auto entity = Akonadi2::GetEntity(value);
147 mFunction(state, *entity, transaction);
148 processingCompleted(state);
149 return false;
150 }, [this, state](const Akonadi2::Storage::Error &error) {
151 ErrorMsg() << "Failed to find value in pipeline: " << error.message;
152 processingCompleted(state);
153 });
147 } 154 }
148 155
149 QString id() const 156 QString id() const
@@ -152,7 +159,7 @@ public:
152 } 159 }
153 160
154protected: 161protected:
155 std::function<void(const Akonadi2::PipelineState &state, const Akonadi2::Entity &e)> mFunction; 162 std::function<void(const Akonadi2::PipelineState &state, const Akonadi2::Entity &e, Akonadi2::Storage::Transaction &transaction)> mFunction;
156 QString mId; 163 QString mId;
157}; 164};
158 165