aboutsummaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-06-07 12:12:06 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-06-07 12:12:06 +0000
commit4cec473eb18b22bd1e06146f061dcc22679120e3 (patch)
tree65ea592c314d4f8a265acd706f15d57c92ed85d3 /source
parent5cc6867063c060abe3748240813bff865f731a69 (diff)
downloadqxmpp-4cec473eb18b22bd1e06146f061dcc22679120e3.tar.gz
add QXmppMucAdminIq to administer chat room members
Diffstat (limited to 'source')
-rw-r--r--source/QXmppMucIq.cpp103
-rw-r--r--source/QXmppMucIq.h53
-rw-r--r--source/QXmppStream.cpp7
-rw-r--r--source/QXmppStream.h2
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: