From b17284ee7d674416e0d11f1699f73fcc606262d4 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Tue, 16 Aug 2022 21:00:15 +0200 Subject: Introduce QXmppTask & QXmppPromise MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #502. Co-authored-by: Jonah BrĂ¼chert --- src/client/QXmppAtmManager.cpp | 101 +++++++++--------- src/client/QXmppAtmManager.h | 18 ++-- src/client/QXmppAtmTrustMemoryStorage.cpp | 24 ++--- src/client/QXmppAtmTrustMemoryStorage.h | 12 +-- src/client/QXmppAtmTrustStorage.h | 12 ++- src/client/QXmppCarbonManagerV2.cpp | 2 +- src/client/QXmppClient.cpp | 75 ++++++------- src/client/QXmppClient.h | 14 +-- src/client/QXmppDiscoveryManager.cpp | 4 +- src/client/QXmppDiscoveryManager.h | 6 +- src/client/QXmppE2eeExtension.h | 10 +- src/client/QXmppEntityTimeManager.cpp | 2 +- src/client/QXmppEntityTimeManager.h | 4 +- src/client/QXmppHttpUploadManager.cpp | 14 +-- src/client/QXmppIqHandling.h | 6 +- src/client/QXmppMamManager.cpp | 28 ++--- src/client/QXmppMamManager.h | 14 +-- src/client/QXmppMessageReceiptManager.cpp | 1 + src/client/QXmppOutgoingClient.cpp | 3 +- src/client/QXmppOutgoingClient.h | 2 +- src/client/QXmppPep_p.h | 2 +- src/client/QXmppPubSubManager.cpp | 59 +++++------ src/client/QXmppPubSubManager.h | 169 +++++++++++++++--------------- src/client/QXmppRosterManager.cpp | 16 +-- src/client/QXmppRosterManager.h | 12 +-- src/client/QXmppTrustManager.cpp | 59 ++++++----- src/client/QXmppTrustManager.h | 37 +++---- src/client/QXmppTrustMemoryStorage.cpp | 72 ++++++------- src/client/QXmppTrustMemoryStorage.h | 42 ++++---- src/client/QXmppTrustStorage.h | 37 +++---- src/client/QXmppUploadRequestManager.cpp | 8 +- src/client/QXmppUploadRequestManager.h | 20 ++-- src/client/QXmppUserLocationManager.cpp | 4 +- src/client/QXmppUserLocationManager.h | 6 +- src/client/QXmppUserTuneManager.cpp | 4 +- src/client/QXmppUserTuneManager.h | 6 +- 36 files changed, 444 insertions(+), 461 deletions(-) (limited to 'src/client') diff --git a/src/client/QXmppAtmManager.cpp b/src/client/QXmppAtmManager.cpp index 0f97452a..e6df2679 100644 --- a/src/client/QXmppAtmManager.cpp +++ b/src/client/QXmppAtmManager.cpp @@ -77,12 +77,12 @@ QXmppAtmManager::QXmppAtmManager(QXmppAtmTrustStorage *trustStorage) /// \param keyIdsForAuthentication IDs of the keys being authenticated /// \param keyIdsForDistrusting IDs of the keys being distrusted /// -QFuture QXmppAtmManager::makeTrustDecisions(const QString &encryption, const QString &keyOwnerJid, const QList &keyIdsForAuthentication, const QList &keyIdsForDistrusting) +QXmppTask QXmppAtmManager::makeTrustDecisions(const QString &encryption, const QString &keyOwnerJid, const QList &keyIdsForAuthentication, const QList &keyIdsForDistrusting) { - QFutureInterface interface(QFutureInterfaceBase::Started); + QXmppPromise promise; auto future = keys(encryption, TrustLevel::Authenticated | TrustLevel::ManuallyDistrusted); - await(future, this, [=](QHash> keys) mutable { + future.then(this, [=](QHash> keys) mutable { const auto authenticatedKeys = keys.value(TrustLevel::Authenticated); const auto manuallyDistrustedKeys = keys.value(TrustLevel::ManuallyDistrusted); const auto ownJid = client()->configuration().jidBare(); @@ -110,7 +110,7 @@ QFuture QXmppAtmManager::makeTrustDecisions(const QString &encryption, con if (modifiedAuthenticatedKeys.isEmpty() && modifiedManuallyDistrustedKeys.isEmpty()) { // Skip further processing if there are no changes. - interface.reportFinished(); + promise.finish(); } else { keyOwner.setTrustedKeys(modifiedAuthenticatedKeys); keyOwner.setDistrustedKeys(modifiedManuallyDistrustedKeys); @@ -170,7 +170,7 @@ QFuture QXmppAtmManager::makeTrustDecisions(const QString &encryption, con } auto future = makeTrustDecisions(encryption, keysBeingAuthenticated, keysBeingDistrusted); - await(future, this, [=]() mutable { + future.then(this, [=]() mutable { // Send a trust message for all authenticated or distrusted // keys to the own endpoints whose keys have been // authenticated. @@ -212,7 +212,7 @@ QFuture QXmppAtmManager::makeTrustDecisions(const QString &encryption, con } } - interface.reportFinished(); + promise.finish(); }); } else { // Send a trust message for the keys of the contact's endpoints @@ -223,7 +223,7 @@ QFuture QXmppAtmManager::makeTrustDecisions(const QString &encryption, con } auto future = makeTrustDecisions(encryption, keysBeingAuthenticated, keysBeingDistrusted); - await(future, this, [=]() mutable { + future.then(this, [=]() mutable { // Send a trust message for own authenticated or distrusted // keys to the contact's endpoints whose keys have been // authenticated. @@ -233,13 +233,13 @@ QFuture QXmppAtmManager::makeTrustDecisions(const QString &encryption, con sendTrustMessage(encryption, { ownKeyOwner }, keyOwnerJid); } - interface.reportFinished(); + promise.finish(); }); } } }); - return interface.future(); + return promise.task(); } /// \cond @@ -264,19 +264,20 @@ void QXmppAtmManager::handleMessageReceived(const QXmppMessage &message) /// \param keyIdsForDistrusting key owners' bare JIDs mapped to the IDs of their /// keys being distrusted /// -QFuture QXmppAtmManager::makeTrustDecisions(const QString &encryption, const QMultiHash &keyIdsForAuthentication, const QMultiHash &keyIdsForDistrusting) +QXmppTask QXmppAtmManager::makeTrustDecisions(const QString &encryption, const QMultiHash &keyIdsForAuthentication, const QMultiHash &keyIdsForDistrusting) { - QFutureInterface interface(QFutureInterfaceBase::Started); + QXmppPromise promise; auto future = authenticate(encryption, keyIdsForAuthentication); - await(future, this, [=]() mutable { + + future.then(this, [=]() mutable { auto future = distrust(encryption, keyIdsForDistrusting); - await(future, this, [=]() mutable { - interface.reportFinished(); + future.then(this, [=]() mutable { + promise.finish(); }); }); - return interface.future(); + return promise.task(); } /// @@ -285,9 +286,9 @@ QFuture QXmppAtmManager::makeTrustDecisions(const QString &encryption, con /// /// \param message message that can contain a trust message element /// -QFuture QXmppAtmManager::handleMessage(const QXmppMessage &message) +QXmppTask QXmppAtmManager::handleMessage(const QXmppMessage &message) { - QFutureInterface interface(QFutureInterfaceBase::Started); + QXmppPromise promise; if (const auto trustMessageElement = message.trustMessageElement(); trustMessageElement && @@ -299,7 +300,7 @@ QFuture QXmppAtmManager::handleMessage(const QXmppMessage &message) const auto encryption = trustMessageElement->encryption(); auto future = trustLevel(encryption, senderJid, senderKey); - await(future, this, [=](const auto &&senderKeyTrustLevel) mutable { + future.then(this, [=](const auto &&senderKeyTrustLevel) mutable { const auto isSenderKeyAuthenticated = senderKeyTrustLevel == TrustLevel::Authenticated; // key owner JIDs mapped to key IDs @@ -345,10 +346,10 @@ QFuture QXmppAtmManager::handleMessage(const QXmppMessage &message) } auto future = trustStorage()->addKeysForPostponedTrustDecisions(encryption, senderKey, keyOwnersForPostponedTrustDecisions); - await(future, this, [=]() mutable { + future.then(this, [=]() mutable { auto future = makeTrustDecisions(encryption, keysBeingAuthenticated, keysBeingDistrusted); - await(future, this, [=]() mutable { - interface.reportFinished(); + future.then(this, [=]() mutable { + promise.finish(); }); }); }); @@ -357,10 +358,10 @@ QFuture QXmppAtmManager::handleMessage(const QXmppMessage &message) // 1. The message does not contain a trust message element. // 2. The trust message is sent by this endpoint and reflected via // Message Carbons. - interface.reportFinished(); + promise.finish(); } - return interface.future(); + return promise.task(); } /// @@ -369,36 +370,36 @@ QFuture QXmppAtmManager::handleMessage(const QXmppMessage &message) /// \param encryption encryption protocol namespace /// \param keyIds key owners' bare JIDs mapped to the IDs of their keys /// -QFuture QXmppAtmManager::authenticate(const QString &encryption, const QMultiHash &keyIds) +QXmppTask QXmppAtmManager::authenticate(const QString &encryption, const QMultiHash &keyIds) { if (keyIds.isEmpty()) { - return makeReadyFuture(); + return makeReadyTask(); } - QFutureInterface interface(QFutureInterfaceBase::Started); + QXmppPromise promise; auto future = setTrustLevel(encryption, keyIds, TrustLevel::Authenticated); - await(future, this, [=]() mutable { + future.then(this, [=]() mutable { auto future = securityPolicy(encryption); - await(future, this, [=](auto securityPolicy) mutable { + future.then(this, [=](auto securityPolicy) mutable { if (securityPolicy == Toakafa) { auto future = distrustAutomaticallyTrustedKeys(encryption, keyIds.uniqueKeys()); - await(future, this, [=]() mutable { + future.then(this, [=]() mutable { auto future = makePostponedTrustDecisions(encryption, keyIds.values()); - await(future, this, [=]() mutable { - interface.reportFinished(); + future.then(this, [=]() mutable { + promise.finish(); }); }); } else { auto future = makePostponedTrustDecisions(encryption, keyIds.values()); - await(future, this, [=]() mutable { - interface.reportFinished(); + future.then(this, [=]() mutable { + promise.finish(); }); } }); }); - return interface.future(); + return promise.task(); } /// @@ -407,23 +408,23 @@ QFuture QXmppAtmManager::authenticate(const QString &encryption, const QMu /// \param encryption encryption protocol namespace /// \param keyIds key owners' bare JIDs mapped to the IDs of their keys /// -QFuture QXmppAtmManager::distrust(const QString &encryption, const QMultiHash &keyIds) +QXmppTask QXmppAtmManager::distrust(const QString &encryption, const QMultiHash &keyIds) { if (keyIds.isEmpty()) { - return makeReadyFuture(); + return makeReadyTask(); } - QFutureInterface interface(QFutureInterfaceBase::Started); + QXmppPromise promise; auto future = setTrustLevel(encryption, keyIds, TrustLevel::ManuallyDistrusted); - await(future, this, [=]() mutable { + future.then(this, [=]() mutable { auto future = trustStorage()->removeKeysForPostponedTrustDecisions(encryption, keyIds.values()); - await(future, this, [=]() mutable { - interface.reportFinished(); + future.then(this, [=]() mutable { + promise.finish(); }); }); - return interface.future(); + return promise.task(); } /// @@ -433,7 +434,7 @@ QFuture QXmppAtmManager::distrust(const QString &encryption, const QMultiH /// \param encryption encryption protocol namespace /// \param keyOwnerJids bare JIDs of the key owners /// -QFuture QXmppAtmManager::distrustAutomaticallyTrustedKeys(const QString &encryption, const QList &keyOwnerJids) +QXmppTask QXmppAtmManager::distrustAutomaticallyTrustedKeys(const QString &encryption, const QList &keyOwnerJids) { return setTrustLevel(encryption, keyOwnerJids, TrustLevel::AutomaticallyTrusted, TrustLevel::AutomaticallyDistrusted); } @@ -448,26 +449,26 @@ QFuture QXmppAtmManager::distrustAutomaticallyTrustedKeys(const QString &e /// \param encryption encryption protocol namespace /// \param senderKeyIds IDs of the keys that were used by the senders /// -QFuture QXmppAtmManager::makePostponedTrustDecisions(const QString &encryption, const QList &senderKeyIds) +QXmppTask QXmppAtmManager::makePostponedTrustDecisions(const QString &encryption, const QList &senderKeyIds) { - QFutureInterface interface(QFutureInterfaceBase::Started); + QXmppPromise promise; auto future = trustStorage()->keysForPostponedTrustDecisions(encryption, senderKeyIds); - await(future, this, [=](const QHash> &&keysForPostponedTrustDecisions) mutable { + future.then(this, [=](const QHash> &&keysForPostponedTrustDecisions) mutable { // JIDs of key owners mapped to the IDs of their keys const auto keysBeingAuthenticated = keysForPostponedTrustDecisions.value(true); const auto keysBeingDistrusted = keysForPostponedTrustDecisions.value(false); auto future = trustStorage()->removeKeysForPostponedTrustDecisions(encryption, keysBeingAuthenticated.values(), keysBeingDistrusted.values()); - await(future, this, [=]() mutable { + future.then(this, [=]() mutable { auto future = makeTrustDecisions(encryption, keysBeingAuthenticated, keysBeingDistrusted); - await(future, this, [=]() mutable { - interface.reportFinished(); + future.then(this, [=]() mutable { + promise.finish(); }); }); }); - return interface.future(); + return promise.task(); } /// @@ -477,7 +478,7 @@ QFuture QXmppAtmManager::makePostponedTrustDecisions(const QString &encryp /// \param keyOwners key owners containing the data for authentication or distrusting /// \param recipientJid JID of the recipient /// -QFuture QXmppAtmManager::sendTrustMessage(const QString &encryption, const QList &keyOwners, const QString &recipientJid) +QXmppTask QXmppAtmManager::sendTrustMessage(const QString &encryption, const QList &keyOwners, const QString &recipientJid) { QXmppTrustMessageElement trustMessageElement; trustMessageElement.setUsage(ns_atm); diff --git a/src/client/QXmppAtmManager.h b/src/client/QXmppAtmManager.h index 9a0ab446..f1630ba4 100644 --- a/src/client/QXmppAtmManager.h +++ b/src/client/QXmppAtmManager.h @@ -11,6 +11,8 @@ class QXmppMessage; class QXmppTrustMessageKeyOwner; +template +class QXmppTask; class QXMPP_EXPORT QXmppAtmManager : public QXmppTrustManager { @@ -18,7 +20,7 @@ class QXMPP_EXPORT QXmppAtmManager : public QXmppTrustManager public: QXmppAtmManager(QXmppAtmTrustStorage *trustStorage); - QFuture makeTrustDecisions(const QString &encryption, const QString &keyOwnerJid, const QList &keyIdsForAuthentication, const QList &keyIdsForDistrusting = {}); + QXmppTask makeTrustDecisions(const QString &encryption, const QString &keyOwnerJid, const QList &keyIdsForAuthentication, const QList &keyIdsForDistrusting = {}); protected: /// \cond @@ -28,16 +30,16 @@ private: Q_SLOT void handleMessageReceived(const QXmppMessage &message); /// \endcond - QFuture makeTrustDecisions(const QString &encryption, const QMultiHash &keyIdsForAuthentication, const QMultiHash &keyIdsForDistrusting); - QFuture handleMessage(const QXmppMessage &message); + QXmppTask makeTrustDecisions(const QString &encryption, const QMultiHash &keyIdsForAuthentication, const QMultiHash &keyIdsForDistrusting); + QXmppTask handleMessage(const QXmppMessage &message); - QFuture authenticate(const QString &encryption, const QMultiHash &keyIds); - QFuture distrust(const QString &encryption, const QMultiHash &keyIds); + QXmppTask authenticate(const QString &encryption, const QMultiHash &keyIds); + QXmppTask distrust(const QString &encryption, const QMultiHash &keyIds); - QFuture distrustAutomaticallyTrustedKeys(const QString &encryption, const QList &keyOwnerJids); - QFuture makePostponedTrustDecisions(const QString &encryption, const QList &senderKeyIds); + QXmppTask distrustAutomaticallyTrustedKeys(const QString &encryption, const QList &keyOwnerJids); + QXmppTask makePostponedTrustDecisions(const QString &encryption, const QList &senderKeyIds); - QFuture sendTrustMessage(const QString &encryption, const QList &keyOwners, const QString &recipientJid); + QXmppTask sendTrustMessage(const QString &encryption, const QList &keyOwners, const QString &recipientJid); /// \cond inline QXmppAtmTrustStorage *trustStorage() const diff --git a/src/client/QXmppAtmTrustMemoryStorage.cpp b/src/client/QXmppAtmTrustMemoryStorage.cpp index eb8fe4df..04c8c747 100644 --- a/src/client/QXmppAtmTrustMemoryStorage.cpp +++ b/src/client/QXmppAtmTrustMemoryStorage.cpp @@ -49,7 +49,7 @@ QXmppAtmTrustMemoryStorage::QXmppAtmTrustMemoryStorage() QXmppAtmTrustMemoryStorage::~QXmppAtmTrustMemoryStorage() = default; /// \cond -QFuture QXmppAtmTrustMemoryStorage::addKeysForPostponedTrustDecisions(const QString &encryption, const QByteArray &senderKeyId, const QList &keyOwners) +QXmppTask QXmppAtmTrustMemoryStorage::addKeysForPostponedTrustDecisions(const QString &encryption, const QByteArray &senderKeyId, const QList &keyOwners) { const auto addKeys = [&](const QXmppTrustMessageKeyOwner &keyOwner, bool trust, const QList &keyIds) { for (const auto &keyId : keyIds) { @@ -85,10 +85,10 @@ QFuture QXmppAtmTrustMemoryStorage::addKeysForPostponedTrustDecisions(cons addKeys(keyOwner, false, keyOwner.distrustedKeys()); } - return makeReadyFuture(); + return makeReadyTask(); } -QFuture QXmppAtmTrustMemoryStorage::removeKeysForPostponedTrustDecisions(const QString &encryption, const QList &keyIdsForAuthentication, const QList &keyIdsForDistrusting) +QXmppTask QXmppAtmTrustMemoryStorage::removeKeysForPostponedTrustDecisions(const QString &encryption, const QList &keyIdsForAuthentication, const QList &keyIdsForDistrusting) { for (auto itr = d->keys.find(encryption); itr != d->keys.end() && itr.key() == encryption;) { @@ -101,10 +101,10 @@ QFuture QXmppAtmTrustMemoryStorage::removeKeysForPostponedTrustDecisions(c } } - return makeReadyFuture(); + return makeReadyTask(); } -QFuture QXmppAtmTrustMemoryStorage::removeKeysForPostponedTrustDecisions(const QString &encryption, const QList &senderKeyIds) +QXmppTask QXmppAtmTrustMemoryStorage::removeKeysForPostponedTrustDecisions(const QString &encryption, const QList &senderKeyIds) { for (auto itr = d->keys.find(encryption); itr != d->keys.end() && itr.key() == encryption;) { @@ -115,16 +115,16 @@ QFuture QXmppAtmTrustMemoryStorage::removeKeysForPostponedTrustDecisions(c } } - return makeReadyFuture(); + return makeReadyTask(); } -QFuture QXmppAtmTrustMemoryStorage::removeKeysForPostponedTrustDecisions(const QString &encryption) +QXmppTask QXmppAtmTrustMemoryStorage::removeKeysForPostponedTrustDecisions(const QString &encryption) { d->keys.remove(encryption); - return makeReadyFuture(); + return makeReadyTask(); } -QFuture>> QXmppAtmTrustMemoryStorage::keysForPostponedTrustDecisions(const QString &encryption, const QList &senderKeyIds) +QXmppTask>> QXmppAtmTrustMemoryStorage::keysForPostponedTrustDecisions(const QString &encryption, const QList &senderKeyIds) { QHash> keys; @@ -135,13 +135,13 @@ QFuture>> QXmppAtmTrustMemoryStorage } } - return makeReadyFuture(std::move(keys)); + return makeReadyTask(std::move(keys)); } -QFuture QXmppAtmTrustMemoryStorage::resetAll(const QString &encryption) +QXmppTask QXmppAtmTrustMemoryStorage::resetAll(const QString &encryption) { QXmppTrustMemoryStorage::resetAll(encryption); d->keys.remove(encryption); - return makeReadyFuture(); + return makeReadyTask(); } /// \endcond diff --git a/src/client/QXmppAtmTrustMemoryStorage.h b/src/client/QXmppAtmTrustMemoryStorage.h index 9d309e2a..cb1a481b 100644 --- a/src/client/QXmppAtmTrustMemoryStorage.h +++ b/src/client/QXmppAtmTrustMemoryStorage.h @@ -17,13 +17,13 @@ public: ~QXmppAtmTrustMemoryStorage(); /// \cond - QFuture addKeysForPostponedTrustDecisions(const QString &encryption, const QByteArray &senderKeyId, const QList &keyOwners) override; - QFuture removeKeysForPostponedTrustDecisions(const QString &encryption, const QList &keyIdsForAuthentication, const QList &keyIdsForDistrusting) override; - QFuture removeKeysForPostponedTrustDecisions(const QString &encryption, const QList &senderKeyIds) override; - QFuture removeKeysForPostponedTrustDecisions(const QString &encryption) override; - QFuture>> keysForPostponedTrustDecisions(const QString &encryption, const QList &senderKeyIds = {}) override; + QXmppTask addKeysForPostponedTrustDecisions(const QString &encryption, const QByteArray &senderKeyId, const QList &keyOwners) override; + QXmppTask removeKeysForPostponedTrustDecisions(const QString &encryption, const QList &keyIdsForAuthentication, const QList &keyIdsForDistrusting) override; + QXmppTask removeKeysForPostponedTrustDecisions(const QString &encryption, const QList &senderKeyIds) override; + QXmppTask removeKeysForPostponedTrustDecisions(const QString &encryption) override; + QXmppTask>> keysForPostponedTrustDecisions(const QString &encryption, const QList &senderKeyIds = {}) override; - QFuture resetAll(const QString &encryption) override; + QXmppTask resetAll(const QString &encryption) override; /// \endcond private: diff --git a/src/client/QXmppAtmTrustStorage.h b/src/client/QXmppAtmTrustStorage.h index e801c7df..f2618e94 100644 --- a/src/client/QXmppAtmTrustStorage.h +++ b/src/client/QXmppAtmTrustStorage.h @@ -7,6 +7,8 @@ #include "QXmppTrustStorage.h" +#include + class QXmppTrustMessageKeyOwner; class QXMPP_EXPORT QXmppAtmTrustStorage : virtual public QXmppTrustStorage @@ -14,11 +16,11 @@ class QXMPP_EXPORT QXmppAtmTrustStorage : virtual public QXmppTrustStorage public: virtual ~QXmppAtmTrustStorage() = default; - virtual QFuture addKeysForPostponedTrustDecisions(const QString &encryption, const QByteArray &senderKeyId, const QList &keyOwners) = 0; - virtual QFuture removeKeysForPostponedTrustDecisions(const QString &encryption, const QList &keyIdsForAuthentication, const QList &keyIdsForDistrusting) = 0; - virtual QFuture removeKeysForPostponedTrustDecisions(const QString &encryption, const QList &senderKeyIds) = 0; - virtual QFuture removeKeysForPostponedTrustDecisions(const QString &encryption) = 0; - virtual QFuture>> keysForPostponedTrustDecisions(const QString &encryption, const QList &senderKeyIds = {}) = 0; + virtual QXmppTask addKeysForPostponedTrustDecisions(const QString &encryption, const QByteArray &senderKeyId, const QList &keyOwners) = 0; + virtual QXmppTask removeKeysForPostponedTrustDecisions(const QString &encryption, const QList &keyIdsForAuthentication, const QList &keyIdsForDistrusting) = 0; + virtual QXmppTask removeKeysForPostponedTrustDecisions(const QString &encryption, const QList &senderKeyIds) = 0; + virtual QXmppTask removeKeysForPostponedTrustDecisions(const QString &encryption) = 0; + virtual QXmppTask>> keysForPostponedTrustDecisions(const QString &encryption, const QList &senderKeyIds = {}) = 0; }; #endif // QXMPPATMTRUSTSTORAGE_H diff --git a/src/client/QXmppCarbonManagerV2.cpp b/src/client/QXmppCarbonManagerV2.cpp index 1c3a6fcc..0f48370e 100644 --- a/src/client/QXmppCarbonManagerV2.cpp +++ b/src/client/QXmppCarbonManagerV2.cpp @@ -163,7 +163,7 @@ void QXmppCarbonManagerV2::enableCarbons() return; } - await(client()->sendIq(CarbonEnableIq()), this, [this](QXmppClient::IqResult domResult) { + client()->sendIq(CarbonEnableIq()).then(this, [this](QXmppClient::IqResult domResult) { if (auto err = parseIq(std::move(domResult))) { warning("Could not enable message carbons: " % err->description); } else { diff --git a/src/client/QXmppClient.cpp b/src/client/QXmppClient.cpp index c0d7ee42..891de237 100644 --- a/src/client/QXmppClient.cpp +++ b/src/client/QXmppClient.cpp @@ -18,14 +18,15 @@ #include "QXmppMessageHandler.h" #include "QXmppOutgoingClient.h" #include "QXmppPacket_p.h" +#include "QXmppPromise.h" #include "QXmppRosterManager.h" +#include "QXmppTask.h" #include "QXmppTlsManager_p.h" #include "QXmppUtils.h" #include "QXmppVCardManager.h" #include "QXmppVersionManager.h" #include -#include #include #include @@ -394,7 +395,7 @@ bool QXmppClient::sendPacket(const QXmppNonza &packet) } /// -/// Sends a packet and reports the result via QFuture. +/// Sends a packet and reports the result via QXmppTask. /// /// If stream management is enabled, the future continues to be active until the /// server acknowledges the packet. On success, QXmpp::SendSuccess with @@ -405,29 +406,26 @@ bool QXmppClient::sendPacket(const QXmppNonza &packet) /// /// \warning THIS API IS NOT FINALIZED YET! /// -/// \returns A QFuture that makes it possible to track the state of the packet. -/// You can use QFutureWatcher in Qt 5 and QFuture::then() in Qt 6 to handle the -/// results. +/// \returns A QXmppTask that makes it possible to track the state of the packet. /// /// \since QXmpp 1.5 /// -QFuture QXmppClient::send(QXmppStanza &&stanza, const std::optional ¶ms) +QXmppTask QXmppClient::send(QXmppStanza &&stanza, const std::optional ¶ms) { - const auto sendEncrypted = [this](QFuture &&future) { - QFutureInterface interface(QFutureInterfaceBase::Started); - - await(future, this, [this, interface](MessageEncryptResult &&result) mutable { + const auto sendEncrypted = [this](QXmppTask &&future) { + QXmppPromise interface; + future.then(this, [this, interface](MessageEncryptResult &&result) mutable { if (const auto *xml = std::get_if(&result)) { auto future = d->stream->send(QXmppPacket(*xml, true, interface)); - await(future, this, [interface](QXmpp::SendResult &&result) mutable { - reportFinishedResult(interface, result); + future.then(this, [interface](QXmpp::SendResult &&result) mutable { + interface.finish(std::move(result)); }); } else { - reportFinishedResult(interface, { std::get(result) }); + interface.finish(std::get(std::move(result))); } }); - return interface.future(); + return interface.task(); }; if (d->encryptionExtension) { @@ -452,13 +450,11 @@ QFuture QXmppClient::send(QXmppStanza &&stanza, const std::op /// /// \warning THIS API IS NOT FINALIZED YET! /// -/// \returns A QFuture that makes it possible to track the state of the packet. -/// You can use QFutureWatcher in Qt 5 and QFuture::then() in Qt 6 to handle the -/// results. +/// \returns A QXmppTask that makes it possible to track the state of the packet. /// /// \since QXmpp 1.5 /// -QFuture QXmppClient::sendUnencrypted(QXmppStanza &&stanza, const std::optional &) +QXmppTask QXmppClient::sendUnencrypted(QXmppStanza &&stanza, const std::optional &) { return d->stream->send(stanza); } @@ -472,7 +468,7 @@ QFuture QXmppClient::sendUnencrypted(QXmppStanza &&stanza, co /// /// \since QXmpp 1.5 /// -QFuture QXmppClient::reply(QXmppStanza &&stanza, const std::optional &e2eeMetadata, const std::optional ¶ms) +QXmppTask QXmppClient::reply(QXmppStanza &&stanza, const std::optional &e2eeMetadata, const std::optional ¶ms) { // This should pick the right e2ee manager as soon as multiple encryptions // in parallel are supported. @@ -497,7 +493,7 @@ QFuture QXmppClient::reply(QXmppStanza &&stanza, const std::o /// /// \since QXmpp 1.5 /// -QFuture QXmppClient::sendIq(QXmppIq &&iq, const std::optional &) +QXmppTask QXmppClient::sendIq(QXmppIq &&iq, const std::optional &) { return d->stream->sendIq(std::move(iq)); } @@ -515,57 +511,52 @@ QFuture QXmppClient::sendIq(QXmppIq &&iq, const std::opti /// /// \since QXmpp 1.5 /// -QFuture QXmppClient::sendSensitiveIq(QXmppIq &&iq, const std::optional ¶ms) +QXmppTask QXmppClient::sendSensitiveIq(QXmppIq &&iq, const std::optional ¶ms) { - const auto sendEncrypted = [this](QFuture &&future, const QString &id, const QString &to) { - QFutureInterface interface(QFutureInterfaceBase::Started); - await(future, this, [this, interface, id, to](IqEncryptResult result) mutable { + const auto sendEncrypted = [this](QXmppTask &&future, const QString &id, const QString &to) { + QXmppPromise interface; + future.then(this, [this, interface, id, to](IqEncryptResult result) mutable { if (const auto *xml = std::get_if(&result)) { // encrypted successfully auto future = d->stream->QXmppStream::sendIq(QXmppPacket(*xml, true), id, to); - await(future, this, [this, interface](QXmppStream::IqResult result) mutable { + future.then(this, [this, interface](QXmppStream::IqResult result) mutable { if (const auto encryptedDom = std::get_if(&result)) { if (!isIqResponse(*encryptedDom)) { QXmppError err { QStringLiteral("Invalid IQ response received."), QXmpp::SendError::EncryptionError }; - interface.reportResult(err); - interface.reportFinished(); + interface.finish(std::move(err)); } else if (d->encryptionExtension) { // try to decrypt the result (should be encrypted) auto future = d->encryptionExtension->decryptIq(*encryptedDom); - await(future, this, [interface, encryptedDom = *encryptedDom](IqDecryptResult result) mutable { - if (const auto dom = std::get_if(&result)) { + future.then(this, [interface, encryptedDom = *encryptedDom](IqDecryptResult result) mutable { + if (auto dom = std::get_if(&result)) { // decrypted result - interface.reportResult(*dom); + interface.finish(std::move(*dom)); } else if (std::holds_alternative(result)) { // the IQ response from the other entity was not encrypted // then report IQ response without modifications - interface.reportResult(encryptedDom); - } else if (const auto error = std::get_if(&result)) { - interface.reportResult(*error); + interface.finish(std::move(encryptedDom)); + } else if (auto error = std::get_if(&result)) { + interface.finish(std::move(*error)); } - interface.reportFinished(); }); } else { - interface.reportResult(QXmppError { + interface.finish(QXmppError { QStringLiteral("No decryption extension found."), QXmpp::SendError::EncryptionError }); - interface.reportFinished(); } } else { - interface.reportResult(std::get(result)); - interface.reportFinished(); + interface.finish(std::get(result)); } }); } else { - interface.reportResult(std::get(result)); - interface.reportFinished(); + interface.finish(std::get(result)); } }); - return interface.future(); + return interface.task(); }; if (iq.id().isEmpty() || d->stream->hasIqId(iq.id())) { @@ -595,7 +586,7 @@ QFuture QXmppClient::sendSensitiveIq(QXmppIq &&iq, const /// /// \since QXmpp 1.5 /// -QFuture QXmppClient::sendGenericIq(QXmppIq &&iq, const std::optional &) +QXmppTask QXmppClient::sendGenericIq(QXmppIq &&iq, const std::optional &) { return chainIq(sendIq(std::move(iq)), this, [](const QXmppIq &) -> EmptyResult { return QXmpp::Success(); diff --git a/src/client/QXmppClient.h b/src/client/QXmppClient.h index e99937cb..5cef5fe3 100644 --- a/src/client/QXmppClient.h +++ b/src/client/QXmppClient.h @@ -19,7 +19,7 @@ #include template -class QFuture; +class QXmppTask; class QXmppE2eeExtension; class QXmppClientExtension; @@ -219,12 +219,12 @@ public: State state() const; QXmppStanza::Error::Condition xmppStreamError(); - QFuture send(QXmppStanza &&, const std::optional & = {}); - QFuture sendUnencrypted(QXmppStanza &&, const std::optional & = {}); - QFuture reply(QXmppStanza &&stanza, const std::optional &e2eeMetadata, const std::optional & = {}); - QFuture sendIq(QXmppIq &&, const std::optional & = {}); - QFuture sendSensitiveIq(QXmppIq &&, const std::optional & = {}); - QFuture sendGenericIq(QXmppIq &&, const std::optional & = {}); + QXmppTask send(QXmppStanza &&, const std::optional & = {}); + QXmppTask sendUnencrypted(QXmppStanza &&, const std::optional & = {}); + QXmppTask reply(QXmppStanza &&stanza, const std::optional &e2eeMetadata, const std::optional & = {}); + QXmppTask sendIq(QXmppIq &&, const std::optional & = {}); + QXmppTask sendSensitiveIq(QXmppIq &&, const std::optional & = {}); + QXmppTask sendGenericIq(QXmppIq &&, const std::optional & = {}); #if QXMPP_DEPRECATED_SINCE(1, 1) QT_DEPRECATED_X("Use QXmppClient::findExtension() instead") diff --git a/src/client/QXmppDiscoveryManager.cpp b/src/client/QXmppDiscoveryManager.cpp index bdea6ede..2a104100 100644 --- a/src/client/QXmppDiscoveryManager.cpp +++ b/src/client/QXmppDiscoveryManager.cpp @@ -117,7 +117,7 @@ QString QXmppDiscoveryManager::requestItems(const QString &jid, const QString &n /// /// \since QXmpp 1.5 /// -QFuture QXmppDiscoveryManager::requestDiscoInfo(const QString &jid, const QString &node) +QXmppTask QXmppDiscoveryManager::requestDiscoInfo(const QString &jid, const QString &node) { QXmppDiscoveryIq request; request.setType(QXmppIq::Get); @@ -140,7 +140,7 @@ QFuture QXmppDiscoveryManager::requestDiscoIn /// /// \since QXmpp 1.5 /// -QFuture QXmppDiscoveryManager::requestDiscoItems(const QString &jid, const QString &node) +QXmppTask QXmppDiscoveryManager::requestDiscoItems(const QString &jid, const QString &node) { QXmppDiscoveryIq request; request.setType(QXmppIq::Get); diff --git a/src/client/QXmppDiscoveryManager.h b/src/client/QXmppDiscoveryManager.h index bf18619e..56f6dfc4 100644 --- a/src/client/QXmppDiscoveryManager.h +++ b/src/client/QXmppDiscoveryManager.h @@ -10,7 +10,7 @@ #include template -class QFuture; +class QXmppTask; class QXmppDataForm; class QXmppDiscoveryIq; class QXmppDiscoveryManagerPrivate; @@ -35,8 +35,8 @@ public: using InfoResult = std::variant; using ItemsResult = std::variant, QXmppStanza::Error>; - QFuture requestDiscoInfo(const QString &jid, const QString &node = {}); - QFuture requestDiscoItems(const QString &jid, const QString &node = {}); + QXmppTask requestDiscoInfo(const QString &jid, const QString &node = {}); + QXmppTask requestDiscoItems(const QString &jid, const QString &node = {}); QString clientCapabilitiesNode() const; void setClientCapabilitiesNode(const QString &); diff --git a/src/client/QXmppE2eeExtension.h b/src/client/QXmppE2eeExtension.h index f65fec45..af4afdde 100644 --- a/src/client/QXmppE2eeExtension.h +++ b/src/client/QXmppE2eeExtension.h @@ -16,7 +16,7 @@ class QDomElement; class QXmppMessage; class QXmppIq; template -class QFuture; +class QXmppTask; class QXmppE2eeExtension : public QXmppExtension { @@ -30,10 +30,10 @@ public: using IqEncryptResult = std::variant; using IqDecryptResult = std::variant; - virtual QFuture encryptMessage(QXmppMessage &&, const std::optional &) = 0; - virtual QFuture decryptMessage(QXmppMessage &&) = 0; - virtual QFuture encryptIq(QXmppIq &&, const std::optional &) = 0; - virtual QFuture decryptIq(const QDomElement &) = 0; + virtual QXmppTask encryptMessage(QXmppMessage &&, const std::optional &) = 0; + virtual QXmppTask decryptMessage(QXmppMessage &&) = 0; + virtual QXmppTask encryptIq(QXmppIq &&, const std::optional &) = 0; + virtual QXmppTask decryptIq(const QDomElement &) = 0; virtual bool isEncrypted(const QDomElement &) = 0; virtual bool isEncrypted(const QXmppMessage &) = 0; }; diff --git a/src/client/QXmppEntityTimeManager.cpp b/src/client/QXmppEntityTimeManager.cpp index eb88fc0f..08089139 100644 --- a/src/client/QXmppEntityTimeManager.cpp +++ b/src/client/QXmppEntityTimeManager.cpp @@ -55,7 +55,7 @@ QString QXmppEntityTimeManager::requestTime(const QString &jid) /// /// \since QXmpp 1.5 /// -auto QXmppEntityTimeManager::requestEntityTime(const QString &jid) -> QFuture +auto QXmppEntityTimeManager::requestEntityTime(const QString &jid) -> QXmppTask { QXmppEntityTimeIq iq; iq.setType(QXmppIq::Get); diff --git a/src/client/QXmppEntityTimeManager.h b/src/client/QXmppEntityTimeManager.h index a807caad..81c6fb45 100644 --- a/src/client/QXmppEntityTimeManager.h +++ b/src/client/QXmppEntityTimeManager.h @@ -10,7 +10,7 @@ #include template -class QFuture; +class QXmppTask; class QXmppEntityTimeIq; /// @@ -27,7 +27,7 @@ public: QString requestTime(const QString &jid); using EntityTimeResult = std::variant; - QFuture requestEntityTime(const QString &jid); + QXmppTask requestEntityTime(const QString &jid); /// \cond QStringList discoveryFeatures() const override; diff --git a/src/client/QXmppHttpUploadManager.cpp b/src/client/QXmppHttpUploadManager.cpp index 2fe2994e..35eedf80 100644 --- a/src/client/QXmppHttpUploadManager.cpp +++ b/src/client/QXmppHttpUploadManager.cpp @@ -5,8 +5,8 @@ #include "QXmppHttpUploadManager.h" #include "QXmppClient.h" -#include "QXmppFutureUtils_p.h" #include "QXmppHttpUploadIq.h" +#include "QXmppTask.h" #include "QXmppUploadRequestManager.h" #include "QXmppUtils_p.h" @@ -299,11 +299,8 @@ std::shared_ptr QXmppHttpUploadManager::uploadFile(std::unique_ } auto future = client()->findExtension()->requestSlot(filename, fileSize, mimeType, uploadServiceJid); -#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) - await(future, this, [this, upload, data = std::move(data)](SlotResult result) mutable { -#else - await(future, this, [this, upload, rawSourceDevice = data.release()](SlotResult result) mutable { -#endif + // TODO: rawSourceDevice: could this lead to a memory leak if the "then lambda" is never executed? + future.then(this, [this, upload, rawSourceDevice = data.release()](SlotResult result) mutable { // first check whether upload was cancelled in the meantime if (upload->d->cancelled) { upload->d->reportFinished(); @@ -331,11 +328,6 @@ std::shared_ptr QXmppHttpUploadManager::uploadFile(std::unique_ request.setRawHeader(itr.key().toUtf8(), itr.value().toUtf8()); } -#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) - auto *rawSourceDevice = data.release(); -#else - // already defined in lambda capture -#endif auto *reply = d->netManager->put(request, rawSourceDevice); rawSourceDevice->setParent(reply); upload->d->reply = reply; diff --git a/src/client/QXmppIqHandling.h b/src/client/QXmppIqHandling.h index e7db2b5d..530e214b 100644 --- a/src/client/QXmppIqHandling.h +++ b/src/client/QXmppIqHandling.h @@ -53,7 +53,7 @@ namespace Private { const QString &requestId, const QString &requestFrom, const std::optional &e2eeMetadata, - QFuture future) + QXmppTask future) { Private::await(future, client, [client, requestId, requestFrom, e2eeMetadata](T result) { processHandleIqResult(client, requestId, requestFrom, e2eeMetadata, result); @@ -162,7 +162,7 @@ namespace Private { /// The return type of the handler function can be: /// 1. an QXmppIq based type /// 2. a std::variant of QXmppIq based types (multiple are possible) and optionally also QXmppStanza::Error -/// 3. a QFuture of 1. or 2. +/// 3. a QXmppTask of 1. or 2. /// /// You don't need to set the values for id or the to address on the IQ result because that's done /// automatically. Unless you want to return an error IQ you also don't need to set the IQ type. @@ -254,7 +254,7 @@ bool handleIqRequests(const QDomElement &element, /// The return type of the handler function can be: /// 1. an QXmppIq based type /// 2. a std::variant of QXmppIq based types (multiple are possible) and optionally also QXmppStanza::Error -/// 3. a QFuture of 1. or 2. +/// 3. a QXmppTask of 1. or 2. /// /// You don't need to set the values for id or the to address on the IQ result because that's done /// automatically. Unless you want to return an error IQ you also don't need to set the IQ type. 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 #include -#include -#include using namespace QXmpp::Private; struct RetrieveRequestState { - QFutureInterface interface; + QXmppPromise promise; QXmppMamResultIq iq; QVector 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::retrieveMessages(const QString &to, const QString &node, const QString &jid, const QDateTime &start, const QDateTime &end, const QXmppResultSetQuery &resultSetQuery) +QXmppTask 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::retrieveMessages(const iq.parse(std::get(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::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::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(result)); - itr->second.interface.reportFinished(); + itr->second.promise.finish(std::get(result)); d->ongoingRequests.erase(itr); } }); - return itr->second.interface.future(); + return itr->second.promise.task(); } diff --git a/src/client/QXmppMamManager.h b/src/client/QXmppMamManager.h index 579bfc74..71cb4311 100644 --- a/src/client/QXmppMamManager.h +++ b/src/client/QXmppMamManager.h @@ -15,7 +15,7 @@ #include template -class QFuture; +class QXmppTask; class QXmppMessage; class QXmppMamManagerPrivate; @@ -57,12 +57,12 @@ public: const QDateTime &start = QDateTime(), const QDateTime &end = QDateTime(), const QXmppResultSetQuery &resultSetQuery = QXmppResultSetQuery()); - QFuture retrieveMessages(const QString &to = QString(), - const QString &node = QString(), - const QString &jid = QString(), - const QDateTime &start = QDateTime(), - const QDateTime &end = QDateTime(), - const QXmppResultSetQuery &resultSetQuery = QXmppResultSetQuery()); + QXmppTask retrieveMessages(const QString &to = QString(), + const QString &node = QString(), + const QString &jid = QString(), + const QDateTime &start = QDateTime(), + const QDateTime &end = QDateTime(), + const QXmppResultSetQuery &resultSetQuery = QXmppResultSetQuery()); /// \cond QStringList discoveryFeatures() const override; diff --git a/src/client/QXmppMessageReceiptManager.cpp b/src/client/QXmppMessageReceiptManager.cpp index b464ed18..ae50bbd3 100644 --- a/src/client/QXmppMessageReceiptManager.cpp +++ b/src/client/QXmppMessageReceiptManager.cpp @@ -9,6 +9,7 @@ #include "QXmppConstants_p.h" #include "QXmppE2eeMetadata.h" #include "QXmppMessage.h" +#include "QXmppTask.h" #include "QXmppUtils.h" #include diff --git a/src/client/QXmppOutgoingClient.cpp b/src/client/QXmppOutgoingClient.cpp index 7a774f51..20e88b9c 100644 --- a/src/client/QXmppOutgoingClient.cpp +++ b/src/client/QXmppOutgoingClient.cpp @@ -15,6 +15,7 @@ #include "QXmppSasl_p.h" #include "QXmppStreamFeatures.h" #include "QXmppStreamManagement_p.h" +#include "QXmppTask.h" #include "QXmppUtils.h" #include @@ -325,7 +326,7 @@ bool QXmppOutgoingClient::isStreamResumed() const /// /// \since QXmpp 1.5 /// -QFuture QXmppOutgoingClient::sendIq(QXmppIq &&iq) +QXmppTask QXmppOutgoingClient::sendIq(QXmppIq &&iq) { // always set a to address (the QXmppStream needs this for matching) if (iq.to().isEmpty()) { diff --git a/src/client/QXmppOutgoingClient.h b/src/client/QXmppOutgoingClient.h index 6c72d076..019275f8 100644 --- a/src/client/QXmppOutgoingClient.h +++ b/src/client/QXmppOutgoingClient.h @@ -38,7 +38,7 @@ public: bool isClientStateIndicationEnabled() const; bool isStreamManagementEnabled() const; bool isStreamResumed() const; - QFuture sendIq(QXmppIq &&); + QXmppTask sendIq(QXmppIq &&); /// Returns the used socket QSslSocket *socket() const { return QXmppStream::socket(); }; diff --git a/src/client/QXmppPep_p.h b/src/client/QXmppPep_p.h index 6ffac236..aafc6520 100644 --- a/src/client/QXmppPep_p.h +++ b/src/client/QXmppPep_p.h @@ -12,7 +12,7 @@ using GetResult = std::variant; using PublishResult = std::variant; template -inline QFuture> request(QXmppPubSubManager *pubSub, const QString &jid, const QString &nodeName, QObject *parent) +inline QXmppTask> request(QXmppPubSubManager *pubSub, const QString &jid, const QString &nodeName, QObject *parent) { using PubSub = QXmppPubSubManager; using Error = QXmppStanza::Error; diff --git a/src/client/QXmppPubSubManager.cpp b/src/client/QXmppPubSubManager.cpp index 1582c65e..a10fc25b 100644 --- a/src/client/QXmppPubSubManager.cpp +++ b/src/client/QXmppPubSubManager.cpp @@ -17,7 +17,6 @@ #include "QXmppUtils.h" #include -#include using namespace QXmpp::Private; @@ -211,7 +210,7 @@ QXmppPubSubManager::~QXmppPubSubManager() /// \param serviceJid JID of the entity hosting the pubsub service /// \param serviceType type of service to retrieve features for /// -QFuture QXmppPubSubManager::requestFeatures(const QString &serviceJid, ServiceType serviceType) +QXmppTask QXmppPubSubManager::requestFeatures(const QString &serviceJid, ServiceType serviceType) { QXmppDiscoveryIq request; request.setType(QXmppIq::Get); @@ -259,7 +258,7 @@ QFuture QXmppPubSubManager::requestFeatures( /// \param jid Jabber ID of the entity hosting the pubsub service /// \return /// -QFuture QXmppPubSubManager::requestNodes(const QString &jid) +QXmppTask QXmppPubSubManager::requestNodes(const QString &jid) { QXmppDiscoveryIq request; request.setType(QXmppIq::Get); @@ -293,7 +292,7 @@ QFuture QXmppPubSubManager::requestNodes(const /// \param nodeName the name of the node to be created /// \return /// -auto QXmppPubSubManager::createNode(const QString &jid, const QString &nodeName) -> QFuture +auto QXmppPubSubManager::createNode(const QString &jid, const QString &nodeName) -> QXmppTask { PubSubIq request; request.setType(QXmppIq::Set); @@ -316,7 +315,7 @@ auto QXmppPubSubManager::createNode(const QString &jid, const QString &nodeName) /// \param config The configuration for the node /// \return /// -auto QXmppPubSubManager::createNode(const QString &jid, const QString &nodeName, const QXmppPubSubNodeConfig &config) -> QFuture +auto QXmppPubSubManager::createNode(const QString &jid, const QString &nodeName, const QXmppPubSubNodeConfig &config) -> QXmppTask { PubSubIq request; request.setType(QXmppIq::Set); @@ -337,7 +336,7 @@ auto QXmppPubSubManager::createNode(const QString &jid, const QString &nodeName, /// \param jid Jabber ID of the entity hosting the pubsub service /// \return /// -QFuture QXmppPubSubManager::createInstantNode(const QString &jid) +QXmppTask QXmppPubSubManager::createInstantNode(const QString &jid) { PubSubIq request; request.setType(QXmppIq::Set); @@ -360,7 +359,7 @@ QFuture QXmppPubSubManager::createInstant /// \param config The configuration for the node /// \return /// -auto QXmppPubSubManager::createInstantNode(const QString &jid, const QXmppPubSubNodeConfig &config) -> QFuture +auto QXmppPubSubManager::createInstantNode(const QString &jid, const QXmppPubSubNodeConfig &config) -> QXmppTask { PubSubIq request; request.setType(QXmppIq::Set); @@ -381,7 +380,7 @@ auto QXmppPubSubManager::createInstantNode(const QString &jid, const QXmppPubSub /// \param nodeName the name of the node to delete along with all of its items /// \return /// -auto QXmppPubSubManager::deleteNode(const QString &jid, const QString &nodeName) -> QFuture +auto QXmppPubSubManager::deleteNode(const QString &jid, const QString &nodeName) -> QXmppTask { PubSubIq request; request.setType(QXmppIq::Set); @@ -403,7 +402,7 @@ auto QXmppPubSubManager::deleteNode(const QString &jid, const QString &nodeName) /// \param nodeName the name of the node whose items are requested /// \return /// -QFuture QXmppPubSubManager::requestItemIds(const QString &serviceJid, const QString &nodeName) +QXmppTask QXmppPubSubManager::requestItemIds(const QString &serviceJid, const QString &nodeName) { QXmppDiscoveryIq request; request.setType(QXmppIq::Get); @@ -430,7 +429,7 @@ QFuture QXmppPubSubManager::requestItemIds(co /// \param itemId the ID of the item to delete /// \return /// -auto QXmppPubSubManager::retractItem(const QString &jid, const QString &nodeName, const QString &itemId) -> QFuture +auto QXmppPubSubManager::retractItem(const QString &jid, const QString &nodeName, const QString &itemId) -> QXmppTask { PubSubIq request; request.setType(QXmppIq::Set); @@ -449,7 +448,7 @@ auto QXmppPubSubManager::retractItem(const QString &jid, const QString &nodeName /// \param nodeName the name of the node to delete the item from /// \param itemId the ID of the item to delete /// -auto QXmppPubSubManager::retractItem(const QString &jid, const QString &nodeName, StandardItemId itemId) -> QFuture +auto QXmppPubSubManager::retractItem(const QString &jid, const QString &nodeName, StandardItemId itemId) -> QXmppTask { return retractItem(jid, nodeName, standardItemIdToString(itemId)); } @@ -462,7 +461,7 @@ auto QXmppPubSubManager::retractItem(const QString &jid, const QString &nodeName /// items /// \return /// -auto QXmppPubSubManager::purgeItems(const QString &jid, const QString &nodeName) -> QFuture +auto QXmppPubSubManager::purgeItems(const QString &jid, const QString &nodeName) -> QXmppTask { PubSubIq request; request.setType(QXmppIq::Set); @@ -479,7 +478,7 @@ auto QXmppPubSubManager::purgeItems(const QString &jid, const QString &nodeName) /// \param jid JID of the pubsub service /// \return /// -QFuture QXmppPubSubManager::requestSubscriptions(const QString &jid) +QXmppTask QXmppPubSubManager::requestSubscriptions(const QString &jid) { return requestSubscriptions(jid, {}); } @@ -491,7 +490,7 @@ QFuture QXmppPubSubManager::requestSubs /// \param nodeName Name of the node on the pubsub service /// \return /// -QFuture QXmppPubSubManager::requestSubscriptions(const QString &jid, const QString &nodeName) +QXmppTask QXmppPubSubManager::requestSubscriptions(const QString &jid, const QString &nodeName) { PubSubIq request; request.setType(QXmppIq::Get); @@ -515,7 +514,7 @@ QFuture QXmppPubSubManager::requestSubs /// \param nodeName Name of the pubsub node on the service. /// \return /// -QFuture QXmppPubSubManager::requestNodeAffiliations(const QString &jid, const QString &nodeName) +QXmppTask QXmppPubSubManager::requestNodeAffiliations(const QString &jid, const QString &nodeName) { PubSubIq request; request.setType(QXmppIq::Get); @@ -535,7 +534,7 @@ QFuture QXmppPubSubManager::requestNodeA /// \param jid JID of the pubsub service /// \return /// -QFuture QXmppPubSubManager::requestAffiliations(const QString &jid) +QXmppTask QXmppPubSubManager::requestAffiliations(const QString &jid) { return requestAffiliations(jid, {}); } @@ -547,7 +546,7 @@ QFuture QXmppPubSubManager::requestAffil /// \param nodeName Name of the pubsub node on the service. /// \return /// -QFuture QXmppPubSubManager::requestAffiliations(const QString &jid, const QString &nodeName) +QXmppTask QXmppPubSubManager::requestAffiliations(const QString &jid, const QString &nodeName) { PubSubIq request; request.setType(QXmppIq::Get); @@ -568,7 +567,7 @@ QFuture QXmppPubSubManager::requestAffil /// \param nodeName Name of the pubsub node on the service. /// \return /// -QFuture QXmppPubSubManager::requestSubscribeOptions(const QString &service, const QString &nodeName) +QXmppTask QXmppPubSubManager::requestSubscribeOptions(const QString &service, const QString &nodeName) { return requestSubscribeOptions(service, nodeName, client()->configuration().jidBare()); } @@ -581,7 +580,7 @@ QFuture QXmppPubSubManager::requestSubscribeO /// \param subscriberJid JID of the user to request the options for /// \return /// -QFuture QXmppPubSubManager::requestSubscribeOptions(const QString &service, const QString &nodeName, const QString &subscriberJid) +QXmppTask QXmppPubSubManager::requestSubscribeOptions(const QString &service, const QString &nodeName, const QString &subscriberJid) { PubSubIq request; request.setType(QXmppIq::Get); @@ -614,7 +613,7 @@ QFuture QXmppPubSubManager::requestSubscribeO /// \param options The new options to be set /// \return /// -QFuture QXmppPubSubManager::setSubscribeOptions(const QString &service, const QString &nodeName, const QXmppPubSubSubscribeOptions &options) +QXmppTask QXmppPubSubManager::setSubscribeOptions(const QString &service, const QString &nodeName, const QXmppPubSubSubscribeOptions &options) { return setSubscribeOptions(service, nodeName, options, client()->configuration().jidBare()); } @@ -628,7 +627,7 @@ QFuture QXmppPubSubManager::setSubscribeOptions(cons /// \param subscriberJid The JID of the user /// \return /// -QFuture QXmppPubSubManager::setSubscribeOptions(const QString &service, const QString &nodeName, const QXmppPubSubSubscribeOptions &options, const QString &subscriberJid) +QXmppTask QXmppPubSubManager::setSubscribeOptions(const QString &service, const QString &nodeName, const QXmppPubSubSubscribeOptions &options, const QString &subscriberJid) { PubSubIq request; request.setType(QXmppIq::Set); @@ -654,7 +653,7 @@ QFuture QXmppPubSubManager::setSubscribeOptions(cons /// \sa configureNode() /// \sa cancelNodeConfiguration() /// -QFuture QXmppPubSubManager::requestNodeConfiguration(const QString &service, const QString &nodeName) +QXmppTask QXmppPubSubManager::requestNodeConfiguration(const QString &service, const QString &nodeName) { using Error = QXmppStanza::Error; @@ -689,7 +688,7 @@ QFuture QXmppPubSubManager::requestNodeCon /// /// \sa requestNodeConfiguration() /// -QFuture QXmppPubSubManager::configureNode(const QString &service, const QString &nodeName, const QXmppPubSubNodeConfig &config) +QXmppTask QXmppPubSubManager::configureNode(const QString &service, const QString &nodeName, const QXmppPubSubNodeConfig &config) { PubSubIq request; request.setType(QXmppIq::Set); @@ -710,7 +709,7 @@ QFuture QXmppPubSubManager::configureNode(const QStr /// /// \sa requestNodeConfiguration() /// -QFuture QXmppPubSubManager::cancelNodeConfiguration(const QString &service, const QString &nodeName) +QXmppTask QXmppPubSubManager::cancelNodeConfiguration(const QString &service, const QString &nodeName) { PubSubIq request; request.setType(QXmppIq::Set); @@ -730,7 +729,7 @@ QFuture QXmppPubSubManager::cancelNodeConfiguration( /// \param nodeName name of the pubsub node being subscribed /// \param subscriberJid bare or full JID of the subscriber /// -QFuture QXmppPubSubManager::subscribeToNode(const QString &serviceJid, const QString &nodeName, const QString &subscriberJid) +QXmppTask QXmppPubSubManager::subscribeToNode(const QString &serviceJid, const QString &nodeName, const QString &subscriberJid) { PubSubIq request; request.setType(QXmppIq::Set); @@ -750,7 +749,7 @@ QFuture QXmppPubSubManager::subscribeToNode(const QS /// \param nodeName name of the pubsub node being subscribed /// \param subscriberJid bare or full JID of the subscriber /// -QFuture QXmppPubSubManager::unsubscribeFromNode(const QString &serviceJid, const QString &nodeName, const QString &subscriberJid) +QXmppTask QXmppPubSubManager::unsubscribeFromNode(const QString &serviceJid, const QString &nodeName, const QString &subscriberJid) { PubSubIq request; request.setType(QXmppIq::Set); @@ -785,7 +784,7 @@ QFuture QXmppPubSubManager::unsubscribeFromNode(cons /// /// -/// \fn QFuture QXmppPubSubManager::createOwnPepNode(const QString &nodeName) +/// \fn QXmppTask QXmppPubSubManager::createOwnPepNode(const QString &nodeName) /// /// Creates an empty PEP node with the default configuration. /// @@ -801,7 +800,7 @@ QFuture QXmppPubSubManager::unsubscribeFromNode(cons /// /// -/// \fn QFuture QXmppPubSubManager::createOwnPepNode(const QString &nodeName, const QXmppPubSubNodeConfig &config) +/// \fn QXmppTask QXmppPubSubManager::createOwnPepNode(const QString &nodeName, const QXmppPubSubNodeConfig &config) /// /// Creates an empty PEP node with a custom configuration. /// @@ -1024,7 +1023,7 @@ PubSubIq<> QXmppPubSubManager::requestItemsIq(const QString &jid, const QString return request; } -auto QXmppPubSubManager::publishItem(PubSubIqBase &&request) -> QFuture +auto QXmppPubSubManager::publishItem(PubSubIqBase &&request) -> QXmppTask { request.setType(QXmppIq::Set); request.setQueryType(PubSubIqBase::Publish); @@ -1039,7 +1038,7 @@ auto QXmppPubSubManager::publishItem(PubSubIqBase &&request) -> QFuture QFuture +auto QXmppPubSubManager::publishItems(PubSubIqBase &&request) -> QXmppTask { request.setType(QXmppIq::Set); request.setQueryType(PubSubIqBase::Publish); diff --git a/src/client/QXmppPubSubManager.h b/src/client/QXmppPubSubManager.h index ddd3840c..4e5ab9f8 100644 --- a/src/client/QXmppPubSubManager.h +++ b/src/client/QXmppPubSubManager.h @@ -14,9 +14,6 @@ #include "QXmppPubSubPublishOptions.h" #include "QXmppResultSet.h" -#include -#include - class QXmppPubSubPublishOptions; class QXmppPubSubSubscribeOptions; @@ -75,73 +72,73 @@ public: ~QXmppPubSubManager(); // Generic PubSub (the PubSub service is the given entity) - QFuture requestNodes(const QString &jid); - QFuture createNode(const QString &jid, const QString &nodeName); - QFuture createNode(const QString &jid, const QString &nodeName, const QXmppPubSubNodeConfig &config); - QFuture createInstantNode(const QString &jid); - QFuture createInstantNode(const QString &jid, const QXmppPubSubNodeConfig &config); - QFuture deleteNode(const QString &jid, const QString &nodeName); - QFuture requestItemIds(const QString &serviceJid, const QString &nodeName); + QXmppTask requestNodes(const QString &jid); + QXmppTask createNode(const QString &jid, const QString &nodeName); + QXmppTask createNode(const QString &jid, const QString &nodeName, const QXmppPubSubNodeConfig &config); + QXmppTask createInstantNode(const QString &jid); + QXmppTask createInstantNode(const QString &jid, const QXmppPubSubNodeConfig &config); + QXmppTask deleteNode(const QString &jid, const QString &nodeName); + QXmppTask requestItemIds(const QString &serviceJid, const QString &nodeName); template - QFuture> requestItem(const QString &jid, const QString &nodeName, const QString &itemId); + QXmppTask> requestItem(const QString &jid, const QString &nodeName, const QString &itemId); template - QFuture> requestItem(const QString &jid, const QString &nodeName, StandardItemId itemId); + QXmppTask> requestItem(const QString &jid, const QString &nodeName, StandardItemId itemId); template - QFuture> requestItems(const QString &jid, const QString &nodeName); + QXmppTask> requestItems(const QString &jid, const QString &nodeName); template - QFuture> requestItems(const QString &jid, const QString &nodeName, const QStringList &itemIds); + QXmppTask> requestItems(const QString &jid, const QString &nodeName, const QStringList &itemIds); template - QFuture publishItem(const QString &jid, const QString &nodeName, const T &item); + QXmppTask publishItem(const QString &jid, const QString &nodeName, const T &item); template - QFuture publishItem(const QString &jid, const QString &nodeName, const T &item, const QXmppPubSubPublishOptions &publishOptions); + QXmppTask publishItem(const QString &jid, const QString &nodeName, const T &item, const QXmppPubSubPublishOptions &publishOptions); template - QFuture publishItems(const QString &jid, const QString &nodeName, const QVector &items); + QXmppTask publishItems(const QString &jid, const QString &nodeName, const QVector &items); template - QFuture publishItems(const QString &jid, const QString &nodeName, const QVector &items, const QXmppPubSubPublishOptions &publishOptions); - QFuture retractItem(const QString &jid, const QString &nodeName, const QString &itemId); - QFuture retractItem(const QString &jid, const QString &nodeName, StandardItemId itemId); - QFuture purgeItems(const QString &jid, const QString &nodeName); - QFuture requestSubscriptions(const QString &jid); - QFuture requestSubscriptions(const QString &jid, const QString &nodeName); - QFuture requestNodeAffiliations(const QString &jid, const QString &nodeName); - QFuture requestAffiliations(const QString &jid); - QFuture requestAffiliations(const QString &jid, const QString &nodeName); - QFuture requestSubscribeOptions(const QString &service, const QString &nodeName); - QFuture requestSubscribeOptions(const QString &service, const QString &nodeName, const QString &subscriberJid); - QFuture setSubscribeOptions(const QString &service, const QString &nodeName, const QXmppPubSubSubscribeOptions &options); - QFuture setSubscribeOptions(const QString &service, const QString &nodeName, const QXmppPubSubSubscribeOptions &options, const QString &subscriberJid); - QFuture requestNodeConfiguration(const QString &service, const QString &nodeName); - QFuture configureNode(const QString &service, const QString &nodeName, const QXmppPubSubNodeConfig &config); - QFuture cancelNodeConfiguration(const QString &service, const QString &nodeName); - QFuture subscribeToNode(const QString &serviceJid, const QString &nodeName, const QString &subscriberJid); - QFuture unsubscribeFromNode(const QString &serviceJid, const QString &nodeName, const QString &subscriberJid); + QXmppTask publishItems(const QString &jid, const QString &nodeName, const QVector &items, const QXmppPubSubPublishOptions &publishOptions); + QXmppTask retractItem(const QString &jid, const QString &nodeName, const QString &itemId); + QXmppTask retractItem(const QString &jid, const QString &nodeName, StandardItemId itemId); + QXmppTask purgeItems(const QString &jid, const QString &nodeName); + QXmppTask requestSubscriptions(const QString &jid); + QXmppTask requestSubscriptions(const QString &jid, const QString &nodeName); + QXmppTask requestNodeAffiliations(const QString &jid, const QString &nodeName); + QXmppTask requestAffiliations(const QString &jid); + QXmppTask requestAffiliations(const QString &jid, const QString &nodeName); + QXmppTask requestSubscribeOptions(const QString &service, const QString &nodeName); + QXmppTask requestSubscribeOptions(const QString &service, const QString &nodeName, const QString &subscriberJid); + QXmppTask setSubscribeOptions(const QString &service, const QString &nodeName, const QXmppPubSubSubscribeOptions &options); + QXmppTask setSubscribeOptions(const QString &service, const QString &nodeName, const QXmppPubSubSubscribeOptions &options, const QString &subscriberJid); + QXmppTask requestNodeConfiguration(const QString &service, const QString &nodeName); + QXmppTask configureNode(const QString &service, const QString &nodeName, const QXmppPubSubNodeConfig &config); + QXmppTask cancelNodeConfiguration(const QString &service, const QString &nodeName); + QXmppTask subscribeToNode(const QString &serviceJid, const QString &nodeName, const QString &subscriberJid); + QXmppTask unsubscribeFromNode(const QString &serviceJid, const QString &nodeName, const QString &subscriberJid); // PEP-specific (the PubSub service is the current account) - QFuture requestOwnPepNodes() { return requestNodes(client()->configuration().jidBare()); }; - QFuture createOwnPepNode(const QString &nodeName) { return createNode(client()->configuration().jidBare(), nodeName); } - QFuture createOwnPepNode(const QString &nodeName, const QXmppPubSubNodeConfig &config) { return createNode(client()->configuration().jidBare(), nodeName, config); } - QFuture deleteOwnPepNode(const QString &nodeName) { return deleteNode(client()->configuration().jidBare(), nodeName); } + QXmppTask requestOwnPepNodes() { return requestNodes(client()->configuration().jidBare()); }; + QXmppTask createOwnPepNode(const QString &nodeName) { return createNode(client()->configuration().jidBare(), nodeName); } + QXmppTask createOwnPepNode(const QString &nodeName, const QXmppPubSubNodeConfig &config) { return createNode(client()->configuration().jidBare(), nodeName, config); } + QXmppTask deleteOwnPepNode(const QString &nodeName) { return deleteNode(client()->configuration().jidBare(), nodeName); } template - QFuture> requestOwnPepItem(const QString &nodeName, const QString &itemId) { return requestItem(client()->configuration().jidBare(), nodeName, itemId); } + QXmppTask> requestOwnPepItem(const QString &nodeName, const QString &itemId) { return requestItem(client()->configuration().jidBare(), nodeName, itemId); } template - QFuture> requestOwnPepItem(const QString &nodeName, StandardItemId itemId) { return requestItem(client()->configuration().jidBare(), nodeName, itemId); } + QXmppTask> requestOwnPepItem(const QString &nodeName, StandardItemId itemId) { return requestItem(client()->configuration().jidBare(), nodeName, itemId); } template - QFuture> requestOwnPepItems(const QString &nodeName) { return requestItems(client()->configuration().jidBare(), nodeName); } - QFuture requestOwnPepItemIds(const QString &nodeName) { return requestItemIds(client()->configuration().jidBare(), nodeName); } + QXmppTask> requestOwnPepItems(const QString &nodeName) { return requestItems(client()->configuration().jidBare(), nodeName); } + QXmppTask requestOwnPepItemIds(const QString &nodeName) { return requestItemIds(client()->configuration().jidBare(), nodeName); } template - QFuture publishOwnPepItem(const QString &nodeName, const T &item, const QXmppPubSubPublishOptions &publishOptions); + QXmppTask publishOwnPepItem(const QString &nodeName, const T &item, const QXmppPubSubPublishOptions &publishOptions); template - QFuture publishOwnPepItem(const QString &nodeName, const T &item); + QXmppTask publishOwnPepItem(const QString &nodeName, const T &item); template - QFuture publishOwnPepItems(const QString &nodeName, const QVector &items, const QXmppPubSubPublishOptions &publishOptions); + QXmppTask publishOwnPepItems(const QString &nodeName, const QVector &items, const QXmppPubSubPublishOptions &publishOptions); template - QFuture publishOwnPepItems(const QString &nodeName, const QVector &items); - QFuture retractOwnPepItem(const QString &nodeName, const QString &itemId) { return retractItem(client()->configuration().jidBare(), nodeName, itemId); } - QFuture retractOwnPepItem(const QString &nodeName, StandardItemId itemId) { return retractItem(client()->configuration().jidBare(), nodeName, itemId); } - QFuture purgeOwnPepItems(const QString &nodeName) { return purgeItems(client()->configuration().jidBare(), nodeName); } - QFuture requestOwnPepNodeConfiguration(const QString &nodeName) { return requestNodeConfiguration(client()->configuration().jidBare(), nodeName); } - QFuture configureOwnPepNode(const QString &nodeName, const QXmppPubSubNodeConfig &config) { return configureNode(client()->configuration().jidBare(), nodeName, config); } - QFuture cancelOwnPepNodeConfiguration(const QString &nodeName) { return cancelNodeConfiguration(client()->configuration().jidBare(), nodeName); } + QXmppTask publishOwnPepItems(const QString &nodeName, const QVector &items); + QXmppTask retractOwnPepItem(const QString &nodeName, const QString &itemId) { return retractItem(client()->configuration().jidBare(), nodeName, itemId); } + QXmppTask retractOwnPepItem(const QString &nodeName, StandardItemId itemId) { return retractItem(client()->configuration().jidBare(), nodeName, itemId); } + QXmppTask purgeOwnPepItems(const QString &nodeName) { return purgeItems(client()->configuration().jidBare(), nodeName); } + QXmppTask requestOwnPepNodeConfiguration(const QString &nodeName) { return requestNodeConfiguration(client()->configuration().jidBare(), nodeName); } + QXmppTask configureOwnPepNode(const QString &nodeName, const QXmppPubSubNodeConfig &config) { return configureNode(client()->configuration().jidBare(), nodeName, config); } + QXmppTask cancelOwnPepNodeConfiguration(const QString &nodeName) { return cancelNodeConfiguration(client()->configuration().jidBare(), nodeName); } static QString standardItemIdToString(StandardItemId itemId); @@ -155,11 +152,11 @@ private: friend class tst_QXmppPubSubManager; friend class QXmppOmemoManagerPrivate; - QFuture requestFeatures(const QString &serviceJid, ServiceType serviceType = PubSubOrPep); - QFuture requestOwnPepFeatures() { return requestFeatures(client()->configuration().jidBare(), Pep); }; + QXmppTask requestFeatures(const QString &serviceJid, ServiceType serviceType = PubSubOrPep); + QXmppTask requestOwnPepFeatures() { return requestFeatures(client()->configuration().jidBare(), Pep); }; - QFuture publishItem(QXmpp::Private::PubSubIqBase &&iq); - QFuture publishItems(QXmpp::Private::PubSubIqBase &&iq); + QXmppTask publishItem(QXmpp::Private::PubSubIqBase &&iq); + QXmppTask publishItems(QXmpp::Private::PubSubIqBase &&iq); static QXmpp::Private::PubSubIq<> requestItemsIq(const QString &jid, const QString &nodeName, const QStringList &itemIds); }; @@ -173,9 +170,9 @@ private: /// \return /// template -QFuture> QXmppPubSubManager::requestItem(const QString &jid, - const QString &nodeName, - const QString &itemId) +QXmppTask> QXmppPubSubManager::requestItem(const QString &jid, + const QString &nodeName, + const QString &itemId) { using namespace QXmpp::Private; using Error = QXmppStanza::Error; @@ -198,9 +195,9 @@ QFuture> QXmppPubSubManager::requestItem(const /// \return /// template -QFuture> QXmppPubSubManager::requestItem(const QString &jid, - const QString &nodeName, - StandardItemId itemId) +QXmppTask> QXmppPubSubManager::requestItem(const QString &jid, + const QString &nodeName, + StandardItemId itemId) { return requestItem(jid, nodeName, standardItemIdToString(itemId)); } @@ -214,8 +211,8 @@ QFuture> QXmppPubSubManager::requestItem(const /// \return /// template -QFuture> QXmppPubSubManager::requestItems(const QString &jid, - const QString &nodeName) +QXmppTask> QXmppPubSubManager::requestItems(const QString &jid, + const QString &nodeName) { return requestItems(jid, nodeName, {}); } @@ -231,9 +228,9 @@ QFuture> QXmppPubSubManager::requestItems(con /// \return /// template -QFuture> QXmppPubSubManager::requestItems(const QString &jid, - const QString &nodeName, - const QStringList &itemIds) +QXmppTask> QXmppPubSubManager::requestItems(const QString &jid, + const QString &nodeName, + const QStringList &itemIds) { using namespace QXmpp::Private; return chainIq(client()->sendIq(requestItemsIq(jid, nodeName, itemIds)), this, @@ -257,9 +254,9 @@ QFuture> QXmppPubSubManager::requestItems(con /// \return /// template -QFuture QXmppPubSubManager::publishItem(const QString &jid, - const QString &nodeName, - const T &item) +QXmppTask QXmppPubSubManager::publishItem(const QString &jid, + const QString &nodeName, + const T &item) { QXmpp::Private::PubSubIq request; request.setTo(jid); @@ -281,10 +278,10 @@ QFuture QXmppPubSubManager::publishItem(c /// \return /// template -QFuture QXmppPubSubManager::publishItem(const QString &jid, - const QString &nodeName, - const T &item, - const QXmppPubSubPublishOptions &publishOptions) +QXmppTask QXmppPubSubManager::publishItem(const QString &jid, + const QString &nodeName, + const T &item, + const QXmppPubSubPublishOptions &publishOptions) { QXmpp::Private::PubSubIq request; request.setTo(jid); @@ -303,9 +300,9 @@ QFuture QXmppPubSubManager::publishItem(c /// \return /// template -QFuture QXmppPubSubManager::publishItems(const QString &jid, - const QString &nodeName, - const QVector &items) +QXmppTask QXmppPubSubManager::publishItems(const QString &jid, + const QString &nodeName, + const QVector &items) { QXmpp::Private::PubSubIq request; request.setTo(jid); @@ -324,10 +321,10 @@ QFuture QXmppPubSubManager::publishItems /// \return /// template -QFuture QXmppPubSubManager::publishItems(const QString &jid, - const QString &nodeName, - const QVector &items, - const QXmppPubSubPublishOptions &publishOptions) +QXmppTask QXmppPubSubManager::publishItems(const QString &jid, + const QString &nodeName, + const QVector &items, + const QXmppPubSubPublishOptions &publishOptions) { QXmpp::Private::PubSubIq request; request.setTo(jid); @@ -346,7 +343,7 @@ QFuture QXmppPubSubManager::publishItems /// \return /// template -QFuture QXmppPubSubManager::publishOwnPepItem(const QString &nodeName, const T &item, const QXmppPubSubPublishOptions &publishOptions) +QXmppTask QXmppPubSubManager::publishOwnPepItem(const QString &nodeName, const T &item, const QXmppPubSubPublishOptions &publishOptions) { return publishItem(client()->configuration().jidBare(), nodeName, item, publishOptions); } @@ -359,7 +356,7 @@ QFuture QXmppPubSubManager::publishOwnPep /// \return /// template -QFuture QXmppPubSubManager::publishOwnPepItem(const QString &nodeName, const T &item) +QXmppTask QXmppPubSubManager::publishOwnPepItem(const QString &nodeName, const T &item) { return publishItem(client()->configuration().jidBare(), nodeName, item); } @@ -374,7 +371,7 @@ QFuture QXmppPubSubManager::publishOwnPep /// \return /// template -QFuture QXmppPubSubManager::publishOwnPepItems(const QString &nodeName, const QVector &items, const QXmppPubSubPublishOptions &publishOptions) +QXmppTask QXmppPubSubManager::publishOwnPepItems(const QString &nodeName, const QVector &items, const QXmppPubSubPublishOptions &publishOptions) { return publishItems(client()->configuration().jidBare(), nodeName, items, publishOptions); } @@ -387,7 +384,7 @@ QFuture QXmppPubSubManager::publishOwnPe /// \return /// template -QFuture QXmppPubSubManager::publishOwnPepItems(const QString &nodeName, const QVector &items) +QXmppTask QXmppPubSubManager::publishOwnPepItems(const QString &nodeName, const QVector &items) { return publishItems(client()->configuration().jidBare(), nodeName, items); } diff --git a/src/client/QXmppRosterManager.cpp b/src/client/QXmppRosterManager.cpp index 810a4615..87ebbd26 100644 --- a/src/client/QXmppRosterManager.cpp +++ b/src/client/QXmppRosterManager.cpp @@ -256,7 +256,7 @@ void QXmppRosterManager::_q_presenceReceived(const QXmppPresence &presence) /// /// \since QXmpp 1.5 /// -QFuture QXmppRosterManager::addRosterItem(const QString &bareJid, const QString &name, const QSet &groups) +QXmppTask QXmppRosterManager::addRosterItem(const QString &bareJid, const QString &name, const QSet &groups) { QXmppRosterIq::Item item; item.setBareJid(bareJid); @@ -280,7 +280,7 @@ QFuture QXmppRosterManager::addRosterItem(const QStr /// /// \since QXmpp 1.5 /// -QFuture QXmppRosterManager::removeRosterItem(const QString &bareJid) +QXmppTask QXmppRosterManager::removeRosterItem(const QString &bareJid) { QXmppRosterIq::Item item; item.setBareJid(bareJid); @@ -303,11 +303,11 @@ QFuture QXmppRosterManager::removeRosterItem(const Q /// /// \since QXmpp 1.5 /// -QFuture QXmppRosterManager::renameRosterItem(const QString &bareJid, const QString &name) +QXmppTask QXmppRosterManager::renameRosterItem(const QString &bareJid, const QString &name) { using Error = QXmppStanza::Error; if (!d->entries.contains(bareJid)) { - return QXmpp::Private::makeReadyFuture( + return QXmpp::Private::makeReadyTask( Error(Error::Modify, Error::ItemNotFound, QStringLiteral("The roster doesn't contain this user."))); } @@ -334,7 +334,7 @@ QFuture QXmppRosterManager::renameRosterItem(const Q /// /// \since QXmpp 1.5 /// -QFuture QXmppRosterManager::subscribeTo(const QString &bareJid, const QString &reason) +QXmppTask QXmppRosterManager::subscribeTo(const QString &bareJid, const QString &reason) { QXmppPresence packet; packet.setTo(QXmppUtils::jidToBareJid(bareJid)); @@ -351,7 +351,7 @@ QFuture QXmppRosterManager::subscribeTo(const QString &bareJi /// /// \since QXmpp 1.5 /// -QFuture QXmppRosterManager::unsubscribeFrom(const QString &bareJid, const QString &reason) +QXmppTask QXmppRosterManager::unsubscribeFrom(const QString &bareJid, const QString &reason) { QXmppPresence packet; packet.setTo(QXmppUtils::jidToBareJid(bareJid)); @@ -375,13 +375,13 @@ bool QXmppRosterManager::refuseSubscription(const QString &bareJid, const QStrin } /// -/// Adds a new item to the roster without sending any subscription requests. +/// Adds a new item the roster without sending any subscription requests. /// /// As a result, the server will initiate a roster push, causing the /// itemAdded() or itemChanged() signal to be emitted. /// /// \param bareJid -/// \param name Optional name for the item. +/// \param name Optotional name for the item. /// \param groups Optional groups for the item. /// bool QXmppRosterManager::addItem(const QString &bareJid, const QString &name, const QSet &groups) diff --git a/src/client/QXmppRosterManager.h b/src/client/QXmppRosterManager.h index be4f45d6..f3629342 100644 --- a/src/client/QXmppRosterManager.h +++ b/src/client/QXmppRosterManager.h @@ -19,7 +19,7 @@ #include template -class QFuture; +class QXmppTask; class QXmppRosterManagerPrivate; /// @@ -73,11 +73,11 @@ public: QXmppPresence getPresence(const QString &bareJid, const QString &resource) const; - QFuture addRosterItem(const QString &bareJid, const QString &name = {}, const QSet &groups = {}); - QFuture removeRosterItem(const QString &bareJid); - QFuture renameRosterItem(const QString &bareJid, const QString &name); - QFuture subscribeTo(const QString &bareJid, const QString &reason = {}); - QFuture unsubscribeFrom(const QString &bareJid, const QString &reason = {}); + QXmppTask addRosterItem(const QString &bareJid, const QString &name = {}, const QSet &groups = {}); + QXmppTask removeRosterItem(const QString &bareJid); + QXmppTask renameRosterItem(const QString &bareJid, const QString &name); + QXmppTask subscribeTo(const QString &bareJid, const QString &reason = {}); + QXmppTask unsubscribeFrom(const QString &bareJid, const QString &reason = {}); /// \cond bool handleStanza(const QDomElement &element) override; diff --git a/src/client/QXmppTrustManager.cpp b/src/client/QXmppTrustManager.cpp index a5031a52..2772a4a5 100644 --- a/src/client/QXmppTrustManager.cpp +++ b/src/client/QXmppTrustManager.cpp @@ -5,6 +5,8 @@ #include "QXmppTrustManager.h" #include "QXmppFutureUtils_p.h" +#include "QXmppPromise.h" +#include "QXmppTask.h" #include "QXmppTrustStorage.h" using namespace QXmpp; @@ -40,7 +42,7 @@ QXmppTrustManager::~QXmppTrustManager() = default; /// \param encryption encryption protocol namespace /// \param securityPolicy security policy being applied /// -QFuture QXmppTrustManager::setSecurityPolicy(const QString &encryption, TrustSecurityPolicy securityPolicy) +QXmppTask QXmppTrustManager::setSecurityPolicy(const QString &encryption, TrustSecurityPolicy securityPolicy) { return m_trustStorage->setSecurityPolicy(encryption, securityPolicy); } @@ -50,7 +52,7 @@ QFuture QXmppTrustManager::setSecurityPolicy(const QString &encryption, Tr /// /// \param encryption encryption protocol namespace /// -QFuture QXmppTrustManager::resetSecurityPolicy(const QString &encryption) +QXmppTask QXmppTrustManager::resetSecurityPolicy(const QString &encryption) { return m_trustStorage->resetSecurityPolicy(encryption); } @@ -62,7 +64,7 @@ QFuture QXmppTrustManager::resetSecurityPolicy(const QString &encryption) /// /// \return the set security policy /// -QFuture QXmppTrustManager::securityPolicy(const QString &encryption) +QXmppTask QXmppTrustManager::securityPolicy(const QString &encryption) { return m_trustStorage->securityPolicy(encryption); } @@ -74,7 +76,7 @@ QFuture QXmppTrustManager::securityPolicy(const QString &en /// \param encryption encryption protocol namespace /// \param keyId ID of the key /// -QFuture QXmppTrustManager::setOwnKey(const QString &encryption, const QByteArray &keyId) +QXmppTask QXmppTrustManager::setOwnKey(const QString &encryption, const QByteArray &keyId) { return m_trustStorage->setOwnKey(encryption, keyId); } @@ -85,7 +87,7 @@ QFuture QXmppTrustManager::setOwnKey(const QString &encryption, const QByt /// /// \param encryption encryption protocol namespace /// -QFuture QXmppTrustManager::resetOwnKey(const QString &encryption) +QXmppTask QXmppTrustManager::resetOwnKey(const QString &encryption) { return m_trustStorage->resetOwnKey(encryption); } @@ -98,7 +100,7 @@ QFuture QXmppTrustManager::resetOwnKey(const QString &encryption) /// /// \return the ID of the own key /// -QFuture QXmppTrustManager::ownKey(const QString &encryption) +QXmppTask QXmppTrustManager::ownKey(const QString &encryption) { return m_trustStorage->ownKey(encryption); } @@ -111,7 +113,7 @@ QFuture QXmppTrustManager::ownKey(const QString &encryption) /// \param keyIds IDs of the keys /// \param trustLevel trust level of the keys /// -QFuture QXmppTrustManager::addKeys(const QString &encryption, const QString &keyOwnerJid, const QList &keyIds, TrustLevel trustLevel) +QXmppTask QXmppTrustManager::addKeys(const QString &encryption, const QString &keyOwnerJid, const QList &keyIds, TrustLevel trustLevel) { return m_trustStorage->addKeys(encryption, keyOwnerJid, keyIds, trustLevel); } @@ -122,7 +124,7 @@ QFuture QXmppTrustManager::addKeys(const QString &encryption, const QStrin /// \param encryption encryption protocol namespace /// \param keyIds IDs of the keys /// -QFuture QXmppTrustManager::removeKeys(const QString &encryption, const QList &keyIds) +QXmppTask QXmppTrustManager::removeKeys(const QString &encryption, const QList &keyIds) { return m_trustStorage->removeKeys(encryption, keyIds); } @@ -133,7 +135,7 @@ QFuture QXmppTrustManager::removeKeys(const QString &encryption, const QLi /// \param encryption encryption protocol namespace /// \param keyOwnerJid key owner's bare JID /// -QFuture QXmppTrustManager::removeKeys(const QString &encryption, const QString &keyOwnerJid) +QXmppTask QXmppTrustManager::removeKeys(const QString &encryption, const QString &keyOwnerJid) { return m_trustStorage->removeKeys(encryption, keyOwnerJid); } @@ -143,7 +145,7 @@ QFuture QXmppTrustManager::removeKeys(const QString &encryption, const QSt /// /// \param encryption encryption protocol namespace /// -QFuture QXmppTrustManager::removeKeys(const QString &encryption) +QXmppTask QXmppTrustManager::removeKeys(const QString &encryption) { return m_trustStorage->removeKeys(encryption); } @@ -159,7 +161,7 @@ QFuture QXmppTrustManager::removeKeys(const QString &encryption) /// /// \return the key owner JIDs mapped to their keys with specific trust levels /// -QFuture>> QXmppTrustManager::keys(const QString &encryption, QXmpp::TrustLevels trustLevels) +QXmppTask>> QXmppTrustManager::keys(const QString &encryption, QXmpp::TrustLevels trustLevels) { return m_trustStorage->keys(encryption, trustLevels); } @@ -177,7 +179,7 @@ QFuture>> QXmppTrustMan /// /// \return the key IDs mapped to their trust levels for specific key owners /// -QFuture>> QXmppTrustManager::keys(const QString &encryption, const QList &keyOwnerJids, QXmpp::TrustLevels trustLevels) +QXmppTask>> QXmppTrustManager::keys(const QString &encryption, const QList &keyOwnerJids, QXmpp::TrustLevels trustLevels) { return m_trustStorage->keys(encryption, keyOwnerJids, trustLevels); } @@ -192,7 +194,7 @@ QFuture>> QXmppTrustManager: /// /// \return whether a key of the key owner with a passed trust level is stored /// -QFuture QXmppTrustManager::hasKey(const QString &encryption, const QString &keyOwnerJid, TrustLevels trustLevels) +QXmppTask QXmppTrustManager::hasKey(const QString &encryption, const QString &keyOwnerJid, TrustLevels trustLevels) { return m_trustStorage->hasKey(encryption, keyOwnerJid, trustLevels); } @@ -206,17 +208,17 @@ QFuture QXmppTrustManager::hasKey(const QString &encryption, const QString /// \param keyIds key owners' bare JIDs mapped to the IDs of their keys /// \param trustLevel trust level being set /// -QFuture QXmppTrustManager::setTrustLevel(const QString &encryption, const QMultiHash &keyIds, TrustLevel trustLevel) +QXmppTask QXmppTrustManager::setTrustLevel(const QString &encryption, const QMultiHash &keyIds, TrustLevel trustLevel) { - QFutureInterface interface(QFutureInterfaceBase::Started); + QXmppPromise promise; auto future = m_trustStorage->setTrustLevel(encryption, keyIds, trustLevel); - await(future, this, [=](QHash> modifiedKeys) mutable { + future.then(this, [=](QHash> modifiedKeys) mutable { Q_EMIT trustLevelsChanged(modifiedKeys); - interface.reportFinished(); + promise.finish(); }); - return interface.future(); + return promise.task(); } /// @@ -227,17 +229,16 @@ QFuture QXmppTrustManager::setTrustLevel(const QString &encryption, const /// \param oldTrustLevel trust level being changed /// \param newTrustLevel trust level being set /// -QFuture QXmppTrustManager::setTrustLevel(const QString &encryption, const QList &keyOwnerJids, TrustLevel oldTrustLevel, TrustLevel newTrustLevel) +QXmppTask QXmppTrustManager::setTrustLevel(const QString &encryption, const QList &keyOwnerJids, TrustLevel oldTrustLevel, TrustLevel newTrustLevel) { - QFutureInterface interface(QFutureInterfaceBase::Started); + QXmppPromise promise; + m_trustStorage->setTrustLevel(encryption, keyOwnerJids, oldTrustLevel, newTrustLevel) + .then(this, [=](QHash> modifiedKeys) mutable { + Q_EMIT trustLevelsChanged(modifiedKeys); + promise.finish(); + }); - auto future = m_trustStorage->setTrustLevel(encryption, keyOwnerJids, oldTrustLevel, newTrustLevel); - await(future, this, [=](QHash> modifiedKeys) mutable { - Q_EMIT trustLevelsChanged(modifiedKeys); - interface.reportFinished(); - }); - - return interface.future(); + return promise.task(); } /// @@ -251,7 +252,7 @@ QFuture QXmppTrustManager::setTrustLevel(const QString &encryption, const /// /// \return the key's trust level /// -QFuture QXmppTrustManager::trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId) +QXmppTask QXmppTrustManager::trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId) { return m_trustStorage->trustLevel(encryption, keyOwnerJid, keyId); } @@ -261,7 +262,7 @@ QFuture QXmppTrustManager::trustLevel(const QString &encryption, con /// /// \param encryption encryption protocol namespace /// -QFuture QXmppTrustManager::resetAll(const QString &encryption) +QXmppTask QXmppTrustManager::resetAll(const QString &encryption) { return m_trustStorage->resetAll(encryption); } diff --git a/src/client/QXmppTrustManager.h b/src/client/QXmppTrustManager.h index 456a2036..d9fc8f23 100644 --- a/src/client/QXmppTrustManager.h +++ b/src/client/QXmppTrustManager.h @@ -9,7 +9,8 @@ #include "QXmppTrustLevel.h" #include "QXmppTrustSecurityPolicy.h" -#include +template +class QXmppTask; class QXmppTrustStorage; @@ -21,27 +22,27 @@ public: QXmppTrustManager(QXmppTrustStorage *trustStorage); ~QXmppTrustManager(); - QFuture setSecurityPolicy(const QString &encryption, QXmpp::TrustSecurityPolicy securityPolicy); - QFuture resetSecurityPolicy(const QString &encryption); - QFuture securityPolicy(const QString &encryption); + QXmppTask setSecurityPolicy(const QString &encryption, QXmpp::TrustSecurityPolicy securityPolicy); + QXmppTask resetSecurityPolicy(const QString &encryption); + QXmppTask securityPolicy(const QString &encryption); - QFuture setOwnKey(const QString &encryption, const QByteArray &keyId); - QFuture resetOwnKey(const QString &encryption); - QFuture ownKey(const QString &encryption); + QXmppTask setOwnKey(const QString &encryption, const QByteArray &keyId); + QXmppTask resetOwnKey(const QString &encryption); + QXmppTask ownKey(const QString &encryption); - QFuture addKeys(const QString &encryption, const QString &keyOwnerJid, const QList &keyIds, QXmpp::TrustLevel trustLevel = QXmpp::TrustLevel::AutomaticallyDistrusted); - QFuture removeKeys(const QString &encryption, const QList &keyIds); - QFuture removeKeys(const QString &encryption, const QString &keyOwnerJid); - QFuture removeKeys(const QString &encryption); - QFuture>> keys(const QString &encryption, QXmpp::TrustLevels trustLevels = {}); - QFuture>> keys(const QString &encryption, const QList &keyOwnerJids, QXmpp::TrustLevels trustLevels = {}); - QFuture hasKey(const QString &encryption, const QString &keyOwnerJid, QXmpp::TrustLevels trustLevels); + QXmppTask addKeys(const QString &encryption, const QString &keyOwnerJid, const QList &keyIds, QXmpp::TrustLevel trustLevel = QXmpp::TrustLevel::AutomaticallyDistrusted); + QXmppTask removeKeys(const QString &encryption, const QList &keyIds); + QXmppTask removeKeys(const QString &encryption, const QString &keyOwnerJid); + QXmppTask removeKeys(const QString &encryption); + QXmppTask>> keys(const QString &encryption, QXmpp::TrustLevels trustLevels = {}); + QXmppTask>> keys(const QString &encryption, const QList &keyOwnerJids, QXmpp::TrustLevels trustLevels = {}); + QXmppTask hasKey(const QString &encryption, const QString &keyOwnerJid, QXmpp::TrustLevels trustLevels); - QFuture setTrustLevel(const QString &encryption, const QMultiHash &keyIds, QXmpp::TrustLevel trustLevel); - QFuture setTrustLevel(const QString &encryption, const QList &keyOwnerJids, QXmpp::TrustLevel oldTrustLevel, QXmpp::TrustLevel newTrustLevel); - QFuture trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId); + QXmppTask setTrustLevel(const QString &encryption, const QMultiHash &keyIds, QXmpp::TrustLevel trustLevel); + QXmppTask setTrustLevel(const QString &encryption, const QList &keyOwnerJids, QXmpp::TrustLevel oldTrustLevel, QXmpp::TrustLevel newTrustLevel); + QXmppTask trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId); - QFuture resetAll(const QString &encryption); + QXmppTask resetAll(const QString &encryption); Q_SIGNAL void trustLevelsChanged(const QHash> &modifiedKeys); diff --git a/src/client/QXmppTrustMemoryStorage.cpp b/src/client/QXmppTrustMemoryStorage.cpp index aca9dcb9..29762bb0 100644 --- a/src/client/QXmppTrustMemoryStorage.cpp +++ b/src/client/QXmppTrustMemoryStorage.cpp @@ -53,42 +53,42 @@ QXmppTrustMemoryStorage::QXmppTrustMemoryStorage() QXmppTrustMemoryStorage::~QXmppTrustMemoryStorage() = default; /// \cond -QFuture QXmppTrustMemoryStorage::setSecurityPolicy(const QString &encryption, TrustSecurityPolicy securityPolicy) +QXmppTask QXmppTrustMemoryStorage::setSecurityPolicy(const QString &encryption, TrustSecurityPolicy securityPolicy) { d->securityPolicies.insert(encryption, securityPolicy); - return makeReadyFuture(); + return makeReadyTask(); } -QFuture QXmppTrustMemoryStorage::resetSecurityPolicy(const QString &encryption) +QXmppTask QXmppTrustMemoryStorage::resetSecurityPolicy(const QString &encryption) { d->securityPolicies.remove(encryption); - return makeReadyFuture(); + return makeReadyTask(); } -QFuture QXmppTrustMemoryStorage::securityPolicy(const QString &encryption) +QXmppTask QXmppTrustMemoryStorage::securityPolicy(const QString &encryption) { - return makeReadyFuture(std::move(d->securityPolicies.value(encryption))); + return makeReadyTask(std::move(d->securityPolicies.value(encryption))); } -QFuture QXmppTrustMemoryStorage::setOwnKey(const QString &encryption, const QByteArray &keyId) +QXmppTask QXmppTrustMemoryStorage::setOwnKey(const QString &encryption, const QByteArray &keyId) { d->ownKeys.insert(encryption, keyId); - return makeReadyFuture(); + return makeReadyTask(); } -QFuture QXmppTrustMemoryStorage::resetOwnKey(const QString &encryption) +QXmppTask QXmppTrustMemoryStorage::resetOwnKey(const QString &encryption) { d->ownKeys.remove(encryption); - return makeReadyFuture(); + return makeReadyTask(); } -QFuture QXmppTrustMemoryStorage::ownKey(const QString &encryption) +QXmppTask QXmppTrustMemoryStorage::ownKey(const QString &encryption) { auto key = d->ownKeys[encryption]; - return makeReadyFuture(std::move(key)); + return makeReadyTask(std::move(key)); } -QFuture QXmppTrustMemoryStorage::addKeys(const QString &encryption, const QString &keyOwnerJid, const QList &keyIds, TrustLevel trustLevel) +QXmppTask QXmppTrustMemoryStorage::addKeys(const QString &encryption, const QString &keyOwnerJid, const QList &keyIds, TrustLevel trustLevel) { for (const auto &keyId : keyIds) { Key key; @@ -98,10 +98,10 @@ QFuture QXmppTrustMemoryStorage::addKeys(const QString &encryption, const d->keys.insert(encryption, key); } - return makeReadyFuture(); + return makeReadyTask(); } -QFuture QXmppTrustMemoryStorage::removeKeys(const QString &encryption, const QList &keyIds) +QXmppTask QXmppTrustMemoryStorage::removeKeys(const QString &encryption, const QList &keyIds) { for (auto itr = d->keys.find(encryption); itr != d->keys.end() && itr.key() == encryption;) { @@ -112,10 +112,10 @@ QFuture QXmppTrustMemoryStorage::removeKeys(const QString &encryption, con } } - return makeReadyFuture(); + return makeReadyTask(); } -QFuture QXmppTrustMemoryStorage::removeKeys(const QString &encryption, const QString &keyOwnerJid) +QXmppTask QXmppTrustMemoryStorage::removeKeys(const QString &encryption, const QString &keyOwnerJid) { for (auto itr = d->keys.find(encryption); itr != d->keys.end() && itr.key() == encryption;) { @@ -126,16 +126,16 @@ QFuture QXmppTrustMemoryStorage::removeKeys(const QString &encryption, con } } - return makeReadyFuture(); + return makeReadyTask(); } -QFuture QXmppTrustMemoryStorage::removeKeys(const QString &encryption) +QXmppTask QXmppTrustMemoryStorage::removeKeys(const QString &encryption) { d->keys.remove(encryption); - return makeReadyFuture(); + return makeReadyTask(); } -QFuture>> QXmppTrustMemoryStorage::keys(const QString &encryption, TrustLevels trustLevels) +QXmppTask>> QXmppTrustMemoryStorage::keys(const QString &encryption, TrustLevels trustLevels) { QHash> keys; @@ -147,10 +147,10 @@ QFuture>> QXmppTrustMemoryStor } } - return makeReadyFuture(std::move(keys)); + return makeReadyTask(std::move(keys)); } -QFuture>> QXmppTrustMemoryStorage::keys(const QString &encryption, const QList &keyOwnerJids, TrustLevels trustLevels) +QXmppTask>> QXmppTrustMemoryStorage::keys(const QString &encryption, const QList &keyOwnerJids, TrustLevels trustLevels) { QHash> keys; @@ -163,22 +163,22 @@ QFuture>> QXmppTrustMemoryStorage:: } } - return makeReadyFuture(std::move(keys)); + return makeReadyTask(std::move(keys)); } -QFuture QXmppTrustMemoryStorage::hasKey(const QString &encryption, const QString &keyOwnerJid, TrustLevels trustLevels) +QXmppTask QXmppTrustMemoryStorage::hasKey(const QString &encryption, const QString &keyOwnerJid, TrustLevels trustLevels) { const auto storedKeys = d->keys.values(encryption); for (const auto &key : storedKeys) { if (key.ownerJid == keyOwnerJid && trustLevels.testFlag(key.trustLevel)) { - return makeReadyFuture(std::move(true)); + return makeReadyTask(std::move(true)); } } - return makeReadyFuture(std::move(false)); + return makeReadyTask(std::move(false)); } -QFuture>> QXmppTrustMemoryStorage::setTrustLevel(const QString &encryption, const QMultiHash &keyIds, TrustLevel trustLevel) +QXmppTask>> QXmppTrustMemoryStorage::setTrustLevel(const QString &encryption, const QMultiHash &keyIds, TrustLevel trustLevel) { QHash> modifiedKeys; @@ -215,10 +215,10 @@ QFuture>> QXmppTrustMemoryStorage } } - return makeReadyFuture(std::move(modifiedKeys)); + return makeReadyTask(std::move(modifiedKeys)); } -QFuture>> QXmppTrustMemoryStorage::setTrustLevel(const QString &encryption, const QList &keyOwnerJids, TrustLevel oldTrustLevel, TrustLevel newTrustLevel) +QXmppTask>> QXmppTrustMemoryStorage::setTrustLevel(const QString &encryption, const QList &keyOwnerJids, TrustLevel oldTrustLevel, TrustLevel newTrustLevel) { QHash> modifiedKeys; @@ -231,27 +231,27 @@ QFuture>> QXmppTrustMemoryStorage } } - return makeReadyFuture(std::move(modifiedKeys)); + return makeReadyTask(std::move(modifiedKeys)); } -QFuture QXmppTrustMemoryStorage::trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId) +QXmppTask QXmppTrustMemoryStorage::trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId) { const auto keys = d->keys.values(encryption); for (const auto &key : keys) { if (key.id == keyId && key.ownerJid == keyOwnerJid) { - return makeReadyFuture(std::move(TrustLevel(key.trustLevel))); + return makeReadyTask(std::move(TrustLevel(key.trustLevel))); } } - return makeReadyFuture(std::move(TrustLevel::Undecided)); + return makeReadyTask(std::move(TrustLevel::Undecided)); } -QFuture QXmppTrustMemoryStorage::resetAll(const QString &encryption) +QXmppTask QXmppTrustMemoryStorage::resetAll(const QString &encryption) { d->securityPolicies.remove(encryption); d->ownKeys.remove(encryption); d->keys.remove(encryption); - return makeReadyFuture(); + return makeReadyTask(); } /// \endcond diff --git a/src/client/QXmppTrustMemoryStorage.h b/src/client/QXmppTrustMemoryStorage.h index f5e92569..53c70aa7 100644 --- a/src/client/QXmppTrustMemoryStorage.h +++ b/src/client/QXmppTrustMemoryStorage.h @@ -18,27 +18,27 @@ public: ~QXmppTrustMemoryStorage(); /// \cond - QFuture setSecurityPolicy(const QString &encryption, QXmpp::TrustSecurityPolicy securityPolicy) override; - QFuture resetSecurityPolicy(const QString &encryption) override; - QFuture securityPolicy(const QString &encryption) override; - - QFuture setOwnKey(const QString &encryption, const QByteArray &keyId) override; - QFuture resetOwnKey(const QString &encryption) override; - QFuture ownKey(const QString &encryption) override; - - QFuture addKeys(const QString &encryption, const QString &keyOwnerJid, const QList &keyIds, QXmpp::TrustLevel trustLevel = QXmpp::TrustLevel::AutomaticallyDistrusted) override; - QFuture removeKeys(const QString &encryption, const QList &keyIds) override; - QFuture removeKeys(const QString &encryption, const QString &keyOwnerJid) override; - QFuture removeKeys(const QString &encryption) override; - QFuture>> keys(const QString &encryption, QXmpp::TrustLevels trustLevels = {}) override; - QFuture>> keys(const QString &encryption, const QList &keyOwnerJids, QXmpp::TrustLevels trustLevels = {}) override; - QFuture hasKey(const QString &encryption, const QString &keyOwnerJid, QXmpp::TrustLevels trustLevels) override; - - QFuture>> setTrustLevel(const QString &encryption, const QMultiHash &keyIds, QXmpp::TrustLevel trustLevel) override; - QFuture>> setTrustLevel(const QString &encryption, const QList &keyOwnerJids, QXmpp::TrustLevel oldTrustLevel, QXmpp::TrustLevel newTrustLevel) override; - QFuture trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId) override; - - QFuture resetAll(const QString &encryption) override; + QXmppTask setSecurityPolicy(const QString &encryption, QXmpp::TrustSecurityPolicy securityPolicy) override; + QXmppTask resetSecurityPolicy(const QString &encryption) override; + QXmppTask securityPolicy(const QString &encryption) override; + + QXmppTask setOwnKey(const QString &encryption, const QByteArray &keyId) override; + QXmppTask resetOwnKey(const QString &encryption) override; + QXmppTask ownKey(const QString &encryption) override; + + QXmppTask addKeys(const QString &encryption, const QString &keyOwnerJid, const QList &keyIds, QXmpp::TrustLevel trustLevel = QXmpp::TrustLevel::AutomaticallyDistrusted) override; + QXmppTask removeKeys(const QString &encryption, const QList &keyIds) override; + QXmppTask removeKeys(const QString &encryption, const QString &keyOwnerJid) override; + QXmppTask removeKeys(const QString &encryption) override; + QXmppTask>> keys(const QString &encryption, QXmpp::TrustLevels trustLevels = {}) override; + QXmppTask>> keys(const QString &encryption, const QList &keyOwnerJids, QXmpp::TrustLevels trustLevels = {}) override; + QXmppTask hasKey(const QString &encryption, const QString &keyOwnerJid, QXmpp::TrustLevels trustLevels) override; + + QXmppTask>> setTrustLevel(const QString &encryption, const QMultiHash &keyIds, QXmpp::TrustLevel trustLevel) override; + QXmppTask>> setTrustLevel(const QString &encryption, const QList &keyOwnerJids, QXmpp::TrustLevel oldTrustLevel, QXmpp::TrustLevel newTrustLevel) override; + QXmppTask trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId) override; + + QXmppTask resetAll(const QString &encryption) override; /// \endcond private: diff --git a/src/client/QXmppTrustStorage.h b/src/client/QXmppTrustStorage.h index 0edc92a4..65c46e36 100644 --- a/src/client/QXmppTrustStorage.h +++ b/src/client/QXmppTrustStorage.h @@ -9,34 +9,35 @@ #include "QXmppTrustLevel.h" #include "QXmppTrustSecurityPolicy.h" -#include +template +class QXmppTask; class QXMPP_EXPORT QXmppTrustStorage { public: virtual ~QXmppTrustStorage() = default; - virtual QFuture setSecurityPolicy(const QString &encryption, QXmpp::TrustSecurityPolicy securityPolicy) = 0; - virtual QFuture resetSecurityPolicy(const QString &encryption) = 0; - virtual QFuture securityPolicy(const QString &encryption) = 0; + virtual QXmppTask setSecurityPolicy(const QString &encryption, QXmpp::TrustSecurityPolicy securityPolicy) = 0; + virtual QXmppTask resetSecurityPolicy(const QString &encryption) = 0; + virtual QXmppTask securityPolicy(const QString &encryption) = 0; - virtual QFuture setOwnKey(const QString &encryption, const QByteArray &keyId) = 0; - virtual QFuture resetOwnKey(const QString &encryption) = 0; - virtual QFuture ownKey(const QString &encryption) = 0; + virtual QXmppTask setOwnKey(const QString &encryption, const QByteArray &keyId) = 0; + virtual QXmppTask resetOwnKey(const QString &encryption) = 0; + virtual QXmppTask ownKey(const QString &encryption) = 0; - virtual QFuture addKeys(const QString &encryption, const QString &keyOwnerJid, const QList &keyIds, QXmpp::TrustLevel trustLevel = QXmpp::TrustLevel::AutomaticallyDistrusted) = 0; - virtual QFuture removeKeys(const QString &encryption, const QList &keyIds) = 0; - virtual QFuture removeKeys(const QString &encryption, const QString &keyOwnerJid) = 0; - virtual QFuture removeKeys(const QString &encryption) = 0; - virtual QFuture>> keys(const QString &encryption, QXmpp::TrustLevels trustLevels = {}) = 0; - virtual QFuture>> keys(const QString &encryption, const QList &keyOwnerJids, QXmpp::TrustLevels trustLevels = {}) = 0; - virtual QFuture hasKey(const QString &encryption, const QString &keyOwnerJid, QXmpp::TrustLevels trustLevels) = 0; + virtual QXmppTask addKeys(const QString &encryption, const QString &keyOwnerJid, const QList &keyIds, QXmpp::TrustLevel trustLevel = QXmpp::TrustLevel::AutomaticallyDistrusted) = 0; + virtual QXmppTask removeKeys(const QString &encryption, const QList &keyIds) = 0; + virtual QXmppTask removeKeys(const QString &encryption, const QString &keyOwnerJid) = 0; + virtual QXmppTask removeKeys(const QString &encryption) = 0; + virtual QXmppTask>> keys(const QString &encryption, QXmpp::TrustLevels trustLevels = {}) = 0; + virtual QXmppTask>> keys(const QString &encryption, const QList &keyOwnerJids, QXmpp::TrustLevels trustLevels = {}) = 0; + virtual QXmppTask hasKey(const QString &encryption, const QString &keyOwnerJid, QXmpp::TrustLevels trustLevels) = 0; - virtual QFuture>> setTrustLevel(const QString &encryption, const QMultiHash &keyIds, QXmpp::TrustLevel trustLevel) = 0; - virtual QFuture>> setTrustLevel(const QString &encryption, const QList &keyOwnerJids, QXmpp::TrustLevel oldTrustLevel, QXmpp::TrustLevel newTrustLevel) = 0; - virtual QFuture trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId) = 0; + virtual QXmppTask>> setTrustLevel(const QString &encryption, const QMultiHash &keyIds, QXmpp::TrustLevel trustLevel) = 0; + virtual QXmppTask>> setTrustLevel(const QString &encryption, const QList &keyOwnerJids, QXmpp::TrustLevel oldTrustLevel, QXmpp::TrustLevel newTrustLevel) = 0; + virtual QXmppTask trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId) = 0; - virtual QFuture resetAll(const QString &encryption) = 0; + virtual QXmppTask resetAll(const QString &encryption) = 0; }; #endif // QXMPPTRUSTSTORAGE_H diff --git a/src/client/QXmppUploadRequestManager.cpp b/src/client/QXmppUploadRequestManager.cpp index 17a58893..4a45d86b 100644 --- a/src/client/QXmppUploadRequestManager.cpp +++ b/src/client/QXmppUploadRequestManager.cpp @@ -185,7 +185,7 @@ QString QXmppUploadRequestManager::requestUploadSlot(const QString &fileName, /// \since QXmpp 1.5 /// auto QXmppUploadRequestManager::requestSlot(const QFileInfo &file, - const QString &uploadService) -> QFuture + const QString &uploadService) -> QXmppTask { return requestSlot(file, file.fileName(), uploadService); } @@ -206,7 +206,7 @@ auto QXmppUploadRequestManager::requestSlot(const QFileInfo &file, /// auto QXmppUploadRequestManager::requestSlot(const QFileInfo &file, const QString &customFileName, - const QString &uploadService) -> QFuture + const QString &uploadService) -> QXmppTask { return requestSlot(customFileName, file.size(), QMimeDatabase().mimeTypeForFile(file), @@ -233,12 +233,12 @@ auto QXmppUploadRequestManager::requestSlot(const QFileInfo &file, auto QXmppUploadRequestManager::requestSlot(const QString &fileName, qint64 fileSize, const QMimeType &mimeType, - const QString &uploadService) -> QFuture + const QString &uploadService) -> QXmppTask { if (!serviceFound() && uploadService.isEmpty()) { using Error = QXmppStanza::Error; const auto errorMessage = QStringLiteral("Couldn't request upload slot: No service found."); - return makeReadyFuture(SlotResult(Error(Error::Cancel, Error::FeatureNotImplemented, errorMessage))); + return makeReadyTask(SlotResult(Error(Error::Cancel, Error::FeatureNotImplemented, errorMessage))); } QXmppHttpUploadRequestIq iq; diff --git a/src/client/QXmppUploadRequestManager.h b/src/client/QXmppUploadRequestManager.h index 60a8da1e..e5ed752c 100644 --- a/src/client/QXmppUploadRequestManager.h +++ b/src/client/QXmppUploadRequestManager.h @@ -13,7 +13,7 @@ class QFileInfo; template -class QFuture; +class QXmppTask; class QMimeType; class QXmppHttpUploadRequestIq; class QXmppHttpUploadSlotIq; @@ -98,15 +98,15 @@ public: const QString &uploadService = QString()); using SlotResult = std::variant; - QFuture requestSlot(const QFileInfo &file, - const QString &uploadService = {}); - QFuture requestSlot(const QFileInfo &file, - const QString &customFileName, - const QString &uploadService = {}); - QFuture requestSlot(const QString &fileName, - qint64 fileSize, - const QMimeType &mimeType, - const QString &uploadService = {}); + QXmppTask requestSlot(const QFileInfo &file, + const QString &uploadService = {}); + QXmppTask requestSlot(const QFileInfo &file, + const QString &customFileName, + const QString &uploadService = {}); + QXmppTask requestSlot(const QString &fileName, + qint64 fileSize, + const QMimeType &mimeType, + const QString &uploadService = {}); bool serviceFound() const; diff --git a/src/client/QXmppUserLocationManager.cpp b/src/client/QXmppUserLocationManager.cpp index cf35013e..90c79dea 100644 --- a/src/client/QXmppUserLocationManager.cpp +++ b/src/client/QXmppUserLocationManager.cpp @@ -77,7 +77,7 @@ QStringList QXmppUserLocationManager::discoveryFeatures() const /// \param jid The account JID to request. /// auto QXmppUserLocationManager::request(const QString &jid) - -> QFuture + -> QXmppTask { return Pep::request(pubSub(client()), jid, ns_geoloc, this); } @@ -88,7 +88,7 @@ auto QXmppUserLocationManager::request(const QString &jid) /// \param item The User Location item to be published. /// auto QXmppUserLocationManager::publish(const QXmppGeolocItem &item) - -> QFuture + -> QXmppTask { return pubSub(client())->publishOwnPepItem(ns_geoloc, item); } diff --git a/src/client/QXmppUserLocationManager.h b/src/client/QXmppUserLocationManager.h index bc455d86..f9db4bc1 100644 --- a/src/client/QXmppUserLocationManager.h +++ b/src/client/QXmppUserLocationManager.h @@ -12,7 +12,7 @@ #include template -class QFuture; +class QXmppTask; class QXmppGeolocItem; class QXMPP_EXPORT QXmppUserLocationManager : public QXmppClientExtension, public QXmppPubSubEventHandler @@ -28,8 +28,8 @@ public: QStringList discoveryFeatures() const override; - QFuture request(const QString &jid); - QFuture publish(const Item &); + QXmppTask request(const QString &jid); + QXmppTask publish(const Item &); Q_SIGNAL void itemReceived(const QString &jid, const QXmppGeolocItem &); diff --git a/src/client/QXmppUserTuneManager.cpp b/src/client/QXmppUserTuneManager.cpp index e0023416..ab46db64 100644 --- a/src/client/QXmppUserTuneManager.cpp +++ b/src/client/QXmppUserTuneManager.cpp @@ -78,7 +78,7 @@ QStringList QXmppUserTuneManager::discoveryFeatures() const /// \param jid The account JID to request. /// auto QXmppUserTuneManager::request(const QString &jid) - -> QFuture + -> QXmppTask { return Pep::request(pubSub(client()), jid, ns_tune, this); } @@ -89,7 +89,7 @@ auto QXmppUserTuneManager::request(const QString &jid) /// \param item The User Tune item to be published. /// auto QXmppUserTuneManager::publish(const QXmppTuneItem &item) - -> QFuture + -> QXmppTask { return pubSub(client())->publishOwnPepItem(ns_tune, item); } diff --git a/src/client/QXmppUserTuneManager.h b/src/client/QXmppUserTuneManager.h index b25d1b00..90bc2d25 100644 --- a/src/client/QXmppUserTuneManager.h +++ b/src/client/QXmppUserTuneManager.h @@ -12,7 +12,7 @@ class QXmppTuneItem; template -class QFuture; +class QXmppTask; class QXMPP_EXPORT QXmppUserTuneManager : public QXmppClientExtension, public QXmppPubSubEventHandler { @@ -27,8 +27,8 @@ public: QStringList discoveryFeatures() const override; - QFuture request(const QString &jid); - QFuture publish(const QXmppTuneItem &); + QXmppTask request(const QString &jid); + QXmppTask publish(const QXmppTuneItem &); Q_SIGNAL void itemReceived(const QString &jid, const QXmppTuneItem &item); -- cgit v1.2.3