onXmppEvent method
- XmppEvent event
override
Called when XmppConnection triggers an event
Implementation
@override
Future<void> onXmppEvent(XmppEvent event) async {
if (event is PubSubNotificationEvent) {
if (event.item.node != omemoDevicesXmlns) return;
logger.finest('Received PubSub device notification for ${event.from}');
final ownJid = getAttributes().getFullJID().toBare().toString();
final jid = JID.fromString(event.from).toBare();
final ids = event.item.payload.children
.map((child) => int.parse(child.attributes['id']! as String))
.toList();
if (event.from == ownJid) {
// Another client published to our device list node
if (!ids.contains(await _getDeviceId())) {
// Attempt to publish again
unawaited(publishBundle(await _getDeviceBundle()));
}
} else {
// Someone published to their device list node
logger.finest('Got devices $ids');
}
// Tell the OmemoManager
await (await _getOmemoManager()).onDeviceListUpdate(jid.toString(), ids);
// Generate an event
getAttributes().sendEvent(OmemoDeviceListUpdatedEvent(jid, ids));
}
}