diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2011-05-04 21:09:52 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2011-05-04 21:09:52 +0000 |
| commit | 89b85eda7570337e2e9611a547e28f21bba0d48a (patch) | |
| tree | d4466c6bd2a06e295dff0b31268d7f7f6b7a0c14 /src | |
| parent | e0a5eb58a2cb5617e5c638b5e4a2581dd6ec347b (diff) | |
| download | qxmpp-89b85eda7570337e2e9611a547e28f21bba0d48a.tar.gz | |
emit a signal when allowed MUC actions change
Diffstat (limited to 'src')
| -rw-r--r-- | src/QXmppMucManager.cpp | 51 | ||||
| -rw-r--r-- | src/QXmppMucManager.h | 4 |
2 files changed, 38 insertions, 17 deletions
diff --git a/src/QXmppMucManager.cpp b/src/QXmppMucManager.cpp index 60cf6ebd..f2a8933b 100644 --- a/src/QXmppMucManager.cpp +++ b/src/QXmppMucManager.cpp @@ -511,6 +511,12 @@ void QXmppMucRoom::_q_disconnected() foreach (const QString &jid, removed) emit participantRemoved(jid); + // update available actions + if (d->allowedActions != NoAction) { + d->allowedActions = NoAction; + emit allowedActionsChanged(d->allowedActions); + } + // emit "left" signal if we had joined the room if (wasJoined) emit left(); @@ -548,28 +554,33 @@ void QXmppMucRoom::_q_presenceReceived(const QXmppPresence &presence) if (presence.type() == QXmppPresence::Available) { const bool added = !d->participants.contains(jid); d->participants.insert(jid, presence); - if (added) { - emit participantAdded(jid); - if (jid == d->ownJid()) { - // check whether we own the room - QXmppMucItem mucItem = presence.mucItem(); - if (mucItem.jid() == d->client->configuration().jid()) { - d->allowedActions = NoAction; + // refresh allowed actions + if (jid == d->ownJid()) { - // role - if (mucItem.role() == QXmppMucItem::ModeratorRole) - d->allowedActions |= (KickAction | SubjectAction); + QXmppMucItem mucItem = presence.mucItem(); + Actions newActions = NoAction; - // affiliation - if (mucItem.affiliation() == QXmppMucItem::OwnerAffiliation) - d->allowedActions |= (ConfigurationAction | PermissionsAction | SubjectAction); - else if (mucItem.affiliation() == QXmppMucItem::AdminAffiliation) - d->allowedActions |= (PermissionsAction | SubjectAction); - } + // role + if (mucItem.role() == QXmppMucItem::ModeratorRole) + newActions |= (KickAction | SubjectAction); - emit joined(); + // affiliation + if (mucItem.affiliation() == QXmppMucItem::OwnerAffiliation) + newActions |= (ConfigurationAction | PermissionsAction | SubjectAction); + else if (mucItem.affiliation() == QXmppMucItem::AdminAffiliation) + newActions |= (PermissionsAction | SubjectAction); + + if (newActions != d->allowedActions) { + d->allowedActions = newActions; + emit allowedActionsChanged(d->allowedActions); } + } + + if (added) { + emit participantAdded(jid); + if (jid == d->ownJid()) + emit joined(); } else { emit participantChanged(jid); } @@ -594,6 +605,12 @@ void QXmppMucRoom::_q_presenceReceived(const QXmppPresence &presence) foreach (const QString &jid, removed) emit participantRemoved(jid); + // update available actions + if (d->allowedActions != NoAction) { + d->allowedActions = NoAction; + emit allowedActionsChanged(d->allowedActions); + } + // notify user we left the room emit left(); } diff --git a/src/QXmppMucManager.h b/src/QXmppMucManager.h index 889364ca..cbf9e5ce 100644 --- a/src/QXmppMucManager.h +++ b/src/QXmppMucManager.h @@ -95,6 +95,7 @@ private: class QXmppMucRoom : public QObject { Q_OBJECT + Q_PROPERTY(QXmppMucRoom::Actions allowedActions READ allowedActions NOTIFY allowedActionsChanged) Q_PROPERTY(QString jid READ jid) Q_PROPERTY(QString nickName READ nickName WRITE setNickName) Q_PROPERTY(QStringList participants READ participants) @@ -132,6 +133,9 @@ public: void setSubject(const QString &subject); signals: + /// This signal is emitted when the allowed actions change. + void allowedActionsChanged(QXmppMucRoom::Actions actions) const; + /// This signal is emitted when the configuration form for the room is received. void configurationReceived(const QXmppDataForm &configuration); |
