aboutsummaryrefslogtreecommitdiff
path: root/src
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
parentc389ff5e81b76b98f4c64433bbcc96aa5c977fb6 (diff)
downloadqxmpp-a11738552e463b49396f7735866a710890e9d828.tar.gz
initial support for XEP-0153: vCard-Based Avatars
Diffstat (limited to 'src')
-rw-r--r--src/QXmppPresence.cpp75
-rw-r--r--src/QXmppPresence.h18
2 files changed, 90 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
diff --git a/src/QXmppPresence.h b/src/QXmppPresence.h
index 5f75a3f0..ad78ea1c 100644
--- a/src/QXmppPresence.h
+++ b/src/QXmppPresence.h
@@ -45,6 +45,14 @@ public:
Probe
};
+ enum VCardUpdateType
+ {
+ VCardUpdateNone = 0,
+ PhotoNotAdvertized,
+ PhotoAdvertised,
+ PhotoNotReady
+ };
+
class Status
{
public:
@@ -105,6 +113,11 @@ public:
void parse(const QDomElement &element);
void toXml(QXmlStreamWriter *writer) const;
+ QByteArray photoHash() const;
+ void setPhotoHash(const QByteArray&);
+ VCardUpdateType vCardUpdateType();
+ void setVCardUpdateType(VCardUpdateType type);
+
// deprecated in release 0.2.0
// deprecated accessors, use the form without "get" instead
/// \cond
@@ -119,6 +132,11 @@ private:
Type m_type;
QXmppPresence::Status m_status;
+
+
+ //vCard update
+ QByteArray m_photoHash;
+ VCardUpdateType m_vCardUpdateType;
};
#endif // QXMPPPRESENCE_H