aboutsummaryrefslogtreecommitdiff
path: root/src/QXmppPresence.cpp
diff options
context:
space:
mode:
authorManjeet Dahiya <manjeetdahiya@gmail.com>2010-09-04 08:25:45 +0000
committerManjeet Dahiya <manjeetdahiya@gmail.com>2010-09-04 08:25:45 +0000
commita11738552e463b49396f7735866a710890e9d828 (patch)
tree7ef561c4ed312f73581237e1ac0e4164d351128e /src/QXmppPresence.cpp
parentc389ff5e81b76b98f4c64433bbcc96aa5c977fb6 (diff)
downloadqxmpp-a11738552e463b49396f7735866a710890e9d828.tar.gz
initial support for XEP-0153: vCard-Based Avatars
Diffstat (limited to 'src/QXmppPresence.cpp')
-rw-r--r--src/QXmppPresence.cpp75
1 files changed, 72 insertions, 3 deletions
diff --git a/src/QXmppPresence.cpp b/src/QXmppPresence.cpp
index e043721c..fe2a9222 100644
--- a/src/QXmppPresence.cpp
+++ b/src/QXmppPresence.cpp
@@ -27,6 +27,7 @@
#include <QtDebug>
#include <QDomElement>
#include <QXmlStreamWriter>
+#include "QXmppConstants.h"
QXmppPresence::QXmppPresence(QXmppPresence::Type type,
const QXmppPresence::Status& status)
@@ -72,9 +73,36 @@ void QXmppPresence::parse(const QDomElement &element)
setTypeFromStr(element.attribute("type"));
m_status.parse(element);
+ QXmppElementList extensions;
QDomElement xElement = element.firstChildElement("x");
- if(!xElement.isNull())
- setExtensions(QXmppElement(xElement));
+ m_vCardUpdateType = VCardUpdateNone;
+ while(!xElement.isNull())
+ {
+ if(xElement.namespaceURI() == ns_vcard_update)
+ {
+ QDomElement photoElement = xElement.firstChildElement("photo");
+ if(!photoElement.isNull())
+ {
+ m_photoHash = photoElement.text().toUtf8();
+ if(m_photoHash.isEmpty())
+ m_vCardUpdateType = PhotoNotAdvertized;
+ else
+ m_vCardUpdateType = PhotoAdvertised;
+ }
+ else
+ {
+ m_photoHash = "";
+ m_vCardUpdateType = PhotoNotReady;
+ }
+ }
+ else
+ {
+ // other extensions
+ extensions << QXmppElement(xElement);
+ }
+ xElement = xElement.nextSiblingElement("x");
+ }
+ setExtensions(extensions);
}
void QXmppPresence::toXml(QXmlStreamWriter *xmlWriter) const
@@ -88,9 +116,30 @@ void QXmppPresence::toXml(QXmlStreamWriter *xmlWriter) const
m_status.toXml(xmlWriter);
error().toXml(xmlWriter);
+
+ if(m_vCardUpdateType != VCardUpdateNone)
+ {
+ xmlWriter->writeStartElement("x");
+ helperToXmlAddAttribute(xmlWriter, "xmlns", ns_vcard_update);
+ switch(m_vCardUpdateType)
+ {
+ case PhotoNotAdvertized:
+ helperToXmlAddTextElement(xmlWriter, "photo", "");
+ break;
+ case PhotoAdvertised:
+ helperToXmlAddTextElement(xmlWriter, "photo", m_photoHash);
+ break;
+ case PhotoNotReady:
+ break;
+ default:
+ break;
+ }
+ xmlWriter->writeEndElement();
+ }
+
foreach (const QXmppElement &extension, extensions())
extension.toXml(xmlWriter);
-
+
xmlWriter->writeEndElement();
}
@@ -323,6 +372,26 @@ void QXmppPresence::Status::toXml(QXmlStreamWriter *xmlWriter) const
helperToXmlAddNumberElement(xmlWriter, "priority", m_priority);
}
+QByteArray QXmppPresence::photoHash() const
+{
+ return m_photoHash;
+}
+
+void QXmppPresence::setPhotoHash(const QByteArray& photoHash)
+{
+ m_photoHash = photoHash;
+}
+
+QXmppPresence::VCardUpdateType QXmppPresence::vCardUpdateType()
+{
+ return m_vCardUpdateType;
+}
+
+void QXmppPresence::setVCardUpdateType(VCardUpdateType type)
+{
+ m_vCardUpdateType = type;
+}
+
/// \cond
QXmppPresence::Type QXmppPresence::getType() const