aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/base/QXmppFutureUtils_p.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/base/QXmppFutureUtils_p.h b/src/base/QXmppFutureUtils_p.h
index 531d52e3..720e6df4 100644
--- a/src/base/QXmppFutureUtils_p.h
+++ b/src/base/QXmppFutureUtils_p.h
@@ -82,6 +82,30 @@ inline QFuture<void> makeReadyFuture()
return QFutureInterface<void>(State(State::Started | State::Finished)).future();
}
+template<typename T, typename Handler>
+void await(const QFuture<T> &future, QObject *context, Handler handler)
+{
+ auto *watcher = new QFutureWatcher<T>(context);
+ QObject::connect(watcher, &QFutureWatcherBase::finished,
+ context, [watcher, handler { std::move(handler) }]() {
+ handler(watcher->result());
+ watcher->deleteLater();
+ });
+ watcher->setFuture(future);
+}
+
+template<typename Handler>
+void await(const QFuture<void> &future, QObject *context, Handler handler)
+{
+ auto *watcher = new QFutureWatcher<void>(context);
+ QObject::connect(watcher, &QFutureWatcherBase::finished,
+ context, [watcher, handler { std::move(handler) }]() {
+ handler();
+ watcher->deleteLater();
+ });
+ watcher->setFuture(future);
+}
+
template<typename Result, typename Input, typename Converter>
auto chain(QFuture<Input> &&source, QObject *context, Converter task) -> QFuture<Result>
{