aboutsummaryrefslogtreecommitdiff
path: root/src/client/QXmppUserLocationManager.cpp
diff options
context:
space:
mode:
authorCochise César <cochisecesar@zoho.com>2022-01-10 01:27:06 -0300
committerLinus Jahn <lnj@kaidan.im>2022-03-09 18:29:46 +0100
commitf2aadfefa283aafc88131c643b97acd28989ac20 (patch)
tree2c5bfcf4f3634ba4435151ad1ba51321691d6ae4 /src/client/QXmppUserLocationManager.cpp
parenta69475d8b196605b19e532d62d1fc375630ea8f1 (diff)
downloadqxmpp-f2aadfefa283aafc88131c643b97acd28989ac20.tar.gz
Implement XEP-0080: User Location
Diffstat (limited to 'src/client/QXmppUserLocationManager.cpp')
-rw-r--r--src/client/QXmppUserLocationManager.cpp96
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