aboutsummaryrefslogtreecommitdiff
path: root/src/client/QXmppMamManager.cpp
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2022-08-16 21:00:15 +0200
committerLinus Jahn <lnj@kaidan.im>2023-01-03 22:05:54 +0100
commitb17284ee7d674416e0d11f1699f73fcc606262d4 (patch)
tree86597f2bc2a1ed2d257e0cbf8e7de1ca54080c08 /src/client/QXmppMamManager.cpp
parent3271c6642439d4d3c0d8c634e2b3f4cf17b908a0 (diff)
downloadqxmpp-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.cpp28
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();
}