aboutsummaryrefslogtreecommitdiff
path: root/src/QXmppPresence.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2011-05-02 13:43:17 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2011-05-02 13:43:17 +0000
commit83e9707acd8a7f5e2a78d23305b7695d8b22614f (patch)
tree96d776d08d7f9cace500c113b227fd4da0e0e931 /src/QXmppPresence.cpp
parent9bfc3bcab2e5772b34f2f3fd4bd125e5507c32d2 (diff)
downloadqxmpp-83e9707acd8a7f5e2a78d23305b7695d8b22614f.tar.gz
add explicit support for MUC presence extension (fixes: #91)
Diffstat (limited to 'src/QXmppPresence.cpp')
-rw-r--r--src/QXmppPresence.cpp61
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;
+}
+