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/QXmppMucManager.cpp | |
| parent | e0a5eb58a2cb5617e5c638b5e4a2581dd6ec347b (diff) | |
| download | qxmpp-89b85eda7570337e2e9611a547e28f21bba0d48a.tar.gz | |
emit a signal when allowed MUC actions change
Diffstat (limited to 'src/QXmppMucManager.cpp')
| -rw-r--r-- | src/QXmppMucManager.cpp | 51 |
1 files changed, 34 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(); } |
