diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-06-07 12:12:06 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-06-07 12:12:06 +0000 |
| commit | 4cec473eb18b22bd1e06146f061dcc22679120e3 (patch) | |
| tree | 65ea592c314d4f8a265acd706f15d57c92ed85d3 /source | |
| parent | 5cc6867063c060abe3748240813bff865f731a69 (diff) | |
| download | qxmpp-4cec473eb18b22bd1e06146f061dcc22679120e3.tar.gz | |
add QXmppMucAdminIq to administer chat room members
Diffstat (limited to 'source')
| -rw-r--r-- | source/QXmppMucIq.cpp | 103 | ||||
| -rw-r--r-- | source/QXmppMucIq.h | 53 | ||||
| -rw-r--r-- | source/QXmppStream.cpp | 7 | ||||
| -rw-r--r-- | source/QXmppStream.h | 2 |
4 files changed, 164 insertions, 1 deletions
diff --git a/source/QXmppMucIq.cpp b/source/QXmppMucIq.cpp index d33e1c41..42fa50b5 100644 --- a/source/QXmppMucIq.cpp +++ b/source/QXmppMucIq.cpp @@ -27,6 +27,109 @@ #include "QXmppMucIq.h" #include "QXmppUtils.h" +QString QXmppMucAdminIq::Item::affiliation() const +{ + return m_affiliation; +} + +void QXmppMucAdminIq::Item::setAffiliation(const QString &affiliation) +{ + m_affiliation = affiliation; +} + +QString QXmppMucAdminIq::Item::jid() const +{ + return m_jid; +} + +void QXmppMucAdminIq::Item::setJid(const QString &jid) +{ + m_jid = jid; +} + +QString QXmppMucAdminIq::Item::nick() const +{ + return m_nick; +} + +void QXmppMucAdminIq::Item::setNick(const QString &nick) +{ + m_nick = nick; +} + +QString QXmppMucAdminIq::Item::reason() const +{ + return m_reason; +} + +void QXmppMucAdminIq::Item::setReason(const QString &reason) +{ + m_reason = reason; +} + +QString QXmppMucAdminIq::Item::role() const +{ + return m_role; +} + +void QXmppMucAdminIq::Item::setRole(const QString &role) +{ + m_role = role; +} + +QList<QXmppMucAdminIq::Item> QXmppMucAdminIq::items() const +{ + return m_items; +} + +void QXmppMucAdminIq::setItems(const QList<QXmppMucAdminIq::Item> &items) +{ + m_items = items; +} + +bool QXmppMucAdminIq::isMucAdminIq(const QDomElement &element) +{ + QDomElement queryElement = element.firstChildElement("query"); + return (queryElement.namespaceURI() == ns_muc_admin); +} + +void QXmppMucAdminIq::parse(const QDomElement &element) +{ + QXmppStanza::parse(element); + setTypeFromStr(element.attribute("type")); + + QDomElement queryElement = element.firstChildElement("query"); + QDomElement child = queryElement.firstChildElement("item"); + while (!child.isNull()) + { + QXmppMucAdminIq::Item item; + item.setAffiliation(element.attribute("affiliation")); + item.setJid(element.attribute("jid")); + item.setNick(element.attribute("nick")); + item.setRole(element.attribute("role")); + item.setReason(child.firstChildElement("reason").text()); + m_items << item; + child = child.nextSiblingElement("item"); + } +} +void QXmppMucAdminIq::toXmlElementFromChild(QXmlStreamWriter *writer) const +{ + writer->writeStartElement("query"); + helperToXmlAddAttribute(writer, "xmlns", ns_muc_admin); + foreach (const QXmppMucAdminIq::Item &item, m_items) + { + writer->writeStartElement("item"); + helperToXmlAddAttribute(writer, "jid", item.jid()); + helperToXmlAddAttribute(writer, "affiliation", item.affiliation()); + helperToXmlAddAttribute(writer, "nick", item.nick()); + helperToXmlAddAttribute(writer, "role", item.role()); + if (!item.reason().isEmpty()) + helperToXmlAddTextElement(writer, "reason", item.reason()); + writer->writeEndElement(); + } + writer->writeEndElement(); +} + QXmppDataForm QXmppMucOwnerIq::form() const { return m_form; diff --git a/source/QXmppMucIq.h b/source/QXmppMucIq.h index fb22c93f..2dd7b7c5 100644 --- a/source/QXmppMucIq.h +++ b/source/QXmppMucIq.h @@ -27,9 +27,60 @@ #include "QXmppDataForm.h" #include "QXmppIq.h" -/// \brief The QXmppClient class represents a chat room configuration IQ as +/// \brief The QXmppMucAdminIq class represents a chat room administration IQ +/// as defined by XEP-0045: Multi-User Chat. +/// +/// It is used to get or modify room memberships. +/// + +class QXmppMucAdminIq : public QXmppIq +{ +public: + class Item + { + public: + QString affiliation() const; + void setAffiliation(const QString &affiliation); + + QString jid() const; + void setJid(const QString &jid); + + QString nick() const; + void setNick(const QString &nick); + + QString reason() const; + void setReason(const QString &reason); + + QString role() const; + void setRole(const QString &role); + + void parse(const QDomElement &element); + void toXml(QXmlStreamWriter *writer) const; + + private: + QString m_affiliation; + QString m_jid; + QString m_nick; + QString m_reason; + QString m_role; + }; + + QList<QXmppMucAdminIq::Item> items() const; + void setItems(const QList<QXmppMucAdminIq::Item> &items); + + static bool isMucAdminIq(const QDomElement &element); + void parse(const QDomElement &element); + void toXmlElementFromChild(QXmlStreamWriter *writer) const; + +private: + QList<QXmppMucAdminIq::Item> m_items; +}; + +/// \brief The QXmppMucOwnerIq class represents a chat room configuration IQ as /// defined by XEP-0045: Multi-User Chat. /// +/// It is used to get or modify room configuration options. +/// /// \sa QXmppDataForm /// diff --git a/source/QXmppStream.cpp b/source/QXmppStream.cpp index 636a2437..888f7358 100644 --- a/source/QXmppStream.cpp +++ b/source/QXmppStream.cpp @@ -540,6 +540,13 @@ void QXmppStream::parser(const QByteArray& data) emit iqReceived(discoIq); } // XEP-0045: Multi-User Chat + else if (QXmppMucAdminIq::isMucAdminIq(element)) + { + QXmppMucAdminIq mucIq; + mucIq.parse(element); + emit mucAdminIqReceived(mucIq); + emit iqReceived(mucIq); + } else if (QXmppMucOwnerIq::isMucOwnerIq(element)) { QXmppMucOwnerIq mucIq; diff --git a/source/QXmppStream.h b/source/QXmppStream.h index 0332d885..b82592c2 100644 --- a/source/QXmppStream.h +++ b/source/QXmppStream.h @@ -53,6 +53,7 @@ class QXmppDiscoveryIq; class QXmppIbbCloseIq; class QXmppIbbDataIq; class QXmppIbbOpenIq; +class QXmppMucAdminIq; class QXmppMucOwnerIq; class QXmppStreamInitiationIq; class QXmppVersionIq; @@ -118,6 +119,7 @@ signals: void streamInitiationIqReceived(const QXmppStreamInitiationIq&); // XEP-0045: Multi-User Chat + void mucAdminIqReceived(const QXmppMucAdminIq&); void mucOwnerIqReceived(const QXmppMucOwnerIq&); private slots: |
