aboutsummaryrefslogtreecommitdiff
path: root/src/client/QXmppMucManager.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2012-09-05 17:35:21 +0200
committerJeremy Lainé <jeremy.laine@m4x.org>2012-09-05 17:35:21 +0200
commitf74b261fad3f06e9e27d5aca7e86d9ca14b5a67a (patch)
treebccc1e0066a4c28198c6d6743a2dbd5d13e8f294 /src/client/QXmppMucManager.cpp
parent94545f5d9303dc1e04ff3d1260bc62ce6f2ec5ee (diff)
downloadqxmpp-f74b261fad3f06e9e27d5aca7e86d9ca14b5a67a.tar.gz
Add QXmppMucRoom::name() to get the room's human-readable name.
Diffstat (limited to 'src/client/QXmppMucManager.cpp')
-rw-r--r--src/client/QXmppMucManager.cpp40
1 files changed, 39 insertions, 1 deletions
diff --git a/src/client/QXmppMucManager.cpp b/src/client/QXmppMucManager.cpp
index 7b981459..9ca71d77 100644
--- a/src/client/QXmppMucManager.cpp
+++ b/src/client/QXmppMucManager.cpp
@@ -26,6 +26,7 @@
#include "QXmppClient.h"
#include "QXmppConstants.h"
+#include "QXmppDiscoveryManager.h"
#include "QXmppMessage.h"
#include "QXmppMucIq.h"
#include "QXmppMucManager.h"
@@ -42,8 +43,10 @@ class QXmppMucRoomPrivate
public:
QString ownJid() const { return jid + "/" + nickName; }
QXmppClient *client;
+ QXmppDiscoveryManager *discoManager;
QXmppMucRoom::Actions allowedActions;
QString jid;
+ QString name;
QMap<QString, QXmppPresence> participants;
QString password;
QMap<QString, QXmppMucItem> permissions;
@@ -190,6 +193,7 @@ QXmppMucRoom::QXmppMucRoom(QXmppClient *client, const QString &jid, QObject *par
d = new QXmppMucRoomPrivate;
d->allowedActions = NoAction;
d->client = client;
+ d->discoManager = client->findExtension<QXmppDiscoveryManager>();
d->jid = jid;
check = connect(d->client, SIGNAL(disconnected()),
@@ -204,6 +208,10 @@ QXmppMucRoom::QXmppMucRoom(QXmppClient *client, const QString &jid, QObject *par
this, SLOT(_q_presenceReceived(QXmppPresence)));
Q_ASSERT(check);
+ check = connect(d->discoManager, SIGNAL(infoReceived(QXmppDiscoveryIq)),
+ this, SLOT(_q_discoveryInfoReceived(QXmppDiscoveryIq)));
+ Q_ASSERT(check);
+
// convenience signals for properties
check = connect(this, SIGNAL(joined()), this, SIGNAL(isJoinedChanged()));
Q_ASSERT(check);
@@ -329,6 +337,15 @@ bool QXmppMucRoom::leave(const QString &message)
return d->client->sendPacket(packet);
}
+/// Returns the chat room's human-readable name.
+///
+/// This name will only be available after the room has been joined.
+
+QString QXmppMucRoom::name() const
+{
+ return d->name;
+}
+
/// Returns your own nickname.
QString QXmppMucRoom::nickName() const
@@ -585,6 +602,22 @@ void QXmppMucRoom::_q_disconnected()
emit left();
}
+void QXmppMucRoom::_q_discoveryInfoReceived(const QXmppDiscoveryIq &iq)
+{
+ QString name;
+ foreach (const QXmppDiscoveryIq::Identity &identity, iq.identities()) {
+ if (identity.category() == "conference") {
+ name = identity.name();
+ break;
+ }
+ }
+
+ if (name != d->name) {
+ d->name = name;
+ emit nameChanged(name);
+ }
+}
+
void QXmppMucRoom::_q_messageReceived(const QXmppMessage &message)
{
if (QXmppUtils::jidToBareJid(message.from())!= d->jid)
@@ -643,8 +676,13 @@ void QXmppMucRoom::_q_presenceReceived(const QXmppPresence &presence)
if (added) {
emit participantAdded(jid);
emit participantsChanged();
- if (jid == d->ownJid())
+ if (jid == d->ownJid()) {
+ // request room information
+ if (d->discoManager)
+ d->discoManager->requestInfo(d->jid);
+
emit joined();
+ }
} else {
emit participantChanged(jid);
}