diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2011-05-03 14:45:25 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2011-05-03 14:45:25 +0000 |
| commit | e0a5eb58a2cb5617e5c638b5e4a2581dd6ec347b (patch) | |
| tree | 888be64cd54a53d5af8f76d6f276a693923bad22 /src | |
| parent | 2cda4e999fd59fab7fd16ec7cb718b95dd83b2f6 (diff) | |
| download | qxmpp-e0a5eb58a2cb5617e5c638b5e4a2581dd6ec347b.tar.gz | |
make requestPermissions() generate a single permissionsReceived()
Diffstat (limited to 'src')
| -rw-r--r-- | src/QXmppMucManager.cpp | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/QXmppMucManager.cpp b/src/QXmppMucManager.cpp index 146aa40a..60cf6ebd 100644 --- a/src/QXmppMucManager.cpp +++ b/src/QXmppMucManager.cpp @@ -46,7 +46,8 @@ public: QString jid; QMap<QString, QXmppPresence> participants; QString password; - QMap<QString, QXmppMucItem::Affiliation> affiliations; + QMap<QString, QXmppMucItem> permissions; + QSet<QString> permissionsQueue; QString nickName; QString subject; }; @@ -112,13 +113,15 @@ bool QXmppMucManager::handleStanza(const QDomElement &element) iq.parse(element); QXmppMucRoom *room = d->rooms.value(iq.from()); - if (room && iq.type() == QXmppIq::Result) { + if (room && iq.type() == QXmppIq::Result && room->d->permissionsQueue.remove(iq.id())) { foreach (const QXmppMucItem &item, iq.items()) { const QString jid = item.jid(); - if (!room->d->affiliations.contains(jid)) - room->d->affiliations.insert(jid, item.affiliation()); + if (!room->d->permissions.contains(jid)) + room->d->permissions.insert(jid, item); + } + if (room->d->permissionsQueue.isEmpty()) { + emit room->permissionsReceived(room->d->permissions.values()); } - emit room->permissionsReceived(iq.items()); } return true; } @@ -443,6 +446,9 @@ bool QXmppMucRoom::requestPermissions() affiliations << QXmppMucItem::AdminAffiliation; affiliations << QXmppMucItem::MemberAffiliation; affiliations << QXmppMucItem::OutcastAffiliation; + + d->permissions.clear(); + d->permissionsQueue.clear(); foreach (QXmppMucItem::Affiliation affiliation, affiliations) { QXmppMucItem item; item.setAffiliation(affiliation); @@ -452,6 +458,7 @@ bool QXmppMucRoom::requestPermissions() iq.setItems(QList<QXmppMucItem>() << item); if (!d->client->sendPacket(iq)) return false; + d->permissionsQueue += iq.id(); } return true; } @@ -469,18 +476,18 @@ bool QXmppMucRoom::setPermissions(const QList<QXmppMucItem> &permissions) // Process changed members foreach (const QXmppMucItem &item, permissions) { const QString jid = item.jid(); - if (d->affiliations.value(jid) != item.affiliation()) + if (d->permissions.value(jid).affiliation() != item.affiliation()) items << item; - d->affiliations.remove(jid); + d->permissions.remove(jid); } // Process deleted members - foreach (const QString &jid, d->affiliations.keys()) { + foreach (const QString &jid, d->permissions.keys()) { QXmppMucItem item; item.setAffiliation(QXmppMucItem::NoAffiliation); item.setJid(jid); items << item; - d->affiliations.remove(jid); + d->permissions.remove(jid); } // Don't send request if there are no changes |
