diff options
| author | Linus Jahn <lnj@kaidan.im> | 2022-08-16 21:00:15 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2023-01-03 22:05:54 +0100 |
| commit | b17284ee7d674416e0d11f1699f73fcc606262d4 (patch) | |
| tree | 86597f2bc2a1ed2d257e0cbf8e7de1ca54080c08 /src/client/QXmppMamManager.cpp | |
| parent | 3271c6642439d4d3c0d8c634e2b3f4cf17b908a0 (diff) | |
| download | qxmpp-b17284ee7d674416e0d11f1699f73fcc606262d4.tar.gz | |
Introduce QXmppTask & QXmppPromise
Closes #502.
Co-authored-by: Jonah BrĂ¼chert <jbb@kaidan.im>
Diffstat (limited to 'src/client/QXmppMamManager.cpp')
| -rw-r--r-- | src/client/QXmppMamManager.cpp | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/src/client/QXmppMamManager.cpp b/src/client/QXmppMamManager.cpp index 125e9a48..f173aa01 100644 --- a/src/client/QXmppMamManager.cpp +++ b/src/client/QXmppMamManager.cpp @@ -17,24 +17,21 @@ #include <unordered_map> #include <QDomElement> -#include <QFuture> -#include <QFutureInterface> using namespace QXmpp::Private; struct RetrieveRequestState { - QFutureInterface<QXmppMamManager::RetrieveResult> interface; + QXmppPromise<QXmppMamManager::RetrieveResult> promise; QXmppMamResultIq iq; QVector<QXmppMessage> messages; - void reportFinished() + void finish() { - interface.reportResult( + promise.finish( QXmppMamManager::RetrievedMessages { std::move(iq), std::move(messages) }); - interface.reportFinished(); } }; @@ -89,7 +86,6 @@ QStringList QXmppMamManager::discoveryFeatures() const bool QXmppMamManager::handleStanza(const QDomElement &element) { - if (element.tagName() == "message") { QDomElement resultElement = element.firstChildElement("result"); if (!resultElement.isNull() && resultElement.namespaceURI() == ns_mam) { @@ -241,14 +237,14 @@ QString QXmppMamManager::retrieveArchivedMessages(const QString &to, /// /// \since QXmpp 1.5 /// -QFuture<QXmppMamManager::RetrieveResult> QXmppMamManager::retrieveMessages(const QString &to, const QString &node, const QString &jid, const QDateTime &start, const QDateTime &end, const QXmppResultSetQuery &resultSetQuery) +QXmppTask<QXmppMamManager::RetrieveResult> QXmppMamManager::retrieveMessages(const QString &to, const QString &node, const QString &jid, const QDateTime &start, const QDateTime &end, const QXmppResultSetQuery &resultSetQuery) { auto queryIq = buildRequest(to, node, jid, start, end, resultSetQuery); auto [itr, _] = d->ongoingRequests.insert({ queryIq.queryId().toStdString(), RetrieveRequestState() }); // retrieve messages - await(client()->sendIq(std::move(queryIq)), this, [this, queryId = queryIq.queryId()](QXmppClient::IqResult result) { + client()->sendIq(std::move(queryIq)).then(this, [this, queryId = queryIq.queryId()](QXmppClient::IqResult result) { auto itr = d->ongoingRequests.find(queryId.toStdString()); if (itr == d->ongoingRequests.end()) { return; @@ -259,8 +255,7 @@ QFuture<QXmppMamManager::RetrieveResult> QXmppMamManager::retrieveMessages(const iq.parse(std::get<QDomElement>(result)); if (iq.type() == QXmppIq::Error) { - itr->second.interface.reportResult(QXmppError { iq.error().text(), iq.error() }); - itr->second.interface.reportFinished(); + itr->second.promise.finish(QXmppError { iq.error().text(), iq.error() }); d->ongoingRequests.erase(itr); return; } @@ -277,7 +272,7 @@ QFuture<QXmppMamManager::RetrieveResult> QXmppMamManager::retrieveMessages(const auto message = messages.at(i); (*running)++; - await(e2eeExt->decryptMessage(std::move(message)), this, [this, i, running, queryId](auto result) { + e2eeExt->decryptMessage(std::move(message)).then(this, [this, i, running, queryId](auto result) { (*running)--; auto itr = d->ongoingRequests.find(queryId.toStdString()); if (itr == d->ongoingRequests.end()) { @@ -290,21 +285,20 @@ QFuture<QXmppMamManager::RetrieveResult> QXmppMamManager::retrieveMessages(const warning(QStringLiteral("Error decrypting message.")); } if (*running == 0) { - itr->second.reportFinished(); + itr->second.finish(); d->ongoingRequests.erase(itr); } }); } } else { - itr->second.reportFinished(); + itr->second.finish(); d->ongoingRequests.erase(itr); } } else { - itr->second.interface.reportResult(std::get<QXmppError>(result)); - itr->second.interface.reportFinished(); + itr->second.promise.finish(std::get<QXmppError>(result)); d->ongoingRequests.erase(itr); } }); - return itr->second.interface.future(); + return itr->second.promise.task(); } |
