aboutsummaryrefslogtreecommitdiff
path: root/examples/GuiClient/capabilitiesCollection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/GuiClient/capabilitiesCollection.cpp')
-rw-r--r--examples/GuiClient/capabilitiesCollection.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/examples/GuiClient/capabilitiesCollection.cpp b/examples/GuiClient/capabilitiesCollection.cpp
new file mode 100644
index 00000000..f8d8a02e
--- /dev/null
+++ b/examples/GuiClient/capabilitiesCollection.cpp
@@ -0,0 +1,47 @@
+#include "capabilitiesCollection.h"
+
+#include "QXmppClient.h"
+#include "QXmppDiscoveryManager.h"
+#include <QXmlStreamWriter>
+
+capabilitiesCollection::capabilitiesCollection(QXmppClient* client) :
+ QObject(client), m_client(client)
+{
+ QXmppDiscoveryManager* ext = m_client->findExtension<QXmppDiscoveryManager>();
+ if(ext)
+ {
+ bool check = connect(ext, SIGNAL(infoReceived(const QXmppDiscoveryIq&)),
+ SLOT(infoReceived(const QXmppDiscoveryIq&)));
+ Q_ASSERT(check);
+ }
+}
+
+bool capabilitiesCollection::isCapabilityAvailable(const QString& nodeVer)
+{
+ return m_mapCapabilities.contains(nodeVer);
+}
+
+void capabilitiesCollection::requestInfo(const QString& jid, const QString& node)
+{
+ QXmppDiscoveryManager* ext = m_client->findExtension<QXmppDiscoveryManager>();
+ if(ext)
+ {
+ ext->requestInfo(jid, node);
+ }
+}
+
+void capabilitiesCollection::infoReceived(const QXmppDiscoveryIq& discoIqRcv)
+{
+ QXmppDiscoveryIq discoIq = discoIqRcv;
+ if(discoIq.queryType() == QXmppDiscoveryIq::InfoQuery &&
+ discoIq.type() == QXmppIq::Result)
+ {
+ if(!discoIq.queryNode().isEmpty())
+ {
+ discoIq.setTo("");
+ discoIq.setFrom("");
+ discoIq.setId("");
+ m_mapCapabilities[discoIq.queryNode()] = discoIq;
+ }
+ }
+}