diff options
| author | Cochise César <cochisecesar@zoho.com> | 2022-01-10 01:27:06 -0300 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2022-03-09 18:29:46 +0100 |
| commit | f2aadfefa283aafc88131c643b97acd28989ac20 (patch) | |
| tree | 2c5bfcf4f3634ba4435151ad1ba51321691d6ae4 /src/client/QXmppUserLocationManager.cpp | |
| parent | a69475d8b196605b19e532d62d1fc375630ea8f1 (diff) | |
| download | qxmpp-f2aadfefa283aafc88131c643b97acd28989ac20.tar.gz | |
Implement XEP-0080: User Location
Diffstat (limited to 'src/client/QXmppUserLocationManager.cpp')
| -rw-r--r-- | src/client/QXmppUserLocationManager.cpp | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/client/QXmppUserLocationManager.cpp b/src/client/QXmppUserLocationManager.cpp new file mode 100644 index 00000000..d85a47d5 --- /dev/null +++ b/src/client/QXmppUserLocationManager.cpp @@ -0,0 +1,96 @@ +// SPDX-FileCopyrightText: 2022 Cochise César <cochisecesar@zoho.com> +// SPDX-FileCopyrightText: 2022 Linus Jahn <lnj@kaidan.im> +// +// SPDX-License-Identifier: LGPL-2.1-or-later + +#include "QXmppUserLocationManager.h" + +#include "QXmppConstants_p.h" +#include "QXmppGeolocItem.h" +#include "QXmppPep_p.h" + +using namespace QXmpp::Private; + +/// +/// \class QXmppUserLocationManager +/// +/// The QXmppUserLocationManager implements \xep{0080, User Location}. You'll receive +/// location updates from all presence subscriptions. You can publish location +/// information on the user's account (publish()) and request location information +/// from specific accounts (request()). +/// +/// The manager needs to be added to the client first and also requires the +/// QXmppPubSubManager. +/// \code +/// QXmppClient client; +/// auto *pubSubManager = client.addNewExtension<QXmppPubSubManager>(); +/// auto *locationManager = client.addNewExtension<QXmppUserLocationManager>(); +/// \endcode +/// +/// \since QXmpp 1.5 +/// +/// \ingroup Managers +/// + +/// +/// \typedef QXmppUserLocationManager::Item +/// +/// Used pubsub item type. +/// + +/// +/// \typedef QXmppUserLocationManager::GetResult +/// +/// Contains the User Location information or an error. +/// + +/// +/// \typedef QXmppUserLocationManager::PublishResult +/// +/// Contains the ID of the published item on success or a stanza error. +/// + +/// +/// \fn QXmppUserLocationManager::itemReceived() +/// +/// Emitted whenever a \xep{0080, User Location} items event arrives. +/// + +QXmppUserLocationManager::QXmppUserLocationManager() = default; + +QStringList QXmppUserLocationManager::discoveryFeatures() const +{ + return { + ns_geoloc, + ns_geoloc_notify, + }; +} + +/// +/// Request User Location information from an account. +/// +/// \param jid The account JID to request. +/// +auto QXmppUserLocationManager::request(const QString &jid) + -> QFuture<GetResult> +{ + return Pep::request<Item>(pubSub(), jid, ns_geoloc, this); +} + +/// +/// Publishes User Location information on the user's account. +/// +/// \param item The User Location item to be published. +/// +auto QXmppUserLocationManager::publish(const QXmppGeolocItem &item) + -> QFuture<PublishResult> +{ + return pubSub()->publishPepItem(ns_geoloc, item); +} + +/// \cond +bool QXmppUserLocationManager::handlePubSubEvent(const QDomElement &element, const QString &pubSubService, const QString &nodeName) +{ + return Pep::handlePubSubEvent<Item>(element, pubSubService, nodeName, ns_geoloc, this, &QXmppUserLocationManager::itemReceived); +} +/// \endcond |
