From 83e9707acd8a7f5e2a78d23305b7695d8b22614f Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Mon, 2 May 2011 13:43:17 +0000 Subject: add explicit support for MUC presence extension (fixes: #91) --- src/QXmppPresence.cpp | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) (limited to 'src/QXmppPresence.cpp') 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 QXmppPresence::mucStatusCodes() const +{ + return m_mucStatusCodes; +} + +/// Sets the MUC item. +/// +/// \param item + +void QXmppPresence::setMucStatusCodes(const QList &statusCodes) +{ + m_mucStatusCodes = statusCodes; +} + -- cgit v1.2.3