From 37d138f82abace4fc72caa71ffa82dd56ece689d Mon Sep 17 00:00:00 2001 From: Manjeet Dahiya Date: Thu, 23 Sep 2010 10:30:03 +0000 Subject: show disco details on profile dialog --- examples/GuiClient/profileDialog.cpp | 62 +++++++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 4 deletions(-) (limited to 'examples/GuiClient/profileDialog.cpp') 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 += "Resource: " + resource; - statusText += "
"; + statusText += "
"; QXmppPresence presence = m_xmppClient.rosterManager().getPresence(m_bareJid, resource); statusText += "Status: " + presenceToStatusText(presence); statusText += "
"; if(m_versions.contains(resource)) + { statusText += "Software: " + QString("%1 %2 %3"). arg(m_versions[resource].name()). arg(m_versions[resource].version()). arg(m_versions[resource].os()); - statusText += "
"; + statusText += "
"; + } if(m_time.contains(resource)) + { statusText += "Time: " + QString("utc=%1 [tzo=%2]"). arg(m_time[resource].utc()). arg(m_time[resource].tzo()); + statusText += "
"; + } + + statusText += getCapability(resource); if(i < resources.count() - 1) // skip for the last item statusText += "
"; @@ -115,3 +123,49 @@ void profileDialog::updateText() setStatusText(statusText); } +QString profileDialog::getCapability(const QString& resource) +{ + QMap 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 += "Disco Identities:
"; + result += resultIdentities.join("
"); + result += "
"; + result += "Disco Features:
"; + result += resultFeatures.join("
"); + result += "
"; + return result; +} -- cgit v1.2.3