[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdenetwork/kopete/protocols/jabber
From:       Pali Rohár <pali.rohar () gmail ! com>
Date:       2012-12-11 0:46:57
Message-ID: 20121211004657.17ACCAC867 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1328049 by pali:

Jabber Capabilities Manager - Added support for hash attribute

Kopete Jabber protocol has support only for legacy XEP-0115
so report Client Version only if hash attribute is not specified
and report Client Name only if identity category is "client"


 M  +32 -12    jabbercapabilitiesmanager.cpp  
 M  +7 -2      jabbercapabilitiesmanager.h  


--- trunk/KDE/kdenetwork/kopete/protocols/jabber/jabbercapabilitiesmanager.cpp \
#1328048:1328049 @@ -41,8 +41,8 @@
 JabberCapabilitiesManager::Capabilities::Capabilities()
 {}
 
-JabberCapabilitiesManager::Capabilities::Capabilities(const QString& node, const \
                QString& version, const QString& extensions) 
-	: m_node(node), m_version(version), m_extensions(extensions) 
+JabberCapabilitiesManager::Capabilities::Capabilities(const QString& node, const \
QString& version, const QString& extensions, const QString& hash) +	: m_node(node), \
m_version(version), m_extensions(extensions), m_hash(hash)  {}
 
 const QString& JabberCapabilitiesManager::Capabilities::node() const 
@@ -60,16 +60,21 @@
 	return m_extensions; 
 }
 
+const QString& JabberCapabilitiesManager::Capabilities::hash() const
+{
+	return m_hash;
+}
+
 JabberCapabilitiesManager::CapabilitiesList \
JabberCapabilitiesManager::Capabilities::flatten() const   {
 	CapabilitiesList capsList;
-	capsList.append( Capabilities(node(), version(), version()) );
+	capsList.append( Capabilities(node(), version(), version(), hash()) );
 
 	QStringList extensionList = extensions().split(' ');
 
 	foreach(QStringList::const_reference str, extensionList)
 	{
-		capsList.append( Capabilities(node(), version(), str) );
+		capsList.append( Capabilities(node(), version(), str, hash()) );
 	}
 
 	return capsList;
@@ -77,7 +82,7 @@
 
 bool JabberCapabilitiesManager::Capabilities::operator==(const Capabilities &other) \
const   {
-	return (node() == other.node() && version() == other.version() && extensions() == \
other.extensions()); +	return (node() == other.node() && version() == other.version() \
&& extensions() == other.extensions() && hash() == other.hash());  }
 
 bool JabberCapabilitiesManager::Capabilities::operator!=(const Capabilities &other) \
const  @@ -89,7 +94,8 @@
 {
 	return (node() != other.node() ? node() < other.node() :
 			(version() != other.version() ? version() < other.version() : 
-			 extensions() < other.extensions()));
+			 (extensions() != other.extensions() ? extensions() < other.extensions() :
+			  hash() < other.hash())));
 }
 //END Capabilities
 
@@ -356,8 +362,8 @@
 	if( jid.compare(account->client()->jid(), false) )
 		return;
 
-	QString node = status.capsNode(), version = status.capsVersion(), extensions = \
                status.capsExt();
-	Capabilities capabilities( node, version, extensions );
+	QString node = status.capsNode(), version = status.capsVersion(), extensions = \
status.capsExt(), hash = status.capsHash(); +	Capabilities capabilities( node, \
version, extensions, hash );  
 	// Check if the capabilities was really updated(i.e the content is different)
 	if( d->jidCapabilitiesMap[jid.full()] != capabilities) 
@@ -457,7 +463,7 @@
 	Capabilities jidCapabilities = d->jidCapabilitiesMap[jid.full()];
 	if( jidCapabilities.node() == node )
 	{
-		Capabilities capabilities(node, jidCapabilities.version(), extensions);
+		Capabilities capabilities(node, jidCapabilities.version(), extensions, \
jidCapabilities.hash());  
 		if( discoInfo->success() )
 		{
@@ -548,7 +554,7 @@
 		{
 			CapabilitiesInformation info;
 			info.fromXml(element);
-			Capabilities entityCaps( \
element.attribute("node"),element.attribute("ver"),element.attribute("ext") ); \
+			Capabilities entityCaps( \
element.attribute("node"),element.attribute("ver"),element.attribute("ext"),element.attribute("hash") \
);  d->capabilitiesInformationMap[entityCaps] = info;
 		}
 		else 
@@ -585,8 +591,18 @@
 	if( capabilitiesEnabled(jid) ) 
 	{
 		Capabilities caps = d->jidCapabilitiesMap[jid.full()];
-		QString name = d->capabilitiesInformationMap[Capabilities(caps.node(),caps.version(),caps.version())].identities().first().name;
 +		const XMPP::DiscoItem::Identities &identities = \
d->capabilitiesInformationMap[Capabilities(caps.node(),caps.version(),caps.version(),caps.hash())].identities();
 +		QString name;
 		
+		for ( int i = 0; i < identities.size(); ++i )
+		{
+			if ( identities[i].category == "client" && ! identities[i].name.isEmpty() )
+			{
+				name = identities[i].name;
+				break;
+			}
+		}
+		
 		// Try to be intelligent about the name
 		/*if (name.isEmpty()) {
 			name = cs.node();
@@ -612,7 +628,10 @@
 
 QString JabberCapabilitiesManager::clientVersion(const Jid& jid) const
 {
-	return (capabilitiesEnabled(jid) ? d->jidCapabilitiesMap[jid.full()].version() : \
QString()); +	if (!capabilitiesEnabled(jid))
+		return QString();
+	else
+		return (d->jidCapabilitiesMap[jid.full()].hash().isEmpty() ? \
d->jidCapabilitiesMap[jid.full()].version() : QString());  }
 
 void JabberCapabilitiesManager::saveInformation()
@@ -632,6 +651,7 @@
 		info.setAttribute("node",it.key().node());
 		info.setAttribute("ver",it.key().version());
 		info.setAttribute("ext",it.key().extensions());
+		info.setAttribute("hash",it.key().hash());
 		capabilities.appendChild(info);
 	}
 
--- trunk/KDE/kdenetwork/kopete/protocols/jabber/jabbercapabilitiesmanager.h \
#1328048:1328049 @@ -140,8 +140,9 @@
 			 * @param node the node
 			 * @param version the version
 			 * @param extensions the list of extensions (separated by spaces)
+			 * @param hash the hash
 			 */
-			Capabilities(const QString &node, const QString &version, const QString \
&extensions); +			Capabilities(const QString &node, const QString &version, const \
QString &extensions, const QString &hash);  /**
 			 * Returns the node of the capabilities specification.
 			 */
@@ -155,6 +156,10 @@
 			 */
 			const QString& extensions() const; 
 			/**
+			 * @brief Returns the hash of the capabilities specification.
+			 */
+			const QString& hash() const;
+			/**
 			 * \brief Flattens the caps specification into the set of 'simple' \
                specifications.
 			 * A 'simple' specification is a specification with exactly one extension,
 			 * or with the version number as the extension.
@@ -172,7 +177,7 @@
 			bool operator<(const Capabilities&) const;
 				
 		private:
-			QString m_node, m_version, m_extensions;
+			QString m_node, m_version, m_extensions, m_hash;
 	};
 
 	class CapabilitiesInformation


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic