aboutsummaryrefslogtreecommitdiff
path: root/src/omemo/QXmppOmemoManager_p.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/omemo/QXmppOmemoManager_p.cpp')
-rw-r--r--src/omemo/QXmppOmemoManager_p.cpp38
1 files changed, 21 insertions, 17 deletions
diff --git a/src/omemo/QXmppOmemoManager_p.cpp b/src/omemo/QXmppOmemoManager_p.cpp
index 01981fad..722211a8 100644
--- a/src/omemo/QXmppOmemoManager_p.cpp
+++ b/src/omemo/QXmppOmemoManager_p.cpp
@@ -3154,32 +3154,36 @@ QFuture<QXmppPubSubManager::Result> ManagerPrivate::subscribeToDeviceList(const
//
// \return the results of each unsubscribe request
//
-QFuture<Manager::DevicesResult> ManagerPrivate::unsubscribeFromDeviceLists(const QList<QString> &jids)
+QFuture<QVector<Manager::DevicesResult>> ManagerPrivate::unsubscribeFromDeviceLists(const QList<QString> &jids)
{
- QFutureInterface<Manager::DevicesResult> interface = (QFutureInterfaceBase::Started);
+ if (jids.isEmpty()) {
+ return makeReadyFuture(QVector<Manager::DevicesResult>());
+ }
- const auto jidsCount = jids.size();
- auto processedJidsCount = std::make_shared<int>(0);
+ struct State {
+ int processed = 0;
+ int jidsCount = 0;
+ QFutureInterface<QVector<Manager::DevicesResult>> interface;
+ QVector<Manager::DevicesResult> devicesResults;
+ };
- if (jidsCount == 0) {
- interface.reportFinished();
- }
+ auto state = std::make_shared<State>();
+ state->jidsCount = jids.count();
for (const auto &jid : jids) {
- auto future = unsubscribeFromDeviceList(jid);
- await(future, q, [=](QXmppPubSubManager::Result result) mutable {
- Manager::DevicesResult devicesResult;
- devicesResult.jid = jid;
- devicesResult.result = result;
- interface.reportResult(devicesResult);
-
- if (++(*processedJidsCount) == jidsCount) {
- interface.reportFinished();
+ await(unsubscribeFromDeviceList(jid), q, [jid, state](QXmppPubSubManager::Result result) mutable {
+ state->devicesResults << Manager::DevicesResult {
+ jid, result
+ };
+
+ if (++(state->processed) == state->jidsCount) {
+ state->interface.reportResult(state->devicesResults);
+ state->interface.reportFinished();
}
});
}
- return interface.future();
+ return state->interface.future();
}
//