diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-09-05 17:35:21 +0200 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-09-05 17:35:21 +0200 |
| commit | f74b261fad3f06e9e27d5aca7e86d9ca14b5a67a (patch) | |
| tree | bccc1e0066a4c28198c6d6743a2dbd5d13e8f294 | |
| parent | 94545f5d9303dc1e04ff3d1260bc62ce6f2ec5ee (diff) | |
| download | qxmpp-f74b261fad3f06e9e27d5aca7e86d9ca14b5a67a.tar.gz | |
Add QXmppMucRoom::name() to get the room's human-readable name.
| -rw-r--r-- | CHANGELOG | 3 | ||||
| -rw-r--r-- | src/client/QXmppMucManager.cpp | 40 | ||||
| -rw-r--r-- | src/client/QXmppMucManager.h | 7 |
3 files changed, 48 insertions, 2 deletions
@@ -4,8 +4,9 @@ QXmpp 0.7.2 (Unreleased) - Handle Error replies in QXmppDiscoveryManager so that library users can know about errors. - If building with Qt 5, use Qt's QDnsLookup instead of our backport. - - Improve MUC scritability: + - Improve MUC scriptability: * Add QXmppMucRoom::ban() to ban users. + * Add QXmppMucRoom::name() to get the room's human-readable name. * Add QXmppMucRoom::participantFullJid() to lookup an occupant full JID. QXmpp 0.7.1 (Sep 3, 2012) 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); } diff --git a/src/client/QXmppMucManager.h b/src/client/QXmppMucManager.h index d24a780e..341c9663 100644 --- a/src/client/QXmppMucManager.h +++ b/src/client/QXmppMucManager.h @@ -29,6 +29,7 @@ #include "QXmppPresence.h" class QXmppDataForm; +class QXmppDiscoveryIq; class QXmppMessage; class QXmppMucManagerPrivate; class QXmppMucRoom; @@ -104,6 +105,7 @@ class QXMPP_EXPORT QXmppMucRoom : public QObject Q_PROPERTY(QXmppMucRoom::Actions allowedActions READ allowedActions NOTIFY allowedActionsChanged) Q_PROPERTY(bool isJoined READ isJoined NOTIFY isJoinedChanged) Q_PROPERTY(QString jid READ jid CONSTANT) + Q_PROPERTY(QString name READ name NOTIFY nameChanged) Q_PROPERTY(QString nickName READ nickName WRITE setNickName NOTIFY nickNameChanged) Q_PROPERTY(QStringList participants READ participants NOTIFY participantsChanged) Q_PROPERTY(QString password READ password WRITE setPassword) @@ -126,6 +128,7 @@ public: Actions allowedActions() const; bool isJoined() const; QString jid() const; + QString name() const; QString nickName() const; void setNickName(const QString &nickName); @@ -166,6 +169,9 @@ signals: /// This signal is emitted when a message is received. void messageReceived(const QXmppMessage &message); + /// This signal is emitted when the room's human-readable name changes. + void nameChanged(const QString &name); + /// This signal is emitted when your own nick name changes. void nickNameChanged(const QString &nickName); @@ -202,6 +208,7 @@ public slots: private slots: void _q_disconnected(); + void _q_discoveryInfoReceived(const QXmppDiscoveryIq &iq); void _q_messageReceived(const QXmppMessage &message); void _q_presenceReceived(const QXmppPresence &presence); |
