diff options
| author | Linus Jahn <lnj@kaidan.im> | 2022-08-16 21:00:15 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2023-01-03 22:05:54 +0100 |
| commit | b17284ee7d674416e0d11f1699f73fcc606262d4 (patch) | |
| tree | 86597f2bc2a1ed2d257e0cbf8e7de1ca54080c08 /src/client | |
| parent | 3271c6642439d4d3c0d8c634e2b3f4cf17b908a0 (diff) | |
| download | qxmpp-b17284ee7d674416e0d11f1699f73fcc606262d4.tar.gz | |
Introduce QXmppTask & QXmppPromise
Closes #502.
Co-authored-by: Jonah BrĂ¼chert <jbb@kaidan.im>
Diffstat (limited to 'src/client')
36 files changed, 444 insertions, 461 deletions
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<void> QXmppAtmManager::makeTrustDecisions(const QString &encryption, const QString &keyOwnerJid, const QList<QByteArray> &keyIdsForAuthentication, const QList<QByteArray> &keyIdsForDistrusting) +QXmppTask<void> QXmppAtmManager::makeTrustDecisions(const QString &encryption, const QString &keyOwnerJid, const QList<QByteArray> &keyIdsForAuthentication, const QList<QByteArray> &keyIdsForDistrusting) { - QFutureInterface<void> interface(QFutureInterfaceBase::Started); + QXmppPromise<void> promise; auto future = keys(encryption, TrustLevel::Authenticated | TrustLevel::ManuallyDistrusted); - await(future, this, [=](QHash<TrustLevel, QMultiHash<QString, QByteArray>> keys) mutable { + future.then(this, [=](QHash<TrustLevel, QMultiHash<QString, QByteArray>> 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<void> 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<void> 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<void> 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<void> 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<void> 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<void> QXmppAtmManager::makeTrustDecisions(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIdsForAuthentication, const QMultiHash<QString, QByteArray> &keyIdsForDistrusting) +QXmppTask<void> QXmppAtmManager::makeTrustDecisions(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIdsForAuthentication, const QMultiHash<QString, QByteArray> &keyIdsForDistrusting) { - QFutureInterface<void> interface(QFutureInterfaceBase::Started); + QXmppPromise<void> 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<void> QXmppAtmManager::makeTrustDecisions(const QString &encryption, con /// /// \param message message that can contain a trust message element /// -QFuture<void> QXmppAtmManager::handleMessage(const QXmppMessage &message) +QXmppTask<void> QXmppAtmManager::handleMessage(const QXmppMessage &message) { - QFutureInterface<void> interface(QFutureInterfaceBase::Started); + QXmppPromise<void> promise; if (const auto trustMessageElement = message.trustMessageElement(); trustMessageElement && @@ -299,7 +300,7 @@ QFuture<void> 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<void> 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<void> 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<void> QXmppAtmManager::handleMessage(const QXmppMessage &message) /// \param encryption encryption protocol namespace /// \param keyIds key owners' bare JIDs mapped to the IDs of their keys /// -QFuture<void> QXmppAtmManager::authenticate(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIds) +QXmppTask<void> QXmppAtmManager::authenticate(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIds) { if (keyIds.isEmpty()) { - return makeReadyFuture(); + return makeReadyTask(); } - QFutureInterface<void> interface(QFutureInterfaceBase::Started); + QXmppPromise<void> 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<void> 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<void> QXmppAtmManager::distrust(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIds) +QXmppTask<void> QXmppAtmManager::distrust(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIds) { if (keyIds.isEmpty()) { - return makeReadyFuture(); + return makeReadyTask(); } - QFutureInterface<void> interface(QFutureInterfaceBase::Started); + QXmppPromise<void> 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<void> QXmppAtmManager::distrust(const QString &encryption, const QMultiH /// \param encryption encryption protocol namespace /// \param keyOwnerJids bare JIDs of the key owners /// -QFuture<void> QXmppAtmManager::distrustAutomaticallyTrustedKeys(const QString &encryption, const QList<QString> &keyOwnerJids) +QXmppTask<void> QXmppAtmManager::distrustAutomaticallyTrustedKeys(const QString &encryption, const QList<QString> &keyOwnerJids) { return setTrustLevel(encryption, keyOwnerJids, TrustLevel::AutomaticallyTrusted, TrustLevel::AutomaticallyDistrusted); } @@ -448,26 +449,26 @@ QFuture<void> QXmppAtmManager::distrustAutomaticallyTrustedKeys(const QString &e /// \param encryption encryption protocol namespace /// \param senderKeyIds IDs of the keys that were used by the senders /// -QFuture<void> QXmppAtmManager::makePostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &senderKeyIds) +QXmppTask<void> QXmppAtmManager::makePostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &senderKeyIds) { - QFutureInterface<void> interface(QFutureInterfaceBase::Started); + QXmppPromise<void> promise; auto future = trustStorage()->keysForPostponedTrustDecisions(encryption, senderKeyIds); - await(future, this, [=](const QHash<bool, QMultiHash<QString, QByteArray>> &&keysForPostponedTrustDecisions) mutable { + future.then(this, [=](const QHash<bool, QMultiHash<QString, QByteArray>> &&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<void> QXmppAtmManager::makePostponedTrustDecisions(const QString &encryp /// \param keyOwners key owners containing the data for authentication or distrusting /// \param recipientJid JID of the recipient /// -QFuture<QXmpp::SendResult> QXmppAtmManager::sendTrustMessage(const QString &encryption, const QList<QXmppTrustMessageKeyOwner> &keyOwners, const QString &recipientJid) +QXmppTask<QXmpp::SendResult> QXmppAtmManager::sendTrustMessage(const QString &encryption, const QList<QXmppTrustMessageKeyOwner> &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<typename T> +class QXmppTask; class QXMPP_EXPORT QXmppAtmManager : public QXmppTrustManager { @@ -18,7 +20,7 @@ class QXMPP_EXPORT QXmppAtmManager : public QXmppTrustManager public: QXmppAtmManager(QXmppAtmTrustStorage *trustStorage); - QFuture<void> makeTrustDecisions(const QString &encryption, const QString &keyOwnerJid, const QList<QByteArray> &keyIdsForAuthentication, const QList<QByteArray> &keyIdsForDistrusting = {}); + QXmppTask<void> makeTrustDecisions(const QString &encryption, const QString &keyOwnerJid, const QList<QByteArray> &keyIdsForAuthentication, const QList<QByteArray> &keyIdsForDistrusting = {}); protected: /// \cond @@ -28,16 +30,16 @@ private: Q_SLOT void handleMessageReceived(const QXmppMessage &message); /// \endcond - QFuture<void> makeTrustDecisions(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIdsForAuthentication, const QMultiHash<QString, QByteArray> &keyIdsForDistrusting); - QFuture<void> handleMessage(const QXmppMessage &message); + QXmppTask<void> makeTrustDecisions(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIdsForAuthentication, const QMultiHash<QString, QByteArray> &keyIdsForDistrusting); + QXmppTask<void> handleMessage(const QXmppMessage &message); - QFuture<void> authenticate(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIds); - QFuture<void> distrust(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIds); + QXmppTask<void> authenticate(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIds); + QXmppTask<void> distrust(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIds); - QFuture<void> distrustAutomaticallyTrustedKeys(const QString &encryption, const QList<QString> &keyOwnerJids); - QFuture<void> makePostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &senderKeyIds); + QXmppTask<void> distrustAutomaticallyTrustedKeys(const QString &encryption, const QList<QString> &keyOwnerJids); + QXmppTask<void> makePostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &senderKeyIds); - QFuture<QXmpp::SendResult> sendTrustMessage(const QString &encryption, const QList<QXmppTrustMessageKeyOwner> &keyOwners, const QString &recipientJid); + QXmppTask<QXmpp::SendResult> sendTrustMessage(const QString &encryption, const QList<QXmppTrustMessageKeyOwner> &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<void> QXmppAtmTrustMemoryStorage::addKeysForPostponedTrustDecisions(const QString &encryption, const QByteArray &senderKeyId, const QList<QXmppTrustMessageKeyOwner> &keyOwners) +QXmppTask<void> QXmppAtmTrustMemoryStorage::addKeysForPostponedTrustDecisions(const QString &encryption, const QByteArray &senderKeyId, const QList<QXmppTrustMessageKeyOwner> &keyOwners) { const auto addKeys = [&](const QXmppTrustMessageKeyOwner &keyOwner, bool trust, const QList<QByteArray> &keyIds) { for (const auto &keyId : keyIds) { @@ -85,10 +85,10 @@ QFuture<void> QXmppAtmTrustMemoryStorage::addKeysForPostponedTrustDecisions(cons addKeys(keyOwner, false, keyOwner.distrustedKeys()); } - return makeReadyFuture(); + return makeReadyTask(); } -QFuture<void> QXmppAtmTrustMemoryStorage::removeKeysForPostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &keyIdsForAuthentication, const QList<QByteArray> &keyIdsForDistrusting) +QXmppTask<void> QXmppAtmTrustMemoryStorage::removeKeysForPostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &keyIdsForAuthentication, const QList<QByteArray> &keyIdsForDistrusting) { for (auto itr = d->keys.find(encryption); itr != d->keys.end() && itr.key() == encryption;) { @@ -101,10 +101,10 @@ QFuture<void> QXmppAtmTrustMemoryStorage::removeKeysForPostponedTrustDecisions(c } } - return makeReadyFuture(); + return makeReadyTask(); } -QFuture<void> QXmppAtmTrustMemoryStorage::removeKeysForPostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &senderKeyIds) +QXmppTask<void> QXmppAtmTrustMemoryStorage::removeKeysForPostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &senderKeyIds) { for (auto itr = d->keys.find(encryption); itr != d->keys.end() && itr.key() == encryption;) { @@ -115,16 +115,16 @@ QFuture<void> QXmppAtmTrustMemoryStorage::removeKeysForPostponedTrustDecisions(c } } - return makeReadyFuture(); + return makeReadyTask(); } -QFuture<void> QXmppAtmTrustMemoryStorage::removeKeysForPostponedTrustDecisions(const QString &encryption) +QXmppTask<void> QXmppAtmTrustMemoryStorage::removeKeysForPostponedTrustDecisions(const QString &encryption) { d->keys.remove(encryption); - return makeReadyFuture(); + return makeReadyTask(); } -QFuture<QHash<bool, QMultiHash<QString, QByteArray>>> QXmppAtmTrustMemoryStorage::keysForPostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &senderKeyIds) +QXmppTask<QHash<bool, QMultiHash<QString, QByteArray>>> QXmppAtmTrustMemoryStorage::keysForPostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &senderKeyIds) { QHash<bool, QMultiHash<QString, QByteArray>> keys; @@ -135,13 +135,13 @@ QFuture<QHash<bool, QMultiHash<QString, QByteArray>>> QXmppAtmTrustMemoryStorage } } - return makeReadyFuture(std::move(keys)); + return makeReadyTask(std::move(keys)); } -QFuture<void> QXmppAtmTrustMemoryStorage::resetAll(const QString &encryption) +QXmppTask<void> 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<void> addKeysForPostponedTrustDecisions(const QString &encryption, const QByteArray &senderKeyId, const QList<QXmppTrustMessageKeyOwner> &keyOwners) override; - QFuture<void> removeKeysForPostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &keyIdsForAuthentication, const QList<QByteArray> &keyIdsForDistrusting) override; - QFuture<void> removeKeysForPostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &senderKeyIds) override; - QFuture<void> removeKeysForPostponedTrustDecisions(const QString &encryption) override; - QFuture<QHash<bool, QMultiHash<QString, QByteArray>>> keysForPostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &senderKeyIds = {}) override; + QXmppTask<void> addKeysForPostponedTrustDecisions(const QString &encryption, const QByteArray &senderKeyId, const QList<QXmppTrustMessageKeyOwner> &keyOwners) override; + QXmppTask<void> removeKeysForPostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &keyIdsForAuthentication, const QList<QByteArray> &keyIdsForDistrusting) override; + QXmppTask<void> removeKeysForPostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &senderKeyIds) override; + QXmppTask<void> removeKeysForPostponedTrustDecisions(const QString &encryption) override; + QXmppTask<QHash<bool, QMultiHash<QString, QByteArray>>> keysForPostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &senderKeyIds = {}) override; - QFuture<void> resetAll(const QString &encryption) override; + QXmppTask<void> 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 <QList> + 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<void> addKeysForPostponedTrustDecisions(const QString &encryption, const QByteArray &senderKeyId, const QList<QXmppTrustMessageKeyOwner> &keyOwners) = 0; - virtual QFuture<void> removeKeysForPostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &keyIdsForAuthentication, const QList<QByteArray> &keyIdsForDistrusting) = 0; - virtual QFuture<void> removeKeysForPostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &senderKeyIds) = 0; - virtual QFuture<void> removeKeysForPostponedTrustDecisions(const QString &encryption) = 0; - virtual QFuture<QHash<bool, QMultiHash<QString, QByteArray>>> keysForPostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &senderKeyIds = {}) = 0; + virtual QXmppTask<void> addKeysForPostponedTrustDecisions(const QString &encryption, const QByteArray &senderKeyId, const QList<QXmppTrustMessageKeyOwner> &keyOwners) = 0; + virtual QXmppTask<void> removeKeysForPostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &keyIdsForAuthentication, const QList<QByteArray> &keyIdsForDistrusting) = 0; + virtual QXmppTask<void> removeKeysForPostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &senderKeyIds) = 0; + virtual QXmppTask<void> removeKeysForPostponedTrustDecisions(const QString &encryption) = 0; + virtual QXmppTask<QHash<bool, QMultiHash<QString, QByteArray>>> keysForPostponedTrustDecisions(const QString &encryption, const QList<QByteArray> &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 <QDomElement> -#include <QFuture> #include <QSslSocket> #include <QTimer> @@ -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<QXmpp::SendResult> QXmppClient::send(QXmppStanza &&stanza, const std::optional<QXmppSendStanzaParams> ¶ms) +QXmppTask<QXmpp::SendResult> QXmppClient::send(QXmppStanza &&stanza, const std::optional<QXmppSendStanzaParams> ¶ms) { - const auto sendEncrypted = [this](QFuture<MessageEncryptResult> &&future) { - QFutureInterface<QXmpp::SendResult> interface(QFutureInterfaceBase::Started); - - await(future, this, [this, interface](MessageEncryptResult &&result) mutable { + const auto sendEncrypted = [this](QXmppTask<MessageEncryptResult> &&future) { + QXmppPromise<QXmpp::SendResult> interface; + future.then(this, [this, interface](MessageEncryptResult &&result) mutable { if (const auto *xml = std::get_if<QByteArray>(&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<QXmppError>(result) }); + interface.finish(std::get<QXmppError>(std::move(result))); } }); - return interface.future(); + return interface.task(); }; if (d->encryptionExtension) { @@ -452,13 +450,11 @@ QFuture<QXmpp::SendResult> 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<QXmpp::SendResult> QXmppClient::sendUnencrypted(QXmppStanza &&stanza, const std::optional<QXmppSendStanzaParams> &) +QXmppTask<QXmpp::SendResult> QXmppClient::sendUnencrypted(QXmppStanza &&stanza, const std::optional<QXmppSendStanzaParams> &) { return d->stream->send(stanza); } @@ -472,7 +468,7 @@ QFuture<QXmpp::SendResult> QXmppClient::sendUnencrypted(QXmppStanza &&stanza, co /// /// \since QXmpp 1.5 /// -QFuture<QXmpp::SendResult> QXmppClient::reply(QXmppStanza &&stanza, const std::optional<QXmppE2eeMetadata> &e2eeMetadata, const std::optional<QXmppSendStanzaParams> ¶ms) +QXmppTask<QXmpp::SendResult> QXmppClient::reply(QXmppStanza &&stanza, const std::optional<QXmppE2eeMetadata> &e2eeMetadata, const std::optional<QXmppSendStanzaParams> ¶ms) { // This should pick the right e2ee manager as soon as multiple encryptions // in parallel are supported. @@ -497,7 +493,7 @@ QFuture<QXmpp::SendResult> QXmppClient::reply(QXmppStanza &&stanza, const std::o /// /// \since QXmpp 1.5 /// -QFuture<QXmppClient::IqResult> QXmppClient::sendIq(QXmppIq &&iq, const std::optional<QXmppSendStanzaParams> &) +QXmppTask<QXmppClient::IqResult> QXmppClient::sendIq(QXmppIq &&iq, const std::optional<QXmppSendStanzaParams> &) { return d->stream->sendIq(std::move(iq)); } @@ -515,57 +511,52 @@ QFuture<QXmppClient::IqResult> QXmppClient::sendIq(QXmppIq &&iq, const std::opti /// /// \since QXmpp 1.5 /// -QFuture<QXmppClient::IqResult> QXmppClient::sendSensitiveIq(QXmppIq &&iq, const std::optional<QXmppSendStanzaParams> ¶ms) +QXmppTask<QXmppClient::IqResult> QXmppClient::sendSensitiveIq(QXmppIq &&iq, const std::optional<QXmppSendStanzaParams> ¶ms) { - const auto sendEncrypted = [this](QFuture<IqEncryptResult> &&future, const QString &id, const QString &to) { - QFutureInterface<IqResult> interface(QFutureInterfaceBase::Started); - await(future, this, [this, interface, id, to](IqEncryptResult result) mutable { + const auto sendEncrypted = [this](QXmppTask<IqEncryptResult> &&future, const QString &id, const QString &to) { + QXmppPromise<IqResult> interface; + future.then(this, [this, interface, id, to](IqEncryptResult result) mutable { if (const auto *xml = std::get_if<QByteArray>(&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<QDomElement>(&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<QDomElement>(&result)) { + future.then(this, [interface, encryptedDom = *encryptedDom](IqDecryptResult result) mutable { + if (auto dom = std::get_if<QDomElement>(&result)) { // decrypted result - interface.reportResult(*dom); + interface.finish(std::move(*dom)); } else if (std::holds_alternative<QXmppE2eeExtension::NotEncrypted>(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<QXmppError>(&result)) { - interface.reportResult(*error); + interface.finish(std::move(encryptedDom)); + } else if (auto error = std::get_if<QXmppError>(&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<QXmppError>(result)); - interface.reportFinished(); + interface.finish(std::get<QXmppError>(result)); } }); } else { - interface.reportResult(std::get<QXmppError>(result)); - interface.reportFinished(); + interface.finish(std::get<QXmppError>(result)); } }); - return interface.future(); + return interface.task(); }; if (iq.id().isEmpty() || d->stream->hasIqId(iq.id())) { @@ -595,7 +586,7 @@ QFuture<QXmppClient::IqResult> QXmppClient::sendSensitiveIq(QXmppIq &&iq, const /// /// \since QXmpp 1.5 /// -QFuture<QXmppClient::EmptyResult> QXmppClient::sendGenericIq(QXmppIq &&iq, const std::optional<QXmppSendStanzaParams> &) +QXmppTask<QXmppClient::EmptyResult> QXmppClient::sendGenericIq(QXmppIq &&iq, const std::optional<QXmppSendStanzaParams> &) { 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 <QSslError> template<typename T> -class QFuture; +class QXmppTask; class QXmppE2eeExtension; class QXmppClientExtension; @@ -219,12 +219,12 @@ public: State state() const; QXmppStanza::Error::Condition xmppStreamError(); - QFuture<QXmpp::SendResult> send(QXmppStanza &&, const std::optional<QXmppSendStanzaParams> & = {}); - QFuture<QXmpp::SendResult> sendUnencrypted(QXmppStanza &&, const std::optional<QXmppSendStanzaParams> & = {}); - QFuture<QXmpp::SendResult> reply(QXmppStanza &&stanza, const std::optional<QXmppE2eeMetadata> &e2eeMetadata, const std::optional<QXmppSendStanzaParams> & = {}); - QFuture<IqResult> sendIq(QXmppIq &&, const std::optional<QXmppSendStanzaParams> & = {}); - QFuture<IqResult> sendSensitiveIq(QXmppIq &&, const std::optional<QXmppSendStanzaParams> & = {}); - QFuture<EmptyResult> sendGenericIq(QXmppIq &&, const std::optional<QXmppSendStanzaParams> & = {}); + QXmppTask<QXmpp::SendResult> send(QXmppStanza &&, const std::optional<QXmppSendStanzaParams> & = {}); + QXmppTask<QXmpp::SendResult> sendUnencrypted(QXmppStanza &&, const std::optional<QXmppSendStanzaParams> & = {}); + QXmppTask<QXmpp::SendResult> reply(QXmppStanza &&stanza, const std::optional<QXmppE2eeMetadata> &e2eeMetadata, const std::optional<QXmppSendStanzaParams> & = {}); + QXmppTask<IqResult> sendIq(QXmppIq &&, const std::optional<QXmppSendStanzaParams> & = {}); + QXmppTask<IqResult> sendSensitiveIq(QXmppIq &&, const std::optional<QXmppSendStanzaParams> & = {}); + QXmppTask<EmptyResult> sendGenericIq(QXmppIq &&, const std::optional<QXmppSendStanzaParams> & = {}); #if QXMPP_DEPRECATED_SINCE(1, 1) QT_DEPRECATED_X("Use QXmppClient::findExtension<QXmppRosterManager>() 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::InfoResult> QXmppDiscoveryManager::requestDiscoInfo(const QString &jid, const QString &node) +QXmppTask<QXmppDiscoveryManager::InfoResult> QXmppDiscoveryManager::requestDiscoInfo(const QString &jid, const QString &node) { QXmppDiscoveryIq request; request.setType(QXmppIq::Get); @@ -140,7 +140,7 @@ QFuture<QXmppDiscoveryManager::InfoResult> QXmppDiscoveryManager::requestDiscoIn /// /// \since QXmpp 1.5 /// -QFuture<QXmppDiscoveryManager::ItemsResult> QXmppDiscoveryManager::requestDiscoItems(const QString &jid, const QString &node) +QXmppTask<QXmppDiscoveryManager::ItemsResult> 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 <variant> template<typename T> -class QFuture; +class QXmppTask; class QXmppDataForm; class QXmppDiscoveryIq; class QXmppDiscoveryManagerPrivate; @@ -35,8 +35,8 @@ public: using InfoResult = std::variant<QXmppDiscoveryIq, QXmppStanza::Error>; using ItemsResult = std::variant<QList<QXmppDiscoveryIq::Item>, QXmppStanza::Error>; - QFuture<InfoResult> requestDiscoInfo(const QString &jid, const QString &node = {}); - QFuture<ItemsResult> requestDiscoItems(const QString &jid, const QString &node = {}); + QXmppTask<InfoResult> requestDiscoInfo(const QString &jid, const QString &node = {}); + QXmppTask<ItemsResult> 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<typename T> -class QFuture; +class QXmppTask; class QXmppE2eeExtension : public QXmppExtension { @@ -30,10 +30,10 @@ public: using IqEncryptResult = std::variant<QByteArray, QXmppError>; using IqDecryptResult = std::variant<QDomElement, NotEncrypted, QXmppError>; - virtual QFuture<MessageEncryptResult> encryptMessage(QXmppMessage &&, const std::optional<QXmppSendStanzaParams> &) = 0; - virtual QFuture<MessageDecryptResult> decryptMessage(QXmppMessage &&) = 0; - virtual QFuture<IqEncryptResult> encryptIq(QXmppIq &&, const std::optional<QXmppSendStanzaParams> &) = 0; - virtual QFuture<IqDecryptResult> decryptIq(const QDomElement &) = 0; + virtual QXmppTask<MessageEncryptResult> encryptMessage(QXmppMessage &&, const std::optional<QXmppSendStanzaParams> &) = 0; + virtual QXmppTask<MessageDecryptResult> decryptMessage(QXmppMessage &&) = 0; + virtual QXmppTask<IqEncryptResult> encryptIq(QXmppIq &&, const std::optional<QXmppSendStanzaParams> &) = 0; + virtual QXmppTask<IqDecryptResult> 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<EntityTimeResult> +auto QXmppEntityTimeManager::requestEntityTime(const QString &jid) -> QXmppTask<EntityTimeResult> { 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 <variant> template<class T> -class QFuture; +class QXmppTask; class QXmppEntityTimeIq; /// @@ -27,7 +27,7 @@ public: QString requestTime(const QString &jid); using EntityTimeResult = std::variant<QXmppEntityTimeIq, QXmppStanza::Error>; - QFuture<EntityTimeResult> requestEntityTime(const QString &jid); + QXmppTask<EntityTimeResult> 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<QXmppHttpUpload> QXmppHttpUploadManager::uploadFile(std::unique_ } auto future = client()->findExtension<QXmppUploadRequestManager>()->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<QXmppHttpUpload> 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<QXmppE2eeMetadata> &e2eeMetadata, - QFuture<T> future) + QXmppTask<T> 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 <unordered_map> #include <QDomElement> -#include <QFuture> -#include <QFutureInterface> using namespace QXmpp::Private; struct RetrieveRequestState { - QFutureInterface<QXmppMamManager::RetrieveResult> interface; + QXmppPromise<QXmppMamManager::RetrieveResult> promise; QXmppMamResultIq iq; QVector<QXmppMessage> messages; - void reportFinished() + void finish() { - interface.reportResult( + promise.finish( QXmppMamManager::RetrievedMessages { std::move(iq), std::move(messages) }); - interface.reportFinished(); } }; @@ -89,7 +86,6 @@ QStringList QXmppMamManager::discoveryFeatures() const bool QXmppMamManager::handleStanza(const QDomElement &element) { - if (element.tagName() == "message") { QDomElement resultElement = element.firstChildElement("result"); if (!resultElement.isNull() && resultElement.namespaceURI() == ns_mam) { @@ -241,14 +237,14 @@ QString QXmppMamManager::retrieveArchivedMessages(const QString &to, /// /// \since QXmpp 1.5 /// -QFuture<QXmppMamManager::RetrieveResult> QXmppMamManager::retrieveMessages(const QString &to, const QString &node, const QString &jid, const QDateTime &start, const QDateTime &end, const QXmppResultSetQuery &resultSetQuery) +QXmppTask<QXmppMamManager::RetrieveResult> QXmppMamManager::retrieveMessages(const QString &to, const QString &node, const QString &jid, const QDateTime &start, const QDateTime &end, const QXmppResultSetQuery &resultSetQuery) { auto queryIq = buildRequest(to, node, jid, start, end, resultSetQuery); auto [itr, _] = d->ongoingRequests.insert({ queryIq.queryId().toStdString(), RetrieveRequestState() }); // retrieve messages - await(client()->sendIq(std::move(queryIq)), this, [this, queryId = queryIq.queryId()](QXmppClient::IqResult result) { + client()->sendIq(std::move(queryIq)).then(this, [this, queryId = queryIq.queryId()](QXmppClient::IqResult result) { auto itr = d->ongoingRequests.find(queryId.toStdString()); if (itr == d->ongoingRequests.end()) { return; @@ -259,8 +255,7 @@ QFuture<QXmppMamManager::RetrieveResult> QXmppMamManager::retrieveMessages(const iq.parse(std::get<QDomElement>(result)); if (iq.type() == QXmppIq::Error) { - itr->second.interface.reportResult(QXmppError { iq.error().text(), iq.error() }); - itr->second.interface.reportFinished(); + itr->second.promise.finish(QXmppError { iq.error().text(), iq.error() }); d->ongoingRequests.erase(itr); return; } @@ -277,7 +272,7 @@ QFuture<QXmppMamManager::RetrieveResult> QXmppMamManager::retrieveMessages(const auto message = messages.at(i); (*running)++; - await(e2eeExt->decryptMessage(std::move(message)), this, [this, i, running, queryId](auto result) { + e2eeExt->decryptMessage(std::move(message)).then(this, [this, i, running, queryId](auto result) { (*running)--; auto itr = d->ongoingRequests.find(queryId.toStdString()); if (itr == d->ongoingRequests.end()) { @@ -290,21 +285,20 @@ QFuture<QXmppMamManager::RetrieveResult> QXmppMamManager::retrieveMessages(const warning(QStringLiteral("Error decrypting message.")); } if (*running == 0) { - itr->second.reportFinished(); + itr->second.finish(); d->ongoingRequests.erase(itr); } }); } } else { - itr->second.reportFinished(); + itr->second.finish(); d->ongoingRequests.erase(itr); } } else { - itr->second.interface.reportResult(std::get<QXmppError>(result)); - itr->second.interface.reportFinished(); + itr->second.promise.finish(std::get<QXmppError>(result)); d->ongoingRequests.erase(itr); } }); - return itr->second.interface.future(); + return itr->second.promise.task(); } 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 <QDateTime> template<typename T> -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<RetrieveResult> 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<RetrieveResult> 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 <QDomElement> 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 <QCryptographicHash> @@ -325,7 +326,7 @@ bool QXmppOutgoingClient::isStreamResumed() const /// /// \since QXmpp 1.5 /// -QFuture<QXmppStream::IqResult> QXmppOutgoingClient::sendIq(QXmppIq &&iq) +QXmppTask<QXmppStream::IqResult> 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<IqResult> sendIq(QXmppIq &&); + QXmppTask<IqResult> 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<T, QXmppStanza::Error>; using PublishResult = std::variant<QString, QXmppStanza::Error>; template<typename ItemT> -inline QFuture<GetResult<ItemT>> request(QXmppPubSubManager *pubSub, const QString &jid, const QString &nodeName, QObject *parent) +inline QXmppTask<GetResult<ItemT>> 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 <QDomElement> -#include <QFutureInterface> 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::FeaturesResult> QXmppPubSubManager::requestFeatures(const QString &serviceJid, ServiceType serviceType) +QXmppTask<QXmppPubSubManager::FeaturesResult> QXmppPubSubManager::requestFeatures(const QString &serviceJid, ServiceType serviceType) { QXmppDiscoveryIq request; request.setType(QXmppIq::Get); @@ -259,7 +258,7 @@ QFuture<QXmppPubSubManager::FeaturesResult> QXmppPubSubManager::requestFeatures( /// \param jid Jabber ID of the entity hosting the pubsub service /// \return /// -QFuture<QXmppPubSubManager::NodesResult> QXmppPubSubManager::requestNodes(const QString &jid) +QXmppTask<QXmppPubSubManager::NodesResult> QXmppPubSubManager::requestNodes(const QString &jid) { QXmppDiscoveryIq request; request.setType(QXmppIq::Get); @@ -293,7 +292,7 @@ QFuture<QXmppPubSubManager::NodesResult> QXmppPubSubManager::requestNodes(const /// \param nodeName the name of the node to be created /// \return /// -auto QXmppPubSubManager::createNode(const QString &jid, const QString &nodeName) -> QFuture<Result> +auto QXmppPubSubManager::createNode(const QString &jid, const QString &nodeName) -> QXmppTask<Result> { 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<Result> +auto QXmppPubSubManager::createNode(const QString &jid, const QString &nodeName, const QXmppPubSubNodeConfig &config) -> QXmppTask<Result> { 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::InstantNodeResult> QXmppPubSubManager::createInstantNode(const QString &jid) +QXmppTask<QXmppPubSubManager::InstantNodeResult> QXmppPubSubManager::createInstantNode(const QString &jid) { PubSubIq request; request.setType(QXmppIq::Set); @@ -360,7 +359,7 @@ QFuture<QXmppPubSubManager::InstantNodeResult> QXmppPubSubManager::createInstant /// \param config The configuration for the node /// \return /// -auto QXmppPubSubManager::createInstantNode(const QString &jid, const QXmppPubSubNodeConfig &config) -> QFuture<InstantNodeResult> +auto QXmppPubSubManager::createInstantNode(const QString &jid, const QXmppPubSubNodeConfig &config) -> QXmppTask<InstantNodeResult> { 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<Result> +auto QXmppPubSubManager::deleteNode(const QString &jid, const QString &nodeName) -> QXmppTask<Result> { 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::ItemIdsResult> QXmppPubSubManager::requestItemIds(const QString &serviceJid, const QString &nodeName) +QXmppTask<QXmppPubSubManager::ItemIdsResult> QXmppPubSubManager::requestItemIds(const QString &serviceJid, const QString &nodeName) { QXmppDiscoveryIq request; request.setType(QXmppIq::Get); @@ -430,7 +429,7 @@ QFuture<QXmppPubSubManager::ItemIdsResult> 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<Result> +auto QXmppPubSubManager::retractItem(const QString &jid, const QString &nodeName, const QString &itemId) -> QXmppTask<Result> { 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<Result> +auto QXmppPubSubManager::retractItem(const QString &jid, const QString &nodeName, StandardItemId itemId) -> QXmppTask<Result> { 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<Result> +auto QXmppPubSubManager::purgeItems(const QString &jid, const QString &nodeName) -> QXmppTask<Result> { 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::SubscriptionsResult> QXmppPubSubManager::requestSubscriptions(const QString &jid) +QXmppTask<QXmppPubSubManager::SubscriptionsResult> QXmppPubSubManager::requestSubscriptions(const QString &jid) { return requestSubscriptions(jid, {}); } @@ -491,7 +490,7 @@ QFuture<QXmppPubSubManager::SubscriptionsResult> QXmppPubSubManager::requestSubs /// \param nodeName Name of the node on the pubsub service /// \return /// -QFuture<QXmppPubSubManager::SubscriptionsResult> QXmppPubSubManager::requestSubscriptions(const QString &jid, const QString &nodeName) +QXmppTask<QXmppPubSubManager::SubscriptionsResult> QXmppPubSubManager::requestSubscriptions(const QString &jid, const QString &nodeName) { PubSubIq request; request.setType(QXmppIq::Get); @@ -515,7 +514,7 @@ QFuture<QXmppPubSubManager::SubscriptionsResult> QXmppPubSubManager::requestSubs /// \param nodeName Name of the pubsub node on the service. /// \return /// -QFuture<QXmppPubSubManager::AffiliationsResult> QXmppPubSubManager::requestNodeAffiliations(const QString &jid, const QString &nodeName) +QXmppTask<QXmppPubSubManager::AffiliationsResult> QXmppPubSubManager::requestNodeAffiliations(const QString &jid, const QString &nodeName) { PubSubIq request; request.setType(QXmppIq::Get); @@ -535,7 +534,7 @@ QFuture<QXmppPubSubManager::AffiliationsResult> QXmppPubSubManager::requestNodeA /// \param jid JID of the pubsub service /// \return /// -QFuture<QXmppPubSubManager::AffiliationsResult> QXmppPubSubManager::requestAffiliations(const QString &jid) +QXmppTask<QXmppPubSubManager::AffiliationsResult> QXmppPubSubManager::requestAffiliations(const QString &jid) { return requestAffiliations(jid, {}); } @@ -547,7 +546,7 @@ QFuture<QXmppPubSubManager::AffiliationsResult> QXmppPubSubManager::requestAffil /// \param nodeName Name of the pubsub node on the service. /// \return /// -QFuture<QXmppPubSubManager::AffiliationsResult> QXmppPubSubManager::requestAffiliations(const QString &jid, const QString &nodeName) +QXmppTask<QXmppPubSubManager::AffiliationsResult> QXmppPubSubManager::requestAffiliations(const QString &jid, const QString &nodeName) { PubSubIq request; request.setType(QXmppIq::Get); @@ -568,7 +567,7 @@ QFuture<QXmppPubSubManager::AffiliationsResult> QXmppPubSubManager::requestAffil /// \param nodeName Name of the pubsub node on the service. /// \return /// -QFuture<QXmppPubSubManager::OptionsResult> QXmppPubSubManager::requestSubscribeOptions(const QString &service, const QString &nodeName) +QXmppTask<QXmppPubSubManager::OptionsResult> QXmppPubSubManager::requestSubscribeOptions(const QString &service, const QString &nodeName) { return requestSubscribeOptions(service, nodeName, client()->configuration().jidBare()); } @@ -581,7 +580,7 @@ QFuture<QXmppPubSubManager::OptionsResult> QXmppPubSubManager::requestSubscribeO /// \param subscriberJid JID of the user to request the options for /// \return /// -QFuture<QXmppPubSubManager::OptionsResult> QXmppPubSubManager::requestSubscribeOptions(const QString &service, const QString &nodeName, const QString &subscriberJid) +QXmppTask<QXmppPubSubManager::OptionsResult> QXmppPubSubManager::requestSubscribeOptions(const QString &service, const QString &nodeName, const QString &subscriberJid) { PubSubIq request; request.setType(QXmppIq::Get); @@ -614,7 +613,7 @@ QFuture<QXmppPubSubManager::OptionsResult> QXmppPubSubManager::requestSubscribeO /// \param options The new options to be set /// \return /// -QFuture<QXmppPubSubManager::Result> QXmppPubSubManager::setSubscribeOptions(const QString &service, const QString &nodeName, const QXmppPubSubSubscribeOptions &options) +QXmppTask<QXmppPubSubManager::Result> 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::Result> QXmppPubSubManager::setSubscribeOptions(cons /// \param subscriberJid The JID of the user /// \return /// -QFuture<QXmppPubSubManager::Result> QXmppPubSubManager::setSubscribeOptions(const QString &service, const QString &nodeName, const QXmppPubSubSubscribeOptions &options, const QString &subscriberJid) +QXmppTask<QXmppPubSubManager::Result> 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::Result> QXmppPubSubManager::setSubscribeOptions(cons /// \sa configureNode() /// \sa cancelNodeConfiguration() /// -QFuture<QXmppPubSubManager::NodeConfigResult> QXmppPubSubManager::requestNodeConfiguration(const QString &service, const QString &nodeName) +QXmppTask<QXmppPubSubManager::NodeConfigResult> QXmppPubSubManager::requestNodeConfiguration(const QString &service, const QString &nodeName) { using Error = QXmppStanza::Error; @@ -689,7 +688,7 @@ QFuture<QXmppPubSubManager::NodeConfigResult> QXmppPubSubManager::requestNodeCon /// /// \sa requestNodeConfiguration() /// -QFuture<QXmppPubSubManager::Result> QXmppPubSubManager::configureNode(const QString &service, const QString &nodeName, const QXmppPubSubNodeConfig &config) +QXmppTask<QXmppPubSubManager::Result> QXmppPubSubManager::configureNode(const QString &service, const QString &nodeName, const QXmppPubSubNodeConfig &config) { PubSubIq request; request.setType(QXmppIq::Set); @@ -710,7 +709,7 @@ QFuture<QXmppPubSubManager::Result> QXmppPubSubManager::configureNode(const QStr /// /// \sa requestNodeConfiguration() /// -QFuture<QXmppPubSubManager::Result> QXmppPubSubManager::cancelNodeConfiguration(const QString &service, const QString &nodeName) +QXmppTask<QXmppPubSubManager::Result> QXmppPubSubManager::cancelNodeConfiguration(const QString &service, const QString &nodeName) { PubSubIq request; request.setType(QXmppIq::Set); @@ -730,7 +729,7 @@ QFuture<QXmppPubSubManager::Result> QXmppPubSubManager::cancelNodeConfiguration( /// \param nodeName name of the pubsub node being subscribed /// \param subscriberJid bare or full JID of the subscriber /// -QFuture<QXmppPubSubManager::Result> QXmppPubSubManager::subscribeToNode(const QString &serviceJid, const QString &nodeName, const QString &subscriberJid) +QXmppTask<QXmppPubSubManager::Result> QXmppPubSubManager::subscribeToNode(const QString &serviceJid, const QString &nodeName, const QString &subscriberJid) { PubSubIq request; request.setType(QXmppIq::Set); @@ -750,7 +749,7 @@ QFuture<QXmppPubSubManager::Result> QXmppPubSubManager::subscribeToNode(const QS /// \param nodeName name of the pubsub node being subscribed /// \param subscriberJid bare or full JID of the subscriber /// -QFuture<QXmppPubSubManager::Result> QXmppPubSubManager::unsubscribeFromNode(const QString &serviceJid, const QString &nodeName, const QString &subscriberJid) +QXmppTask<QXmppPubSubManager::Result> QXmppPubSubManager::unsubscribeFromNode(const QString &serviceJid, const QString &nodeName, const QString &subscriberJid) { PubSubIq request; request.setType(QXmppIq::Set); @@ -785,7 +784,7 @@ QFuture<QXmppPubSubManager::Result> QXmppPubSubManager::unsubscribeFromNode(cons /// /// -/// \fn QFuture<Result> QXmppPubSubManager::createOwnPepNode(const QString &nodeName) +/// \fn QXmppTask<Result> QXmppPubSubManager::createOwnPepNode(const QString &nodeName) /// /// Creates an empty PEP node with the default configuration. /// @@ -801,7 +800,7 @@ QFuture<QXmppPubSubManager::Result> QXmppPubSubManager::unsubscribeFromNode(cons /// /// -/// \fn QFuture<Result> QXmppPubSubManager::createOwnPepNode(const QString &nodeName, const QXmppPubSubNodeConfig &config) +/// \fn QXmppTask<Result> 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<PublishItemResult> +auto QXmppPubSubManager::publishItem(PubSubIqBase &&request) -> QXmppTask<PublishItemResult> { request.setType(QXmppIq::Set); request.setQueryType(PubSubIqBase::Publish); @@ -1039,7 +1038,7 @@ auto QXmppPubSubManager::publishItem(PubSubIqBase &&request) -> QFuture<PublishI }); } -auto QXmppPubSubManager::publishItems(PubSubIqBase &&request) -> QFuture<PublishItemsResult> +auto QXmppPubSubManager::publishItems(PubSubIqBase &&request) -> QXmppTask<PublishItemsResult> { 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 <QFuture> -#include <QFutureWatcher> - class QXmppPubSubPublishOptions; class QXmppPubSubSubscribeOptions; @@ -75,73 +72,73 @@ public: ~QXmppPubSubManager(); // Generic PubSub (the PubSub service is the given entity) - QFuture<NodesResult> requestNodes(const QString &jid); - QFuture<Result> createNode(const QString &jid, const QString &nodeName); - QFuture<Result> createNode(const QString &jid, const QString &nodeName, const QXmppPubSubNodeConfig &config); - QFuture<InstantNodeResult> createInstantNode(const QString &jid); - QFuture<InstantNodeResult> createInstantNode(const QString &jid, const QXmppPubSubNodeConfig &config); - QFuture<Result> deleteNode(const QString &jid, const QString &nodeName); - QFuture<ItemIdsResult> requestItemIds(const QString &serviceJid, const QString &nodeName); + QXmppTask<NodesResult> requestNodes(const QString &jid); + QXmppTask<Result> createNode(const QString &jid, const QString &nodeName); + QXmppTask<Result> createNode(const QString &jid, const QString &nodeName, const QXmppPubSubNodeConfig &config); + QXmppTask<InstantNodeResult> createInstantNode(const QString &jid); + QXmppTask<InstantNodeResult> createInstantNode(const QString &jid, const QXmppPubSubNodeConfig &config); + QXmppTask<Result> deleteNode(const QString &jid, const QString &nodeName); + QXmppTask<ItemIdsResult> requestItemIds(const QString &serviceJid, const QString &nodeName); template<typename T = QXmppPubSubItem> - QFuture<ItemResult<T>> requestItem(const QString &jid, const QString &nodeName, const QString &itemId); + QXmppTask<ItemResult<T>> requestItem(const QString &jid, const QString &nodeName, const QString &itemId); template<typename T = QXmppPubSubItem> - QFuture<ItemResult<T>> requestItem(const QString &jid, const QString &nodeName, StandardItemId itemId); + QXmppTask<ItemResult<T>> requestItem(const QString &jid, const QString &nodeName, StandardItemId itemId); template<typename T = QXmppPubSubItem> - QFuture<ItemsResult<T>> requestItems(const QString &jid, const QString &nodeName); + QXmppTask<ItemsResult<T>> requestItems(const QString &jid, const QString &nodeName); template<typename T = QXmppPubSubItem> - QFuture<ItemsResult<T>> requestItems(const QString &jid, const QString &nodeName, const QStringList &itemIds); + QXmppTask<ItemsResult<T>> requestItems(const QString &jid, const QString &nodeName, const QStringList &itemIds); template<typename T> - QFuture<PublishItemResult> publishItem(const QString &jid, const QString &nodeName, const T &item); + QXmppTask<PublishItemResult> publishItem(const QString &jid, const QString &nodeName, const T &item); template<typename T> - QFuture<PublishItemResult> publishItem(const QString &jid, const QString &nodeName, const T &item, const QXmppPubSubPublishOptions &publishOptions); + QXmppTask<PublishItemResult> publishItem(const QString &jid, const QString &nodeName, const T &item, const QXmppPubSubPublishOptions &publishOptions); template<typename T> - QFuture<PublishItemsResult> publishItems(const QString &jid, const QString &nodeName, const QVector<T> &items); + QXmppTask<PublishItemsResult> publishItems(const QString &jid, const QString &nodeName, const QVector<T> &items); template<typename T> - QFuture<PublishItemsResult> publishItems(const QString &jid, const QString &nodeName, const QVector<T> &items, const QXmppPubSubPublishOptions &publishOptions); - QFuture<Result> retractItem(const QString &jid, const QString &nodeName, const QString &itemId); - QFuture<Result> retractItem(const QString &jid, const QString &nodeName, StandardItemId itemId); - QFuture<Result> purgeItems(const QString &jid, const QString &nodeName); - QFuture<SubscriptionsResult> requestSubscriptions(const QString &jid); - QFuture<SubscriptionsResult> requestSubscriptions(const QString &jid, const QString &nodeName); - QFuture<AffiliationsResult> requestNodeAffiliations(const QString &jid, const QString &nodeName); - QFuture<AffiliationsResult> requestAffiliations(const QString &jid); - QFuture<AffiliationsResult> requestAffiliations(const QString &jid, const QString &nodeName); - QFuture<OptionsResult> requestSubscribeOptions(const QString &service, const QString &nodeName); - QFuture<OptionsResult> requestSubscribeOptions(const QString &service, const QString &nodeName, const QString &subscriberJid); - QFuture<Result> setSubscribeOptions(const QString &service, const QString &nodeName, const QXmppPubSubSubscribeOptions &options); - QFuture<Result> setSubscribeOptions(const QString &service, const QString &nodeName, const QXmppPubSubSubscribeOptions &options, const QString &subscriberJid); - QFuture<NodeConfigResult> requestNodeConfiguration(const QString &service, const QString &nodeName); - QFuture<Result> configureNode(const QString &service, const QString &nodeName, const QXmppPubSubNodeConfig &config); - QFuture<Result> cancelNodeConfiguration(const QString &service, const QString &nodeName); - QFuture<Result> subscribeToNode(const QString &serviceJid, const QString &nodeName, const QString &subscriberJid); - QFuture<Result> unsubscribeFromNode(const QString &serviceJid, const QString &nodeName, const QString &subscriberJid); + QXmppTask<PublishItemsResult> publishItems(const QString &jid, const QString &nodeName, const QVector<T> &items, const QXmppPubSubPublishOptions &publishOptions); + QXmppTask<Result> retractItem(const QString &jid, const QString &nodeName, const QString &itemId); + QXmppTask<Result> retractItem(const QString &jid, const QString &nodeName, StandardItemId itemId); + QXmppTask<Result> purgeItems(const QString &jid, const QString &nodeName); + QXmppTask<SubscriptionsResult> requestSubscriptions(const QString &jid); + QXmppTask<SubscriptionsResult> requestSubscriptions(const QString &jid, const QString &nodeName); + QXmppTask<AffiliationsResult> requestNodeAffiliations(const QString &jid, const QString &nodeName); + QXmppTask<AffiliationsResult> requestAffiliations(const QString &jid); + QXmppTask<AffiliationsResult> requestAffiliations(const QString &jid, const QString &nodeName); + QXmppTask<OptionsResult> requestSubscribeOptions(const QString &service, const QString &nodeName); + QXmppTask<OptionsResult> requestSubscribeOptions(const QString &service, const QString &nodeName, const QString &subscriberJid); + QXmppTask<Result> setSubscribeOptions(const QString &service, const QString &nodeName, const QXmppPubSubSubscribeOptions &options); + QXmppTask<Result> setSubscribeOptions(const QString &service, const QString &nodeName, const QXmppPubSubSubscribeOptions &options, const QString &subscriberJid); + QXmppTask<NodeConfigResult> requestNodeConfiguration(const QString &service, const QString &nodeName); + QXmppTask<Result> configureNode(const QString &service, const QString &nodeName, const QXmppPubSubNodeConfig &config); + QXmppTask<Result> cancelNodeConfiguration(const QString &service, const QString &nodeName); + QXmppTask<Result> subscribeToNode(const QString &serviceJid, const QString &nodeName, const QString &subscriberJid); + QXmppTask<Result> unsubscribeFromNode(const QString &serviceJid, const QString &nodeName, const QString &subscriberJid); // PEP-specific (the PubSub service is the current account) - QFuture<NodesResult> requestOwnPepNodes() { return requestNodes(client()->configuration().jidBare()); }; - QFuture<Result> createOwnPepNode(const QString &nodeName) { return createNode(client()->configuration().jidBare(), nodeName); } - QFuture<Result> createOwnPepNode(const QString &nodeName, const QXmppPubSubNodeConfig &config) { return createNode(client()->configuration().jidBare(), nodeName, config); } - QFuture<Result> deleteOwnPepNode(const QString &nodeName) { return deleteNode(client()->configuration().jidBare(), nodeName); } + QXmppTask<NodesResult> requestOwnPepNodes() { return requestNodes(client()->configuration().jidBare()); }; + QXmppTask<Result> createOwnPepNode(const QString &nodeName) { return createNode(client()->configuration().jidBare(), nodeName); } + QXmppTask<Result> createOwnPepNode(const QString &nodeName, const QXmppPubSubNodeConfig &config) { return createNode(client()->configuration().jidBare(), nodeName, config); } + QXmppTask<Result> deleteOwnPepNode(const QString &nodeName) { return deleteNode(client()->configuration().jidBare(), nodeName); } template<typename T = QXmppPubSubItem> - QFuture<ItemResult<T>> requestOwnPepItem(const QString &nodeName, const QString &itemId) { return requestItem<T>(client()->configuration().jidBare(), nodeName, itemId); } + QXmppTask<ItemResult<T>> requestOwnPepItem(const QString &nodeName, const QString &itemId) { return requestItem<T>(client()->configuration().jidBare(), nodeName, itemId); } template<typename T = QXmppPubSubItem> - QFuture<ItemResult<T>> requestOwnPepItem(const QString &nodeName, StandardItemId itemId) { return requestItem<T>(client()->configuration().jidBare(), nodeName, itemId); } + QXmppTask<ItemResult<T>> requestOwnPepItem(const QString &nodeName, StandardItemId itemId) { return requestItem<T>(client()->configuration().jidBare(), nodeName, itemId); } template<typename T = QXmppPubSubItem> - QFuture<ItemsResult<T>> requestOwnPepItems(const QString &nodeName) { return requestItems(client()->configuration().jidBare(), nodeName); } - QFuture<ItemIdsResult> requestOwnPepItemIds(const QString &nodeName) { return requestItemIds(client()->configuration().jidBare(), nodeName); } + QXmppTask<ItemsResult<T>> requestOwnPepItems(const QString &nodeName) { return requestItems(client()->configuration().jidBare(), nodeName); } + QXmppTask<ItemIdsResult> requestOwnPepItemIds(const QString &nodeName) { return requestItemIds(client()->configuration().jidBare(), nodeName); } template<typename T> - QFuture<PublishItemResult> publishOwnPepItem(const QString &nodeName, const T &item, const QXmppPubSubPublishOptions &publishOptions); + QXmppTask<PublishItemResult> publishOwnPepItem(const QString &nodeName, const T &item, const QXmppPubSubPublishOptions &publishOptions); template<typename T> - QFuture<PublishItemResult> publishOwnPepItem(const QString &nodeName, const T &item); + QXmppTask<PublishItemResult> publishOwnPepItem(const QString &nodeName, const T &item); template<typename T> - QFuture<PublishItemsResult> publishOwnPepItems(const QString &nodeName, const QVector<T> &items, const QXmppPubSubPublishOptions &publishOptions); + QXmppTask<PublishItemsResult> publishOwnPepItems(const QString &nodeName, const QVector<T> &items, const QXmppPubSubPublishOptions &publishOptions); template<typename T> - QFuture<PublishItemsResult> publishOwnPepItems(const QString &nodeName, const QVector<T> &items); - QFuture<Result> retractOwnPepItem(const QString &nodeName, const QString &itemId) { return retractItem(client()->configuration().jidBare(), nodeName, itemId); } - QFuture<Result> retractOwnPepItem(const QString &nodeName, StandardItemId itemId) { return retractItem(client()->configuration().jidBare(), nodeName, itemId); } - QFuture<Result> purgeOwnPepItems(const QString &nodeName) { return purgeItems(client()->configuration().jidBare(), nodeName); } - QFuture<NodeConfigResult> requestOwnPepNodeConfiguration(const QString &nodeName) { return requestNodeConfiguration(client()->configuration().jidBare(), nodeName); } - QFuture<Result> configureOwnPepNode(const QString &nodeName, const QXmppPubSubNodeConfig &config) { return configureNode(client()->configuration().jidBare(), nodeName, config); } - QFuture<Result> cancelOwnPepNodeConfiguration(const QString &nodeName) { return cancelNodeConfiguration(client()->configuration().jidBare(), nodeName); } + QXmppTask<PublishItemsResult> publishOwnPepItems(const QString &nodeName, const QVector<T> &items); + QXmppTask<Result> retractOwnPepItem(const QString &nodeName, const QString &itemId) { return retractItem(client()->configuration().jidBare(), nodeName, itemId); } + QXmppTask<Result> retractOwnPepItem(const QString &nodeName, StandardItemId itemId) { return retractItem(client()->configuration().jidBare(), nodeName, itemId); } + QXmppTask<Result> purgeOwnPepItems(const QString &nodeName) { return purgeItems(client()->configuration().jidBare(), nodeName); } + QXmppTask<NodeConfigResult> requestOwnPepNodeConfiguration(const QString &nodeName) { return requestNodeConfiguration(client()->configuration().jidBare(), nodeName); } + QXmppTask<Result> configureOwnPepNode(const QString &nodeName, const QXmppPubSubNodeConfig &config) { return configureNode(client()->configuration().jidBare(), nodeName, config); } + QXmppTask<Result> 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<FeaturesResult> requestFeatures(const QString &serviceJid, ServiceType serviceType = PubSubOrPep); - QFuture<FeaturesResult> requestOwnPepFeatures() { return requestFeatures(client()->configuration().jidBare(), Pep); }; + QXmppTask<FeaturesResult> requestFeatures(const QString &serviceJid, ServiceType serviceType = PubSubOrPep); + QXmppTask<FeaturesResult> requestOwnPepFeatures() { return requestFeatures(client()->configuration().jidBare(), Pep); }; - QFuture<PublishItemResult> publishItem(QXmpp::Private::PubSubIqBase &&iq); - QFuture<PublishItemsResult> publishItems(QXmpp::Private::PubSubIqBase &&iq); + QXmppTask<PublishItemResult> publishItem(QXmpp::Private::PubSubIqBase &&iq); + QXmppTask<PublishItemsResult> 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<typename T> -QFuture<QXmppPubSubManager::ItemResult<T>> QXmppPubSubManager::requestItem(const QString &jid, - const QString &nodeName, - const QString &itemId) +QXmppTask<QXmppPubSubManager::ItemResult<T>> 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::ItemResult<T>> QXmppPubSubManager::requestItem(const /// \return /// template<typename T> -QFuture<QXmppPubSubManager::ItemResult<T>> QXmppPubSubManager::requestItem(const QString &jid, - const QString &nodeName, - StandardItemId itemId) +QXmppTask<QXmppPubSubManager::ItemResult<T>> QXmppPubSubManager::requestItem(const QString &jid, + const QString &nodeName, + StandardItemId itemId) { return requestItem<T>(jid, nodeName, standardItemIdToString(itemId)); } @@ -214,8 +211,8 @@ QFuture<QXmppPubSubManager::ItemResult<T>> QXmppPubSubManager::requestItem(const /// \return /// template<typename T> -QFuture<QXmppPubSubManager::ItemsResult<T>> QXmppPubSubManager::requestItems(const QString &jid, - const QString &nodeName) +QXmppTask<QXmppPubSubManager::ItemsResult<T>> QXmppPubSubManager::requestItems(const QString &jid, + const QString &nodeName) { return requestItems<T>(jid, nodeName, {}); } @@ -231,9 +228,9 @@ QFuture<QXmppPubSubManager::ItemsResult<T>> QXmppPubSubManager::requestItems(con /// \return /// template<typename T> -QFuture<QXmppPubSubManager::ItemsResult<T>> QXmppPubSubManager::requestItems(const QString &jid, - const QString &nodeName, - const QStringList &itemIds) +QXmppTask<QXmppPubSubManager::ItemsResult<T>> 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::ItemsResult<T>> QXmppPubSubManager::requestItems(con /// \return /// template<typename T> -QFuture<QXmppPubSubManager::PublishItemResult> QXmppPubSubManager::publishItem(const QString &jid, - const QString &nodeName, - const T &item) +QXmppTask<QXmppPubSubManager::PublishItemResult> QXmppPubSubManager::publishItem(const QString &jid, + const QString &nodeName, + const T &item) { QXmpp::Private::PubSubIq<T> request; request.setTo(jid); @@ -281,10 +278,10 @@ QFuture<QXmppPubSubManager::PublishItemResult> QXmppPubSubManager::publishItem(c /// \return /// template<typename T> -QFuture<QXmppPubSubManager::PublishItemResult> QXmppPubSubManager::publishItem(const QString &jid, - const QString &nodeName, - const T &item, - const QXmppPubSubPublishOptions &publishOptions) +QXmppTask<QXmppPubSubManager::PublishItemResult> QXmppPubSubManager::publishItem(const QString &jid, + const QString &nodeName, + const T &item, + const QXmppPubSubPublishOptions &publishOptions) { QXmpp::Private::PubSubIq<T> request; request.setTo(jid); @@ -303,9 +300,9 @@ QFuture<QXmppPubSubManager::PublishItemResult> QXmppPubSubManager::publishItem(c /// \return /// template<typename T> -QFuture<QXmppPubSubManager::PublishItemsResult> QXmppPubSubManager::publishItems(const QString &jid, - const QString &nodeName, - const QVector<T> &items) +QXmppTask<QXmppPubSubManager::PublishItemsResult> QXmppPubSubManager::publishItems(const QString &jid, + const QString &nodeName, + const QVector<T> &items) { QXmpp::Private::PubSubIq<T> request; request.setTo(jid); @@ -324,10 +321,10 @@ QFuture<QXmppPubSubManager::PublishItemsResult> QXmppPubSubManager::publishItems /// \return /// template<typename T> -QFuture<QXmppPubSubManager::PublishItemsResult> QXmppPubSubManager::publishItems(const QString &jid, - const QString &nodeName, - const QVector<T> &items, - const QXmppPubSubPublishOptions &publishOptions) +QXmppTask<QXmppPubSubManager::PublishItemsResult> QXmppPubSubManager::publishItems(const QString &jid, + const QString &nodeName, + const QVector<T> &items, + const QXmppPubSubPublishOptions &publishOptions) { QXmpp::Private::PubSubIq<T> request; request.setTo(jid); @@ -346,7 +343,7 @@ QFuture<QXmppPubSubManager::PublishItemsResult> QXmppPubSubManager::publishItems /// \return /// template<typename T> -QFuture<QXmppPubSubManager::PublishItemResult> QXmppPubSubManager::publishOwnPepItem(const QString &nodeName, const T &item, const QXmppPubSubPublishOptions &publishOptions) +QXmppTask<QXmppPubSubManager::PublishItemResult> 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::PublishItemResult> QXmppPubSubManager::publishOwnPep /// \return /// template<typename T> -QFuture<QXmppPubSubManager::PublishItemResult> QXmppPubSubManager::publishOwnPepItem(const QString &nodeName, const T &item) +QXmppTask<QXmppPubSubManager::PublishItemResult> QXmppPubSubManager::publishOwnPepItem(const QString &nodeName, const T &item) { return publishItem(client()->configuration().jidBare(), nodeName, item); } @@ -374,7 +371,7 @@ QFuture<QXmppPubSubManager::PublishItemResult> QXmppPubSubManager::publishOwnPep /// \return /// template<typename T> -QFuture<QXmppPubSubManager::PublishItemsResult> QXmppPubSubManager::publishOwnPepItems(const QString &nodeName, const QVector<T> &items, const QXmppPubSubPublishOptions &publishOptions) +QXmppTask<QXmppPubSubManager::PublishItemsResult> QXmppPubSubManager::publishOwnPepItems(const QString &nodeName, const QVector<T> &items, const QXmppPubSubPublishOptions &publishOptions) { return publishItems(client()->configuration().jidBare(), nodeName, items, publishOptions); } @@ -387,7 +384,7 @@ QFuture<QXmppPubSubManager::PublishItemsResult> QXmppPubSubManager::publishOwnPe /// \return /// template<typename T> -QFuture<QXmppPubSubManager::PublishItemsResult> QXmppPubSubManager::publishOwnPepItems(const QString &nodeName, const QVector<T> &items) +QXmppTask<QXmppPubSubManager::PublishItemsResult> QXmppPubSubManager::publishOwnPepItems(const QString &nodeName, const QVector<T> &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::Result> QXmppRosterManager::addRosterItem(const QString &bareJid, const QString &name, const QSet<QString> &groups) +QXmppTask<QXmppRosterManager::Result> QXmppRosterManager::addRosterItem(const QString &bareJid, const QString &name, const QSet<QString> &groups) { QXmppRosterIq::Item item; item.setBareJid(bareJid); @@ -280,7 +280,7 @@ QFuture<QXmppRosterManager::Result> QXmppRosterManager::addRosterItem(const QStr /// /// \since QXmpp 1.5 /// -QFuture<QXmppRosterManager::Result> QXmppRosterManager::removeRosterItem(const QString &bareJid) +QXmppTask<QXmppRosterManager::Result> QXmppRosterManager::removeRosterItem(const QString &bareJid) { QXmppRosterIq::Item item; item.setBareJid(bareJid); @@ -303,11 +303,11 @@ QFuture<QXmppRosterManager::Result> QXmppRosterManager::removeRosterItem(const Q /// /// \since QXmpp 1.5 /// -QFuture<QXmppRosterManager::Result> QXmppRosterManager::renameRosterItem(const QString &bareJid, const QString &name) +QXmppTask<QXmppRosterManager::Result> QXmppRosterManager::renameRosterItem(const QString &bareJid, const QString &name) { using Error = QXmppStanza::Error; if (!d->entries.contains(bareJid)) { - return QXmpp::Private::makeReadyFuture<Result>( + return QXmpp::Private::makeReadyTask<Result>( Error(Error::Modify, Error::ItemNotFound, QStringLiteral("The roster doesn't contain this user."))); } @@ -334,7 +334,7 @@ QFuture<QXmppRosterManager::Result> QXmppRosterManager::renameRosterItem(const Q /// /// \since QXmpp 1.5 /// -QFuture<QXmpp::SendResult> QXmppRosterManager::subscribeTo(const QString &bareJid, const QString &reason) +QXmppTask<QXmpp::SendResult> QXmppRosterManager::subscribeTo(const QString &bareJid, const QString &reason) { QXmppPresence packet; packet.setTo(QXmppUtils::jidToBareJid(bareJid)); @@ -351,7 +351,7 @@ QFuture<QXmpp::SendResult> QXmppRosterManager::subscribeTo(const QString &bareJi /// /// \since QXmpp 1.5 /// -QFuture<QXmpp::SendResult> QXmppRosterManager::unsubscribeFrom(const QString &bareJid, const QString &reason) +QXmppTask<QXmpp::SendResult> 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<QString> &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 <QStringList> template<typename T> -class QFuture; +class QXmppTask; class QXmppRosterManagerPrivate; /// @@ -73,11 +73,11 @@ public: QXmppPresence getPresence(const QString &bareJid, const QString &resource) const; - QFuture<Result> addRosterItem(const QString &bareJid, const QString &name = {}, const QSet<QString> &groups = {}); - QFuture<Result> removeRosterItem(const QString &bareJid); - QFuture<Result> renameRosterItem(const QString &bareJid, const QString &name); - QFuture<QXmpp::SendResult> subscribeTo(const QString &bareJid, const QString &reason = {}); - QFuture<QXmpp::SendResult> unsubscribeFrom(const QString &bareJid, const QString &reason = {}); + QXmppTask<Result> addRosterItem(const QString &bareJid, const QString &name = {}, const QSet<QString> &groups = {}); + QXmppTask<Result> removeRosterItem(const QString &bareJid); + QXmppTask<Result> renameRosterItem(const QString &bareJid, const QString &name); + QXmppTask<QXmpp::SendResult> subscribeTo(const QString &bareJid, const QString &reason = {}); + QXmppTask<QXmpp::SendResult> 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<void> QXmppTrustManager::setSecurityPolicy(const QString &encryption, TrustSecurityPolicy securityPolicy) +QXmppTask<void> QXmppTrustManager::setSecurityPolicy(const QString &encryption, TrustSecurityPolicy securityPolicy) { return m_trustStorage->setSecurityPolicy(encryption, securityPolicy); } @@ -50,7 +52,7 @@ QFuture<void> QXmppTrustManager::setSecurityPolicy(const QString &encryption, Tr /// /// \param encryption encryption protocol namespace /// -QFuture<void> QXmppTrustManager::resetSecurityPolicy(const QString &encryption) +QXmppTask<void> QXmppTrustManager::resetSecurityPolicy(const QString &encryption) { return m_trustStorage->resetSecurityPolicy(encryption); } @@ -62,7 +64,7 @@ QFuture<void> QXmppTrustManager::resetSecurityPolicy(const QString &encryption) /// /// \return the set security policy /// -QFuture<TrustSecurityPolicy> QXmppTrustManager::securityPolicy(const QString &encryption) +QXmppTask<TrustSecurityPolicy> QXmppTrustManager::securityPolicy(const QString &encryption) { return m_trustStorage->securityPolicy(encryption); } @@ -74,7 +76,7 @@ QFuture<TrustSecurityPolicy> QXmppTrustManager::securityPolicy(const QString &en /// \param encryption encryption protocol namespace /// \param keyId ID of the key /// -QFuture<void> QXmppTrustManager::setOwnKey(const QString &encryption, const QByteArray &keyId) +QXmppTask<void> QXmppTrustManager::setOwnKey(const QString &encryption, const QByteArray &keyId) { return m_trustStorage->setOwnKey(encryption, keyId); } @@ -85,7 +87,7 @@ QFuture<void> QXmppTrustManager::setOwnKey(const QString &encryption, const QByt /// /// \param encryption encryption protocol namespace /// -QFuture<void> QXmppTrustManager::resetOwnKey(const QString &encryption) +QXmppTask<void> QXmppTrustManager::resetOwnKey(const QString &encryption) { return m_trustStorage->resetOwnKey(encryption); } @@ -98,7 +100,7 @@ QFuture<void> QXmppTrustManager::resetOwnKey(const QString &encryption) /// /// \return the ID of the own key /// -QFuture<QByteArray> QXmppTrustManager::ownKey(const QString &encryption) +QXmppTask<QByteArray> QXmppTrustManager::ownKey(const QString &encryption) { return m_trustStorage->ownKey(encryption); } @@ -111,7 +113,7 @@ QFuture<QByteArray> QXmppTrustManager::ownKey(const QString &encryption) /// \param keyIds IDs of the keys /// \param trustLevel trust level of the keys /// -QFuture<void> QXmppTrustManager::addKeys(const QString &encryption, const QString &keyOwnerJid, const QList<QByteArray> &keyIds, TrustLevel trustLevel) +QXmppTask<void> QXmppTrustManager::addKeys(const QString &encryption, const QString &keyOwnerJid, const QList<QByteArray> &keyIds, TrustLevel trustLevel) { return m_trustStorage->addKeys(encryption, keyOwnerJid, keyIds, trustLevel); } @@ -122,7 +124,7 @@ QFuture<void> QXmppTrustManager::addKeys(const QString &encryption, const QStrin /// \param encryption encryption protocol namespace /// \param keyIds IDs of the keys /// -QFuture<void> QXmppTrustManager::removeKeys(const QString &encryption, const QList<QByteArray> &keyIds) +QXmppTask<void> QXmppTrustManager::removeKeys(const QString &encryption, const QList<QByteArray> &keyIds) { return m_trustStorage->removeKeys(encryption, keyIds); } @@ -133,7 +135,7 @@ QFuture<void> QXmppTrustManager::removeKeys(const QString &encryption, const QLi /// \param encryption encryption protocol namespace /// \param keyOwnerJid key owner's bare JID /// -QFuture<void> QXmppTrustManager::removeKeys(const QString &encryption, const QString &keyOwnerJid) +QXmppTask<void> QXmppTrustManager::removeKeys(const QString &encryption, const QString &keyOwnerJid) { return m_trustStorage->removeKeys(encryption, keyOwnerJid); } @@ -143,7 +145,7 @@ QFuture<void> QXmppTrustManager::removeKeys(const QString &encryption, const QSt /// /// \param encryption encryption protocol namespace /// -QFuture<void> QXmppTrustManager::removeKeys(const QString &encryption) +QXmppTask<void> QXmppTrustManager::removeKeys(const QString &encryption) { return m_trustStorage->removeKeys(encryption); } @@ -159,7 +161,7 @@ QFuture<void> QXmppTrustManager::removeKeys(const QString &encryption) /// /// \return the key owner JIDs mapped to their keys with specific trust levels /// -QFuture<QHash<QXmpp::TrustLevel, QMultiHash<QString, QByteArray>>> QXmppTrustManager::keys(const QString &encryption, QXmpp::TrustLevels trustLevels) +QXmppTask<QHash<QXmpp::TrustLevel, QMultiHash<QString, QByteArray>>> QXmppTrustManager::keys(const QString &encryption, QXmpp::TrustLevels trustLevels) { return m_trustStorage->keys(encryption, trustLevels); } @@ -177,7 +179,7 @@ QFuture<QHash<QXmpp::TrustLevel, QMultiHash<QString, QByteArray>>> QXmppTrustMan /// /// \return the key IDs mapped to their trust levels for specific key owners /// -QFuture<QHash<QString, QHash<QByteArray, QXmpp::TrustLevel>>> QXmppTrustManager::keys(const QString &encryption, const QList<QString> &keyOwnerJids, QXmpp::TrustLevels trustLevels) +QXmppTask<QHash<QString, QHash<QByteArray, QXmpp::TrustLevel>>> QXmppTrustManager::keys(const QString &encryption, const QList<QString> &keyOwnerJids, QXmpp::TrustLevels trustLevels) { return m_trustStorage->keys(encryption, keyOwnerJids, trustLevels); } @@ -192,7 +194,7 @@ QFuture<QHash<QString, QHash<QByteArray, QXmpp::TrustLevel>>> QXmppTrustManager: /// /// \return whether a key of the key owner with a passed trust level is stored /// -QFuture<bool> QXmppTrustManager::hasKey(const QString &encryption, const QString &keyOwnerJid, TrustLevels trustLevels) +QXmppTask<bool> QXmppTrustManager::hasKey(const QString &encryption, const QString &keyOwnerJid, TrustLevels trustLevels) { return m_trustStorage->hasKey(encryption, keyOwnerJid, trustLevels); } @@ -206,17 +208,17 @@ QFuture<bool> 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<void> QXmppTrustManager::setTrustLevel(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIds, TrustLevel trustLevel) +QXmppTask<void> QXmppTrustManager::setTrustLevel(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIds, TrustLevel trustLevel) { - QFutureInterface<void> interface(QFutureInterfaceBase::Started); + QXmppPromise<void> promise; auto future = m_trustStorage->setTrustLevel(encryption, keyIds, trustLevel); - await(future, this, [=](QHash<QString, QMultiHash<QString, QByteArray>> modifiedKeys) mutable { + future.then(this, [=](QHash<QString, QMultiHash<QString, QByteArray>> modifiedKeys) mutable { Q_EMIT trustLevelsChanged(modifiedKeys); - interface.reportFinished(); + promise.finish(); }); - return interface.future(); + return promise.task(); } /// @@ -227,17 +229,16 @@ QFuture<void> QXmppTrustManager::setTrustLevel(const QString &encryption, const /// \param oldTrustLevel trust level being changed /// \param newTrustLevel trust level being set /// -QFuture<void> QXmppTrustManager::setTrustLevel(const QString &encryption, const QList<QString> &keyOwnerJids, TrustLevel oldTrustLevel, TrustLevel newTrustLevel) +QXmppTask<void> QXmppTrustManager::setTrustLevel(const QString &encryption, const QList<QString> &keyOwnerJids, TrustLevel oldTrustLevel, TrustLevel newTrustLevel) { - QFutureInterface<void> interface(QFutureInterfaceBase::Started); + QXmppPromise<void> promise; + m_trustStorage->setTrustLevel(encryption, keyOwnerJids, oldTrustLevel, newTrustLevel) + .then(this, [=](QHash<QString, QMultiHash<QString, QByteArray>> modifiedKeys) mutable { + Q_EMIT trustLevelsChanged(modifiedKeys); + promise.finish(); + }); - auto future = m_trustStorage->setTrustLevel(encryption, keyOwnerJids, oldTrustLevel, newTrustLevel); - await(future, this, [=](QHash<QString, QMultiHash<QString, QByteArray>> modifiedKeys) mutable { - Q_EMIT trustLevelsChanged(modifiedKeys); - interface.reportFinished(); - }); - - return interface.future(); + return promise.task(); } /// @@ -251,7 +252,7 @@ QFuture<void> QXmppTrustManager::setTrustLevel(const QString &encryption, const /// /// \return the key's trust level /// -QFuture<TrustLevel> QXmppTrustManager::trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId) +QXmppTask<TrustLevel> QXmppTrustManager::trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId) { return m_trustStorage->trustLevel(encryption, keyOwnerJid, keyId); } @@ -261,7 +262,7 @@ QFuture<TrustLevel> QXmppTrustManager::trustLevel(const QString &encryption, con /// /// \param encryption encryption protocol namespace /// -QFuture<void> QXmppTrustManager::resetAll(const QString &encryption) +QXmppTask<void> 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 <QFuture> +template<typename T> +class QXmppTask; class QXmppTrustStorage; @@ -21,27 +22,27 @@ public: QXmppTrustManager(QXmppTrustStorage *trustStorage); ~QXmppTrustManager(); - QFuture<void> setSecurityPolicy(const QString &encryption, QXmpp::TrustSecurityPolicy securityPolicy); - QFuture<void> resetSecurityPolicy(const QString &encryption); - QFuture<QXmpp::TrustSecurityPolicy> securityPolicy(const QString &encryption); + QXmppTask<void> setSecurityPolicy(const QString &encryption, QXmpp::TrustSecurityPolicy securityPolicy); + QXmppTask<void> resetSecurityPolicy(const QString &encryption); + QXmppTask<QXmpp::TrustSecurityPolicy> securityPolicy(const QString &encryption); - QFuture<void> setOwnKey(const QString &encryption, const QByteArray &keyId); - QFuture<void> resetOwnKey(const QString &encryption); - QFuture<QByteArray> ownKey(const QString &encryption); + QXmppTask<void> setOwnKey(const QString &encryption, const QByteArray &keyId); + QXmppTask<void> resetOwnKey(const QString &encryption); + QXmppTask<QByteArray> ownKey(const QString &encryption); - QFuture<void> addKeys(const QString &encryption, const QString &keyOwnerJid, const QList<QByteArray> &keyIds, QXmpp::TrustLevel trustLevel = QXmpp::TrustLevel::AutomaticallyDistrusted); - QFuture<void> removeKeys(const QString &encryption, const QList<QByteArray> &keyIds); - QFuture<void> removeKeys(const QString &encryption, const QString &keyOwnerJid); - QFuture<void> removeKeys(const QString &encryption); - QFuture<QHash<QXmpp::TrustLevel, QMultiHash<QString, QByteArray>>> keys(const QString &encryption, QXmpp::TrustLevels trustLevels = {}); - QFuture<QHash<QString, QHash<QByteArray, QXmpp::TrustLevel>>> keys(const QString &encryption, const QList<QString> &keyOwnerJids, QXmpp::TrustLevels trustLevels = {}); - QFuture<bool> hasKey(const QString &encryption, const QString &keyOwnerJid, QXmpp::TrustLevels trustLevels); + QXmppTask<void> addKeys(const QString &encryption, const QString &keyOwnerJid, const QList<QByteArray> &keyIds, QXmpp::TrustLevel trustLevel = QXmpp::TrustLevel::AutomaticallyDistrusted); + QXmppTask<void> removeKeys(const QString &encryption, const QList<QByteArray> &keyIds); + QXmppTask<void> removeKeys(const QString &encryption, const QString &keyOwnerJid); + QXmppTask<void> removeKeys(const QString &encryption); + QXmppTask<QHash<QXmpp::TrustLevel, QMultiHash<QString, QByteArray>>> keys(const QString &encryption, QXmpp::TrustLevels trustLevels = {}); + QXmppTask<QHash<QString, QHash<QByteArray, QXmpp::TrustLevel>>> keys(const QString &encryption, const QList<QString> &keyOwnerJids, QXmpp::TrustLevels trustLevels = {}); + QXmppTask<bool> hasKey(const QString &encryption, const QString &keyOwnerJid, QXmpp::TrustLevels trustLevels); - QFuture<void> setTrustLevel(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIds, QXmpp::TrustLevel trustLevel); - QFuture<void> setTrustLevel(const QString &encryption, const QList<QString> &keyOwnerJids, QXmpp::TrustLevel oldTrustLevel, QXmpp::TrustLevel newTrustLevel); - QFuture<QXmpp::TrustLevel> trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId); + QXmppTask<void> setTrustLevel(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIds, QXmpp::TrustLevel trustLevel); + QXmppTask<void> setTrustLevel(const QString &encryption, const QList<QString> &keyOwnerJids, QXmpp::TrustLevel oldTrustLevel, QXmpp::TrustLevel newTrustLevel); + QXmppTask<QXmpp::TrustLevel> trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId); - QFuture<void> resetAll(const QString &encryption); + QXmppTask<void> resetAll(const QString &encryption); Q_SIGNAL void trustLevelsChanged(const QHash<QString, QMultiHash<QString, QByteArray>> &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<void> QXmppTrustMemoryStorage::setSecurityPolicy(const QString &encryption, TrustSecurityPolicy securityPolicy) +QXmppTask<void> QXmppTrustMemoryStorage::setSecurityPolicy(const QString &encryption, TrustSecurityPolicy securityPolicy) { d->securityPolicies.insert(encryption, securityPolicy); - return makeReadyFuture(); + return makeReadyTask(); } -QFuture<void> QXmppTrustMemoryStorage::resetSecurityPolicy(const QString &encryption) +QXmppTask<void> QXmppTrustMemoryStorage::resetSecurityPolicy(const QString &encryption) { d->securityPolicies.remove(encryption); - return makeReadyFuture(); + return makeReadyTask(); } -QFuture<TrustSecurityPolicy> QXmppTrustMemoryStorage::securityPolicy(const QString &encryption) +QXmppTask<TrustSecurityPolicy> QXmppTrustMemoryStorage::securityPolicy(const QString &encryption) { - return makeReadyFuture(std::move(d->securityPolicies.value(encryption))); + return makeReadyTask(std::move(d->securityPolicies.value(encryption))); } -QFuture<void> QXmppTrustMemoryStorage::setOwnKey(const QString &encryption, const QByteArray &keyId) +QXmppTask<void> QXmppTrustMemoryStorage::setOwnKey(const QString &encryption, const QByteArray &keyId) { d->ownKeys.insert(encryption, keyId); - return makeReadyFuture(); + return makeReadyTask(); } -QFuture<void> QXmppTrustMemoryStorage::resetOwnKey(const QString &encryption) +QXmppTask<void> QXmppTrustMemoryStorage::resetOwnKey(const QString &encryption) { d->ownKeys.remove(encryption); - return makeReadyFuture(); + return makeReadyTask(); } -QFuture<QByteArray> QXmppTrustMemoryStorage::ownKey(const QString &encryption) +QXmppTask<QByteArray> QXmppTrustMemoryStorage::ownKey(const QString &encryption) { auto key = d->ownKeys[encryption]; - return makeReadyFuture(std::move(key)); + return makeReadyTask(std::move(key)); } -QFuture<void> QXmppTrustMemoryStorage::addKeys(const QString &encryption, const QString &keyOwnerJid, const QList<QByteArray> &keyIds, TrustLevel trustLevel) +QXmppTask<void> QXmppTrustMemoryStorage::addKeys(const QString &encryption, const QString &keyOwnerJid, const QList<QByteArray> &keyIds, TrustLevel trustLevel) { for (const auto &keyId : keyIds) { Key key; @@ -98,10 +98,10 @@ QFuture<void> QXmppTrustMemoryStorage::addKeys(const QString &encryption, const d->keys.insert(encryption, key); } - return makeReadyFuture(); + return makeReadyTask(); } -QFuture<void> QXmppTrustMemoryStorage::removeKeys(const QString &encryption, const QList<QByteArray> &keyIds) +QXmppTask<void> QXmppTrustMemoryStorage::removeKeys(const QString &encryption, const QList<QByteArray> &keyIds) { for (auto itr = d->keys.find(encryption); itr != d->keys.end() && itr.key() == encryption;) { @@ -112,10 +112,10 @@ QFuture<void> QXmppTrustMemoryStorage::removeKeys(const QString &encryption, con } } - return makeReadyFuture(); + return makeReadyTask(); } -QFuture<void> QXmppTrustMemoryStorage::removeKeys(const QString &encryption, const QString &keyOwnerJid) +QXmppTask<void> 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<void> QXmppTrustMemoryStorage::removeKeys(const QString &encryption, con } } - return makeReadyFuture(); + return makeReadyTask(); } -QFuture<void> QXmppTrustMemoryStorage::removeKeys(const QString &encryption) +QXmppTask<void> QXmppTrustMemoryStorage::removeKeys(const QString &encryption) { d->keys.remove(encryption); - return makeReadyFuture(); + return makeReadyTask(); } -QFuture<QHash<TrustLevel, QMultiHash<QString, QByteArray>>> QXmppTrustMemoryStorage::keys(const QString &encryption, TrustLevels trustLevels) +QXmppTask<QHash<TrustLevel, QMultiHash<QString, QByteArray>>> QXmppTrustMemoryStorage::keys(const QString &encryption, TrustLevels trustLevels) { QHash<TrustLevel, QMultiHash<QString, QByteArray>> keys; @@ -147,10 +147,10 @@ QFuture<QHash<TrustLevel, QMultiHash<QString, QByteArray>>> QXmppTrustMemoryStor } } - return makeReadyFuture(std::move(keys)); + return makeReadyTask(std::move(keys)); } -QFuture<QHash<QString, QHash<QByteArray, TrustLevel>>> QXmppTrustMemoryStorage::keys(const QString &encryption, const QList<QString> &keyOwnerJids, TrustLevels trustLevels) +QXmppTask<QHash<QString, QHash<QByteArray, TrustLevel>>> QXmppTrustMemoryStorage::keys(const QString &encryption, const QList<QString> &keyOwnerJids, TrustLevels trustLevels) { QHash<QString, QHash<QByteArray, TrustLevel>> keys; @@ -163,22 +163,22 @@ QFuture<QHash<QString, QHash<QByteArray, TrustLevel>>> QXmppTrustMemoryStorage:: } } - return makeReadyFuture(std::move(keys)); + return makeReadyTask(std::move(keys)); } -QFuture<bool> QXmppTrustMemoryStorage::hasKey(const QString &encryption, const QString &keyOwnerJid, TrustLevels trustLevels) +QXmppTask<bool> 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<QHash<QString, QMultiHash<QString, QByteArray>>> QXmppTrustMemoryStorage::setTrustLevel(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIds, TrustLevel trustLevel) +QXmppTask<QHash<QString, QMultiHash<QString, QByteArray>>> QXmppTrustMemoryStorage::setTrustLevel(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIds, TrustLevel trustLevel) { QHash<QString, QMultiHash<QString, QByteArray>> modifiedKeys; @@ -215,10 +215,10 @@ QFuture<QHash<QString, QMultiHash<QString, QByteArray>>> QXmppTrustMemoryStorage } } - return makeReadyFuture(std::move(modifiedKeys)); + return makeReadyTask(std::move(modifiedKeys)); } -QFuture<QHash<QString, QMultiHash<QString, QByteArray>>> QXmppTrustMemoryStorage::setTrustLevel(const QString &encryption, const QList<QString> &keyOwnerJids, TrustLevel oldTrustLevel, TrustLevel newTrustLevel) +QXmppTask<QHash<QString, QMultiHash<QString, QByteArray>>> QXmppTrustMemoryStorage::setTrustLevel(const QString &encryption, const QList<QString> &keyOwnerJids, TrustLevel oldTrustLevel, TrustLevel newTrustLevel) { QHash<QString, QMultiHash<QString, QByteArray>> modifiedKeys; @@ -231,27 +231,27 @@ QFuture<QHash<QString, QMultiHash<QString, QByteArray>>> QXmppTrustMemoryStorage } } - return makeReadyFuture(std::move(modifiedKeys)); + return makeReadyTask(std::move(modifiedKeys)); } -QFuture<TrustLevel> QXmppTrustMemoryStorage::trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId) +QXmppTask<TrustLevel> 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<void> QXmppTrustMemoryStorage::resetAll(const QString &encryption) +QXmppTask<void> 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<void> setSecurityPolicy(const QString &encryption, QXmpp::TrustSecurityPolicy securityPolicy) override; - QFuture<void> resetSecurityPolicy(const QString &encryption) override; - QFuture<QXmpp::TrustSecurityPolicy> securityPolicy(const QString &encryption) override; - - QFuture<void> setOwnKey(const QString &encryption, const QByteArray &keyId) override; - QFuture<void> resetOwnKey(const QString &encryption) override; - QFuture<QByteArray> ownKey(const QString &encryption) override; - - QFuture<void> addKeys(const QString &encryption, const QString &keyOwnerJid, const QList<QByteArray> &keyIds, QXmpp::TrustLevel trustLevel = QXmpp::TrustLevel::AutomaticallyDistrusted) override; - QFuture<void> removeKeys(const QString &encryption, const QList<QByteArray> &keyIds) override; - QFuture<void> removeKeys(const QString &encryption, const QString &keyOwnerJid) override; - QFuture<void> removeKeys(const QString &encryption) override; - QFuture<QHash<QXmpp::TrustLevel, QMultiHash<QString, QByteArray>>> keys(const QString &encryption, QXmpp::TrustLevels trustLevels = {}) override; - QFuture<QHash<QString, QHash<QByteArray, QXmpp::TrustLevel>>> keys(const QString &encryption, const QList<QString> &keyOwnerJids, QXmpp::TrustLevels trustLevels = {}) override; - QFuture<bool> hasKey(const QString &encryption, const QString &keyOwnerJid, QXmpp::TrustLevels trustLevels) override; - - QFuture<QHash<QString, QMultiHash<QString, QByteArray>>> setTrustLevel(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIds, QXmpp::TrustLevel trustLevel) override; - QFuture<QHash<QString, QMultiHash<QString, QByteArray>>> setTrustLevel(const QString &encryption, const QList<QString> &keyOwnerJids, QXmpp::TrustLevel oldTrustLevel, QXmpp::TrustLevel newTrustLevel) override; - QFuture<QXmpp::TrustLevel> trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId) override; - - QFuture<void> resetAll(const QString &encryption) override; + QXmppTask<void> setSecurityPolicy(const QString &encryption, QXmpp::TrustSecurityPolicy securityPolicy) override; + QXmppTask<void> resetSecurityPolicy(const QString &encryption) override; + QXmppTask<QXmpp::TrustSecurityPolicy> securityPolicy(const QString &encryption) override; + + QXmppTask<void> setOwnKey(const QString &encryption, const QByteArray &keyId) override; + QXmppTask<void> resetOwnKey(const QString &encryption) override; + QXmppTask<QByteArray> ownKey(const QString &encryption) override; + + QXmppTask<void> addKeys(const QString &encryption, const QString &keyOwnerJid, const QList<QByteArray> &keyIds, QXmpp::TrustLevel trustLevel = QXmpp::TrustLevel::AutomaticallyDistrusted) override; + QXmppTask<void> removeKeys(const QString &encryption, const QList<QByteArray> &keyIds) override; + QXmppTask<void> removeKeys(const QString &encryption, const QString &keyOwnerJid) override; + QXmppTask<void> removeKeys(const QString &encryption) override; + QXmppTask<QHash<QXmpp::TrustLevel, QMultiHash<QString, QByteArray>>> keys(const QString &encryption, QXmpp::TrustLevels trustLevels = {}) override; + QXmppTask<QHash<QString, QHash<QByteArray, QXmpp::TrustLevel>>> keys(const QString &encryption, const QList<QString> &keyOwnerJids, QXmpp::TrustLevels trustLevels = {}) override; + QXmppTask<bool> hasKey(const QString &encryption, const QString &keyOwnerJid, QXmpp::TrustLevels trustLevels) override; + + QXmppTask<QHash<QString, QMultiHash<QString, QByteArray>>> setTrustLevel(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIds, QXmpp::TrustLevel trustLevel) override; + QXmppTask<QHash<QString, QMultiHash<QString, QByteArray>>> setTrustLevel(const QString &encryption, const QList<QString> &keyOwnerJids, QXmpp::TrustLevel oldTrustLevel, QXmpp::TrustLevel newTrustLevel) override; + QXmppTask<QXmpp::TrustLevel> trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId) override; + + QXmppTask<void> 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 <QFuture> +template<typename T> +class QXmppTask; class QXMPP_EXPORT QXmppTrustStorage { public: virtual ~QXmppTrustStorage() = default; - virtual QFuture<void> setSecurityPolicy(const QString &encryption, QXmpp::TrustSecurityPolicy securityPolicy) = 0; - virtual QFuture<void> resetSecurityPolicy(const QString &encryption) = 0; - virtual QFuture<QXmpp::TrustSecurityPolicy> securityPolicy(const QString &encryption) = 0; + virtual QXmppTask<void> setSecurityPolicy(const QString &encryption, QXmpp::TrustSecurityPolicy securityPolicy) = 0; + virtual QXmppTask<void> resetSecurityPolicy(const QString &encryption) = 0; + virtual QXmppTask<QXmpp::TrustSecurityPolicy> securityPolicy(const QString &encryption) = 0; - virtual QFuture<void> setOwnKey(const QString &encryption, const QByteArray &keyId) = 0; - virtual QFuture<void> resetOwnKey(const QString &encryption) = 0; - virtual QFuture<QByteArray> ownKey(const QString &encryption) = 0; + virtual QXmppTask<void> setOwnKey(const QString &encryption, const QByteArray &keyId) = 0; + virtual QXmppTask<void> resetOwnKey(const QString &encryption) = 0; + virtual QXmppTask<QByteArray> ownKey(const QString &encryption) = 0; - virtual QFuture<void> addKeys(const QString &encryption, const QString &keyOwnerJid, const QList<QByteArray> &keyIds, QXmpp::TrustLevel trustLevel = QXmpp::TrustLevel::AutomaticallyDistrusted) = 0; - virtual QFuture<void> removeKeys(const QString &encryption, const QList<QByteArray> &keyIds) = 0; - virtual QFuture<void> removeKeys(const QString &encryption, const QString &keyOwnerJid) = 0; - virtual QFuture<void> removeKeys(const QString &encryption) = 0; - virtual QFuture<QHash<QXmpp::TrustLevel, QMultiHash<QString, QByteArray>>> keys(const QString &encryption, QXmpp::TrustLevels trustLevels = {}) = 0; - virtual QFuture<QHash<QString, QHash<QByteArray, QXmpp::TrustLevel>>> keys(const QString &encryption, const QList<QString> &keyOwnerJids, QXmpp::TrustLevels trustLevels = {}) = 0; - virtual QFuture<bool> hasKey(const QString &encryption, const QString &keyOwnerJid, QXmpp::TrustLevels trustLevels) = 0; + virtual QXmppTask<void> addKeys(const QString &encryption, const QString &keyOwnerJid, const QList<QByteArray> &keyIds, QXmpp::TrustLevel trustLevel = QXmpp::TrustLevel::AutomaticallyDistrusted) = 0; + virtual QXmppTask<void> removeKeys(const QString &encryption, const QList<QByteArray> &keyIds) = 0; + virtual QXmppTask<void> removeKeys(const QString &encryption, const QString &keyOwnerJid) = 0; + virtual QXmppTask<void> removeKeys(const QString &encryption) = 0; + virtual QXmppTask<QHash<QXmpp::TrustLevel, QMultiHash<QString, QByteArray>>> keys(const QString &encryption, QXmpp::TrustLevels trustLevels = {}) = 0; + virtual QXmppTask<QHash<QString, QHash<QByteArray, QXmpp::TrustLevel>>> keys(const QString &encryption, const QList<QString> &keyOwnerJids, QXmpp::TrustLevels trustLevels = {}) = 0; + virtual QXmppTask<bool> hasKey(const QString &encryption, const QString &keyOwnerJid, QXmpp::TrustLevels trustLevels) = 0; - virtual QFuture<QHash<QString, QMultiHash<QString, QByteArray>>> setTrustLevel(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIds, QXmpp::TrustLevel trustLevel) = 0; - virtual QFuture<QHash<QString, QMultiHash<QString, QByteArray>>> setTrustLevel(const QString &encryption, const QList<QString> &keyOwnerJids, QXmpp::TrustLevel oldTrustLevel, QXmpp::TrustLevel newTrustLevel) = 0; - virtual QFuture<QXmpp::TrustLevel> trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId) = 0; + virtual QXmppTask<QHash<QString, QMultiHash<QString, QByteArray>>> setTrustLevel(const QString &encryption, const QMultiHash<QString, QByteArray> &keyIds, QXmpp::TrustLevel trustLevel) = 0; + virtual QXmppTask<QHash<QString, QMultiHash<QString, QByteArray>>> setTrustLevel(const QString &encryption, const QList<QString> &keyOwnerJids, QXmpp::TrustLevel oldTrustLevel, QXmpp::TrustLevel newTrustLevel) = 0; + virtual QXmppTask<QXmpp::TrustLevel> trustLevel(const QString &encryption, const QString &keyOwnerJid, const QByteArray &keyId) = 0; - virtual QFuture<void> resetAll(const QString &encryption) = 0; + virtual QXmppTask<void> 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<SlotResult> + const QString &uploadService) -> QXmppTask<SlotResult> { 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<SlotResult> + const QString &uploadService) -> QXmppTask<SlotResult> { 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<SlotResult> + const QString &uploadService) -> QXmppTask<SlotResult> { 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<typename T> -class QFuture; +class QXmppTask; class QMimeType; class QXmppHttpUploadRequestIq; class QXmppHttpUploadSlotIq; @@ -98,15 +98,15 @@ public: const QString &uploadService = QString()); using SlotResult = std::variant<QXmppHttpUploadSlotIq, QXmppStanza::Error>; - QFuture<SlotResult> requestSlot(const QFileInfo &file, - const QString &uploadService = {}); - QFuture<SlotResult> requestSlot(const QFileInfo &file, - const QString &customFileName, - const QString &uploadService = {}); - QFuture<SlotResult> requestSlot(const QString &fileName, - qint64 fileSize, - const QMimeType &mimeType, - const QString &uploadService = {}); + QXmppTask<SlotResult> requestSlot(const QFileInfo &file, + const QString &uploadService = {}); + QXmppTask<SlotResult> requestSlot(const QFileInfo &file, + const QString &customFileName, + const QString &uploadService = {}); + QXmppTask<SlotResult> 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<GetResult> + -> QXmppTask<GetResult> { return Pep::request<Item>(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<PublishResult> + -> QXmppTask<PublishResult> { 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 <variant> template<typename T> -class QFuture; +class QXmppTask; class QXmppGeolocItem; class QXMPP_EXPORT QXmppUserLocationManager : public QXmppClientExtension, public QXmppPubSubEventHandler @@ -28,8 +28,8 @@ public: QStringList discoveryFeatures() const override; - QFuture<GetResult> request(const QString &jid); - QFuture<PublishResult> publish(const Item &); + QXmppTask<GetResult> request(const QString &jid); + QXmppTask<PublishResult> 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<GetResult> + -> QXmppTask<GetResult> { return Pep::request<Item>(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<PublishResult> + -> QXmppTask<PublishResult> { 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<typename T> -class QFuture; +class QXmppTask; class QXMPP_EXPORT QXmppUserTuneManager : public QXmppClientExtension, public QXmppPubSubEventHandler { @@ -27,8 +27,8 @@ public: QStringList discoveryFeatures() const override; - QFuture<GetResult> request(const QString &jid); - QFuture<PublishResult> publish(const QXmppTuneItem &); + QXmppTask<GetResult> request(const QString &jid); + QXmppTask<PublishResult> publish(const QXmppTuneItem &); Q_SIGNAL void itemReceived(const QString &jid, const QXmppTuneItem &item); |
