diff options
| author | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2010-09-04 08:25:45 +0000 |
|---|---|---|
| committer | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2010-09-04 08:25:45 +0000 |
| commit | a11738552e463b49396f7735866a710890e9d828 (patch) | |
| tree | 7ef561c4ed312f73581237e1ac0e4164d351128e /src/QXmppPresence.cpp | |
| parent | c389ff5e81b76b98f4c64433bbcc96aa5c977fb6 (diff) | |
| download | qxmpp-a11738552e463b49396f7735866a710890e9d828.tar.gz | |
initial support for XEP-0153: vCard-Based Avatars
Diffstat (limited to 'src/QXmppPresence.cpp')
| -rw-r--r-- | src/QXmppPresence.cpp | 75 |
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 |
