diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2011-05-02 13:43:17 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2011-05-02 13:43:17 +0000 |
| commit | 83e9707acd8a7f5e2a78d23305b7695d8b22614f (patch) | |
| tree | 96d776d08d7f9cace500c113b227fd4da0e0e931 /src/QXmppPresence.cpp | |
| parent | 9bfc3bcab2e5772b34f2f3fd4bd125e5507c32d2 (diff) | |
| download | qxmpp-83e9707acd8a7f5e2a78d23305b7695d8b22614f.tar.gz | |
add explicit support for MUC presence extension (fixes: #91)
Diffstat (limited to 'src/QXmppPresence.cpp')
| -rw-r--r-- | src/QXmppPresence.cpp | 61 |
1 files changed, 60 insertions, 1 deletions
diff --git a/src/QXmppPresence.cpp b/src/QXmppPresence.cpp index 7cfd492c..7eda0423 100644 --- a/src/QXmppPresence.cpp +++ b/src/QXmppPresence.cpp @@ -107,8 +107,20 @@ void QXmppPresence::parse(const QDomElement &element) m_vCardUpdateType = VCardUpdateNone; while(!xElement.isNull()) { + // XEP-0045: Multi-User Chat + if(xElement.namespaceURI() == ns_muc_user) + { + QDomElement itemElement = xElement.firstChildElement("item"); + m_mucItem.parse(itemElement); + QDomElement statusElement = xElement.firstChildElement("status"); + m_mucStatusCodes.clear(); + while (!statusElement.isNull()) { + m_mucStatusCodes << statusElement.attribute("code").toInt(); + statusElement = statusElement.nextSiblingElement("status"); + } + } // XEP-0153: vCard-Based Avatars - if(xElement.namespaceURI() == ns_vcard_update) + else if(xElement.namespaceURI() == ns_vcard_update) { QDomElement photoElement = xElement.firstChildElement("photo"); if(!photoElement.isNull()) @@ -167,6 +179,21 @@ void QXmppPresence::toXml(QXmlStreamWriter *xmlWriter) const error().toXml(xmlWriter); + // XEP-0045: Multi-User Chat + if(!m_mucItem.isNull() || !m_mucStatusCodes.isEmpty()) + { + xmlWriter->writeStartElement("x"); + xmlWriter->writeAttribute("xmlns", ns_muc_user); + if (!m_mucItem.isNull()) + m_mucItem.toXml(xmlWriter); + foreach (int code, m_mucStatusCodes) { + xmlWriter->writeStartElement("status"); + xmlWriter->writeAttribute("code", QString::number(code)); + xmlWriter->writeEndElement(); + } + xmlWriter->writeEndElement(); + } + // XEP-0153: vCard-Based Avatars if(m_vCardUpdateType != VCardUpdateNone) { @@ -530,3 +557,35 @@ QStringList QXmppPresence::capabilityExt() const return m_capabilityExt; } +/// Returns the MUC item. + +QXmppMucItem QXmppPresence::mucItem() const +{ + return m_mucItem; +} + +/// Sets the MUC item. +/// +/// \param item + +void QXmppPresence::setMucItem(const QXmppMucItem &item) +{ + m_mucItem = item; +} + +/// Returns the MUC status codes. + +QList<int> QXmppPresence::mucStatusCodes() const +{ + return m_mucStatusCodes; +} + +/// Sets the MUC item. +/// +/// \param item + +void QXmppPresence::setMucStatusCodes(const QList<int> &statusCodes) +{ + m_mucStatusCodes = statusCodes; +} + |
