diff options
| author | Linus Jahn <lnj@kaidan.im> | 2020-11-05 17:10:59 +0100 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2021-06-27 20:17:18 +0200 |
| commit | 9c9377f609d87578051ab6521544d1f3d80b8011 (patch) | |
| tree | cd098e7c7422ee120f1694b4ae78b5c0e0e6ca9a /src/client | |
| parent | 5d33b33a25061675ca422523aaba7fdfa0d39014 (diff) | |
| download | qxmpp-9c9377f609d87578051ab6521544d1f3d80b8011.tar.gz | |
EntityTimeManager: Add QFuture-based request
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/QXmppEntityTimeManager.cpp | 39 | ||||
| -rw-r--r-- | src/client/QXmppEntityTimeManager.h | 19 |
2 files changed, 50 insertions, 8 deletions
diff --git a/src/client/QXmppEntityTimeManager.cpp b/src/client/QXmppEntityTimeManager.cpp index 68d31bdd..15ede78c 100644 --- a/src/client/QXmppEntityTimeManager.cpp +++ b/src/client/QXmppEntityTimeManager.cpp @@ -26,16 +26,29 @@ #include "QXmppClient.h" #include "QXmppConstants_p.h" #include "QXmppEntityTimeIq.h" +#include "QXmppGlobal_p.h" #include "QXmppUtils.h" #include <QDateTime> #include <QDomElement> +/// +/// \typedef QXmppEntityTimeManager::EntityTimeResult +/// +/// Contains the requested entity time or the returned error in case of a +/// failure. +/// +/// \since QXmpp 1.5 +/// + +/// /// Request the time from an XMPP entity. /// +/// The result is emitted on the timeReceived() signal. +/// /// \param jid - -QString QXmppEntityTimeManager::requestTime(const QString& jid) +/// +QString QXmppEntityTimeManager::requestTime(const QString &jid) { QXmppEntityTimeIq request; request.setType(QXmppIq::Get); @@ -46,13 +59,33 @@ QString QXmppEntityTimeManager::requestTime(const QString& jid) return QString(); } +/// +/// Requests the time from an XMPP entity and reports it via a QFuture. +/// +/// The timeReceived() signal is not emitted. +/// +/// \param jid +/// +/// \warning THIS API IS NOT FINALIZED YET! +/// +/// \since QXmpp 1.5 +/// +auto QXmppEntityTimeManager::requestEntityTime(const QString &jid) -> QFuture<EntityTimeResult> +{ + QXmppEntityTimeIq iq; + iq.setType(QXmppIq::Get); + iq.setTo(jid); + + return chainIq<EntityTimeResult, QXmppEntityTimeIq>(client()->sendIq(iq), this); +} + /// \cond QStringList QXmppEntityTimeManager::discoveryFeatures() const { return QStringList() << ns_entity_time; } -bool QXmppEntityTimeManager::handleStanza(const QDomElement& element) +bool QXmppEntityTimeManager::handleStanza(const QDomElement &element) { if (element.tagName() == "iq" && QXmppEntityTimeIq::isEntityTimeIq(element)) { QXmppEntityTimeIq entityTime; diff --git a/src/client/QXmppEntityTimeManager.h b/src/client/QXmppEntityTimeManager.h index 00aa4fe3..2d6e5556 100644 --- a/src/client/QXmppEntityTimeManager.h +++ b/src/client/QXmppEntityTimeManager.h @@ -26,28 +26,37 @@ #include "QXmppClientExtension.h" +#include <variant> + +template<class T> +class QFuture; class QXmppEntityTimeIq; +/// /// \brief The QXmppEntityTimeManager class provided the functionality to get /// the local time of an entity as defined by \xep{0202}: Entity Time. /// /// \ingroup Managers - +/// class QXMPP_EXPORT QXmppEntityTimeManager : public QXmppClientExtension { Q_OBJECT public: - QString requestTime(const QString& jid); + QString requestTime(const QString &jid); + + using EntityTimeResult = std::variant<QXmppEntityTimeIq, QXmppStanza::Error>; + QFuture<EntityTimeResult> requestEntityTime(const QString &jid); /// \cond QStringList discoveryFeatures() const override; - bool handleStanza(const QDomElement& element) override; + bool handleStanza(const QDomElement &element) override; /// \endcond Q_SIGNALS: - /// \brief This signal is emitted when a time response is received. - void timeReceived(const QXmppEntityTimeIq&); + /// \brief This signal is emitted when a time response is received. It's not + /// emitted when the QFuture-based request is used. + void timeReceived(const QXmppEntityTimeIq &); }; #endif // QXMPPENTITYTIMEMANAGER_H |
