diff options
| author | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2010-09-23 10:30:03 +0000 |
|---|---|---|
| committer | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2010-09-23 10:30:03 +0000 |
| commit | 37d138f82abace4fc72caa71ffa82dd56ece689d (patch) | |
| tree | 1b663a31f9d52976891bf1f7cfab7ff0a79c957e /examples/GuiClient | |
| parent | 99cfed0132ccee589401554ebdb976f3ee18202b (diff) | |
| download | qxmpp-37d138f82abace4fc72caa71ffa82dd56ece689d.tar.gz | |
show disco details on profile dialog
Diffstat (limited to 'examples/GuiClient')
| -rw-r--r-- | examples/GuiClient/mainDialog.cpp | 2 | ||||
| -rw-r--r-- | examples/GuiClient/profileDialog.cpp | 62 | ||||
| -rw-r--r-- | examples/GuiClient/profileDialog.h | 5 |
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; }; |
