diff options
Diffstat (limited to 'src/omemo')
| -rw-r--r-- | src/omemo/QXmppOmemoManager.cpp | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/src/omemo/QXmppOmemoManager.cpp b/src/omemo/QXmppOmemoManager.cpp index 1f26ee16..856e00a5 100644 --- a/src/omemo/QXmppOmemoManager.cpp +++ b/src/omemo/QXmppOmemoManager.cpp @@ -1259,35 +1259,32 @@ bool Manager::handlePubSubEvent(const QDomElement &element, const QString &pubSu event.parse(element); switch (event.eventType()) { - // Items are published or deleted. + // Items have been published. case QXmppPubSubEventBase::Items: { - // If there are IDs of deleted items, check for an inconsistency. - // Otherwise, check for published items. - if (const auto retractIds = event.retractIds(); !retractIds.isEmpty()) { - // Specific items are deleted. - const auto &retractedItem = event.retractIds().constFirst(); - if (retractedItem == QXmppPubSubManager::standardItemIdToString(QXmppPubSubManager::Current)) { + const auto items = event.items(); + + // Only process items if the event notification contains one. + // That is necessary because PubSub allows publishing without + // items leading to notification-only events. + if (!items.isEmpty()) { + const auto &deviceListItem = items.constFirst(); + if (deviceListItem.id() == QXmppPubSubManager::standardItemIdToString(QXmppPubSubManager::Current)) { + d->updateDevices(pubSubService, event.items().constFirst()); + } else { d->handleIrregularDeviceListChanges(pubSubService); } - } else { - const auto items = event.items(); - - // Only process items if the event notification contains one. - // That is necessary because PubSub allows publishing without - // items leading to notification-only events. - if (!items.isEmpty()) { - const auto &deviceListItem = items.constFirst(); - if (deviceListItem.id() == QXmppPubSubManager::standardItemIdToString(QXmppPubSubManager::Current)) { - d->updateDevices(pubSubService, event.items().constFirst()); - } else { - d->handleIrregularDeviceListChanges(pubSubService); - } - } } break; } - + // Items have been retracted. + case QXmppPubSubEventBase::Retract: { + // Specific items are deleted. + const auto &retractedItem = event.retractIds().constFirst(); + if (retractedItem == QXmppPubSubManager::standardItemIdToString(QXmppPubSubManager::Current)) { + d->handleIrregularDeviceListChanges(pubSubService); + } + } // All items are deleted. case QXmppPubSubEventBase::Purge: // The whole node is deleted. |
