summaryrefslogtreecommitdiffstats
path: root/common/resultprovider.h
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2015-11-30 11:09:31 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2015-11-30 11:09:31 +0100
commitb5648af02ea7246b41d24e242c5f94e43e43980e (patch)
tree141fa70a3336bde700b232e5d978b04c3eb8a887 /common/resultprovider.h
parentf715898a1b6781e2860727942ce510f324a23c71 (diff)
downloadsink-b5648af02ea7246b41d24e242c5f94e43e43980e.tar.gz
sink-b5648af02ea7246b41d24e242c5f94e43e43980e.zip
Provide status information about children fetch state
The fetch state is per parent.
Diffstat (limited to 'common/resultprovider.h')
-rw-r--r--common/resultprovider.h30
1 files changed, 21 insertions, 9 deletions
diff --git a/common/resultprovider.h b/common/resultprovider.h
index 6d7867a..d50f3f6 100644
--- a/common/resultprovider.h
+++ b/common/resultprovider.h
@@ -50,7 +50,7 @@ public:
50 virtual void add(const T &value) = 0; 50 virtual void add(const T &value) = 0;
51 virtual void modify(const T &value) = 0; 51 virtual void modify(const T &value) = 0;
52 virtual void remove(const T &value) = 0; 52 virtual void remove(const T &value) = 0;
53 virtual void initialResultSetComplete() = 0; 53 virtual void initialResultSetComplete(const T &parent) = 0;
54 virtual void complete() = 0; 54 virtual void complete() = 0;
55 virtual void clear() = 0; 55 virtual void clear() = 0;
56 virtual void setFetcher(const std::function<void(const T &parent)> &fetcher) = 0; 56 virtual void setFetcher(const std::function<void(const T &parent)> &fetcher) = 0;
@@ -144,9 +144,15 @@ public:
144 }); 144 });
145 } 145 }
146 146
147 void initialResultSetComplete() 147 void initialResultSetComplete(const T &parent)
148 { 148 {
149 callInMainThreadOnEmitter(&ResultEmitter<T>::initialResultSetComplete); 149 //Because I don't know how to use bind
150 auto weakEmitter = mResultEmitter;
151 callInMainThreadOnEmitter([weakEmitter, parent](){
152 if (auto strongRef = weakEmitter.toStrongRef()) {
153 strongRef->initialResultSetComplete(parent);
154 }
155 });
150 } 156 }
151 157
152 //Called from worker thread 158 //Called from worker thread
@@ -244,7 +250,7 @@ public:
244 removeHandler = handler; 250 removeHandler = handler;
245 } 251 }
246 252
247 void onInitialResultSetComplete(const std::function<void(void)> &handler) 253 void onInitialResultSetComplete(const std::function<void(const DomainType&)> &handler)
248 { 254 {
249 initialResultSetCompleteHandler = handler; 255 initialResultSetCompleteHandler = handler;
250 } 256 }
@@ -274,19 +280,25 @@ public:
274 removeHandler(value); 280 removeHandler(value);
275 } 281 }
276 282
277 void initialResultSetComplete() 283 void initialResultSetComplete(const DomainType &parent)
278 { 284 {
279 initialResultSetCompleteHandler(); 285 if (initialResultSetCompleteHandler) {
286 initialResultSetCompleteHandler(parent);
287 }
280 } 288 }
281 289
282 void complete() 290 void complete()
283 { 291 {
284 completeHandler(); 292 if (completeHandler) {
293 completeHandler();
294 }
285 } 295 }
286 296
287 void clear() 297 void clear()
288 { 298 {
289 clearHandler(); 299 if (clearHandler) {
300 clearHandler();
301 }
290 } 302 }
291 303
292 void setFetcher(const std::function<void(const DomainType &parent)> &fetcher) 304 void setFetcher(const std::function<void(const DomainType &parent)> &fetcher)
@@ -302,7 +314,7 @@ private:
302 std::function<void(const DomainType&)> addHandler; 314 std::function<void(const DomainType&)> addHandler;
303 std::function<void(const DomainType&)> modifyHandler; 315 std::function<void(const DomainType&)> modifyHandler;
304 std::function<void(const DomainType&)> removeHandler; 316 std::function<void(const DomainType&)> removeHandler;
305 std::function<void(void)> initialResultSetCompleteHandler; 317 std::function<void(const DomainType&)> initialResultSetCompleteHandler;
306 std::function<void(void)> completeHandler; 318 std::function<void(void)> completeHandler;
307 std::function<void(void)> clearHandler; 319 std::function<void(void)> clearHandler;
308 ThreadBoundary mThreadBoundary; 320 ThreadBoundary mThreadBoundary;