aboutsummaryrefslogtreecommitdiff
path: root/examples/GuiClient
diff options
context:
space:
mode:
authorManjeet Dahiya <manjeetdahiya@gmail.com>2010-09-23 10:30:03 +0000
committerManjeet Dahiya <manjeetdahiya@gmail.com>2010-09-23 10:30:03 +0000
commit37d138f82abace4fc72caa71ffa82dd56ece689d (patch)
tree1b663a31f9d52976891bf1f7cfab7ff0a79c957e /examples/GuiClient
parent99cfed0132ccee589401554ebdb976f3ee18202b (diff)
downloadqxmpp-37d138f82abace4fc72caa71ffa82dd56ece689d.tar.gz
show disco details on profile dialog
Diffstat (limited to 'examples/GuiClient')
-rw-r--r--examples/GuiClient/mainDialog.cpp2
-rw-r--r--examples/GuiClient/profileDialog.cpp62
-rw-r--r--examples/GuiClient/profileDialog.h5
3 files changed, 63 insertions, 6 deletions
diff --git a/examples/GuiClient/mainDialog.cpp b/examples/GuiClient/mainDialog.cpp
index 32ef899a..914ef3bf 100644
--- a/examples/GuiClient/mainDialog.cpp
+++ b/examples/GuiClient/mainDialog.cpp
@@ -491,7 +491,7 @@ void mainDialog::showProfile(const QString& bareJid)
if(bareJid.isEmpty())
return;
- profileDialog dlg(this, bareJid, m_xmppClient);
+ profileDialog dlg(this, bareJid, m_xmppClient, m_capabilitiesCollection);
dlg.setBareJid(bareJid);
// TODO use original image
if(!m_vCardManager.getAvatar(bareJid).isNull())
diff --git a/examples/GuiClient/profileDialog.cpp b/examples/GuiClient/profileDialog.cpp
index 399536d5..7cef4599 100644
--- a/examples/GuiClient/profileDialog.cpp
+++ b/examples/GuiClient/profileDialog.cpp
@@ -9,10 +9,11 @@
#include "QXmppUtils.h"
#include "QXmppEntityTimeManager.h"
#include "QXmppEntityTimeIq.h"
+#include "QXmppConstants.h"
-profileDialog::profileDialog(QWidget *parent, const QString& bareJid, QXmppClient& client) :
+profileDialog::profileDialog(QWidget *parent, const QString& bareJid, QXmppClient& client, capabilitiesCollection& caps) :
QDialog(parent, Qt::WindowTitleHint|Qt::WindowSystemMenuHint),
- ui(new Ui::profileDialog), m_bareJid(bareJid), m_xmppClient(client)
+ ui(new Ui::profileDialog), m_bareJid(bareJid), m_xmppClient(client), m_caps(caps)
{
ui->setupUi(this);
@@ -93,21 +94,28 @@ void profileDialog::updateText()
{
QString resource = resources.at(i);
statusText += "<B>Resource: </B>" + resource;
- statusText += "</B><BR>";
+ statusText += "<BR>";
QXmppPresence presence = m_xmppClient.rosterManager().getPresence(m_bareJid, resource);
statusText += "<B>Status: </B>" + presenceToStatusText(presence);
statusText += "<BR>";
if(m_versions.contains(resource))
+ {
statusText += "<B>Software: </B>" + QString("%1 %2 %3").
arg(m_versions[resource].name()).
arg(m_versions[resource].version()).
arg(m_versions[resource].os());
- statusText += "<BR>";
+ statusText += "<BR>";
+ }
if(m_time.contains(resource))
+ {
statusText += "<B>Time: </B>" + QString("utc=%1 [tzo=%2]").
arg(m_time[resource].utc()).
arg(m_time[resource].tzo());
+ statusText += "<BR>";
+ }
+
+ statusText += getCapability(resource);
if(i < resources.count() - 1) // skip for the last item
statusText += "<BR>";
@@ -115,3 +123,49 @@ void profileDialog::updateText()
setStatusText(statusText);
}
+QString profileDialog::getCapability(const QString& resource)
+{
+ QMap<QString, QXmppPresence> presences = m_xmppClient.rosterManager().
+ getAllPresencesForBareJid(m_bareJid);
+ QXmppPresence& pre = presences[resource];
+ QString nodeVer;
+ QStringList resultFeatures;
+ QStringList resultIdentities;
+ foreach(QXmppElement extension, pre.extensions())
+ {
+ if(extension.tagName() == "c" &&
+ extension.attribute("xmlns") == ns_capabilities)
+ {
+ QString node = extension.attribute("node");
+ QString ver = extension.attribute("ver");
+ QString exts = extension.attribute("ext");
+ nodeVer = node + "#" + ver;
+ if(m_caps.isCapabilityAvailable(nodeVer))
+ {
+ resultFeatures << m_caps.getFeatures(nodeVer);
+ resultIdentities << m_caps.getIdentities(nodeVer);
+ }
+ if(!exts.isEmpty())
+ {
+ foreach(QString ext, exts.split(" ", QString::SkipEmptyParts))
+ {
+ nodeVer = node + "#" + ext;
+ if(m_caps.isCapabilityAvailable(nodeVer))
+ {
+ resultFeatures << m_caps.getFeatures(nodeVer);
+ resultIdentities << m_caps.getIdentities(nodeVer);
+ }
+ }
+ }
+ }
+ }
+
+ QString result;
+ result += "<B>Disco Identities:</B><BR>";
+ result += resultIdentities.join("<BR>");
+ result += "<BR>";
+ result += "<B>Disco Features:</B><BR>";
+ result += resultFeatures.join("<BR>");
+ result += "<BR>";
+ return result;
+}
diff --git a/examples/GuiClient/profileDialog.h b/examples/GuiClient/profileDialog.h
index 79cd0577..aafbc357 100644
--- a/examples/GuiClient/profileDialog.h
+++ b/examples/GuiClient/profileDialog.h
@@ -3,6 +3,7 @@
#include <QDialog>
#include <QMap>
+#include "capabilitiesCollection.h"
namespace Ui {
class profileDialog;
@@ -17,7 +18,7 @@ class profileDialog : public QDialog
Q_OBJECT
public:
- explicit profileDialog(QWidget *parent, const QString& bareJid, QXmppClient& client);
+ explicit profileDialog(QWidget *parent, const QString& bareJid, QXmppClient& client, capabilitiesCollection& caps);
~profileDialog();
void setClientRef(QXmppClient& m_xmppClient);
@@ -32,11 +33,13 @@ private slots:
private:
void updateText();
+ QString getCapability(const QString& resource);
private:
Ui::profileDialog *ui;
QString m_bareJid;
QXmppClient& m_xmppClient; // reference to the active QXmppClient (No ownership)
+ capabilitiesCollection& m_caps; // reference to the active QXmppClient (No ownership)
QMap<QString, QXmppVersionIq> m_versions;
QMap<QString, QXmppEntityTimeIq> m_time;
};