From 89b85eda7570337e2e9611a547e28f21bba0d48a Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Wed, 4 May 2011 21:09:52 +0000 Subject: emit a signal when allowed MUC actions change --- src/QXmppMucManager.cpp | 51 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 17 deletions(-) (limited to 'src/QXmppMucManager.cpp') 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(); } -- cgit v1.2.3