diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2011-09-29 09:37:27 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2011-09-29 09:37:27 +0000 |
| commit | dbb5972cda8e66ad4d7989e4ff0354b34e65c0ac (patch) | |
| tree | b3fec7fb86c78cc2afaf6eaa49e66a0c4d5d8e43 /src | |
| parent | 31b11a9ff762854f58468010c7e02b0c79108e3b (diff) | |
| download | qxmpp-dbb5972cda8e66ad4d7989e4ff0354b34e65c0ac.tar.gz | |
add notifier signal for QXmppMucRoom::participants property
Diffstat (limited to 'src')
| -rw-r--r-- | src/QXmppMucManager.cpp | 9 | ||||
| -rw-r--r-- | src/QXmppMucManager.h | 6 |
2 files changed, 12 insertions, 3 deletions
diff --git a/src/QXmppMucManager.cpp b/src/QXmppMucManager.cpp index 041e3f85..bc4a0468 100644 --- a/src/QXmppMucManager.cpp +++ b/src/QXmppMucManager.cpp @@ -66,7 +66,7 @@ QXmppMucManager::~QXmppMucManager() delete d; } -/// Adds the given chat room to the set of manged rooms. +/// Adds the given chat room to the set of managed rooms. /// /// \param roomJid @@ -151,7 +151,7 @@ void QXmppMucManager::_q_messageReceived(const QXmppMessage &msg) if (extension.tagName() == "x" && extension.attribute("xmlns") == ns_conference) { const QString roomJid = extension.attribute("jid"); - if (!roomJid.isEmpty() && !d->rooms.contains(roomJid)) + if (!roomJid.isEmpty() && (!d->rooms.contains(roomJid) || !d->rooms.value(roomJid)->isJoined())) emit invitationReceived(roomJid, msg.from(), extension.attribute("reason")); break; } @@ -191,6 +191,7 @@ QXmppMucRoom::QXmppMucRoom(QXmppClient *client, const QString &jid, QObject *par this, SLOT(_q_presenceReceived(QXmppPresence))); Q_ASSERT(check); + // convenience signals for properties check = connect(this, SIGNAL(joined()), this, SIGNAL(isJoinedChanged())); Q_ASSERT(check); @@ -522,6 +523,7 @@ void QXmppMucRoom::_q_disconnected() d->participants.clear(); foreach (const QString &jid, removed) emit participantRemoved(jid); + emit participantsChanged(); // update available actions if (d->allowedActions != NoAction) { @@ -591,6 +593,7 @@ void QXmppMucRoom::_q_presenceReceived(const QXmppPresence &presence) if (added) { emit participantAdded(jid); + emit participantsChanged(); if (jid == d->ownJid()) emit joined(); } else { @@ -603,6 +606,7 @@ void QXmppMucRoom::_q_presenceReceived(const QXmppPresence &presence) emit participantRemoved(jid); d->participants.remove(jid); + emit participantsChanged(); // check whether this was our own presence if (jid == d->ownJid()) { @@ -619,6 +623,7 @@ void QXmppMucRoom::_q_presenceReceived(const QXmppPresence &presence) d->participants.clear(); foreach (const QString &jid, removed) emit participantRemoved(jid); + emit participantsChanged(); // update available actions if (d->allowedActions != NoAction) { diff --git a/src/QXmppMucManager.h b/src/QXmppMucManager.h index c8ae12e2..61242219 100644 --- a/src/QXmppMucManager.h +++ b/src/QXmppMucManager.h @@ -100,7 +100,7 @@ class QXmppMucRoom : public QObject Q_PROPERTY(bool isJoined READ isJoined NOTIFY isJoinedChanged) Q_PROPERTY(QString jid READ jid CONSTANT) Q_PROPERTY(QString nickName READ nickName WRITE setNickName NOTIFY nickNameChanged) - Q_PROPERTY(QStringList participants READ participants) + Q_PROPERTY(QStringList participants READ participants NOTIFY participantsChanged) Q_PROPERTY(QString password READ password WRITE setPassword) Q_PROPERTY(QString subject READ subject WRITE setSubject NOTIFY subjectChanged) @@ -172,6 +172,10 @@ signals: /// This signal is emitted when a participant leaves the room. void participantRemoved(const QString &jid); + /// \cond + void participantsChanged(); + /// \endcond + /// This signal is emitted when the room's permissions are received. void permissionsReceived(const QList<QXmppMucItem> &permissions); |
