feat(core): Remove the PresenceReceivedEvent
This commit is contained in:
		
							parent
							
								
									cbd90b1163
								
							
						
					
					
						commit
						da1d28a6d6
					
				| @ -14,6 +14,7 @@ | |||||||
| - **BREAKING**: `MessageManager.sendMessage` does not use `MessageDetails` anymore. Instead, use `TypedMap`. | - **BREAKING**: `MessageManager.sendMessage` does not use `MessageDetails` anymore. Instead, use `TypedMap`. | ||||||
| - `MessageManager` now allows registering callbacks for adding data whenever a message is sent. | - `MessageManager` now allows registering callbacks for adding data whenever a message is sent. | ||||||
| - **BREAKING**: `MessageEvent` now makes use of `TypedMap`. | - **BREAKING**: `MessageEvent` now makes use of `TypedMap`. | ||||||
|  | - **BREAKING**: Removed `PresenceReceivedEvent`. Use a manager registering handlers with priority greater than `[PresenceManager.presenceHandlerPriority]` instead. | ||||||
| 
 | 
 | ||||||
| ## 0.3.1 | ## 0.3.1 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -138,13 +138,6 @@ class ResourceBoundEvent extends XmppEvent { | |||||||
|   final String resource; |   final String resource; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /// Triggered when we receive presence |  | ||||||
| class PresenceReceivedEvent extends XmppEvent { |  | ||||||
|   PresenceReceivedEvent(this.jid, this.presence); |  | ||||||
|   final JID jid; |  | ||||||
|   final Stanza presence; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /// Triggered when we are starting an connection attempt | /// Triggered when we are starting an connection attempt | ||||||
| class ConnectingEvent extends XmppEvent {} | class ConnectingEvent extends XmppEvent {} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -46,6 +46,11 @@ class MessageIdData { | |||||||
| class MessageManager extends XmppManagerBase { | class MessageManager extends XmppManagerBase { | ||||||
|   MessageManager() : super(messageManager); |   MessageManager() : super(messageManager); | ||||||
| 
 | 
 | ||||||
|  |   /// The priority of the message handler. If a handler should run before this one, | ||||||
|  |   /// which emits the [MessageEvent] event and terminates processing, make sure it | ||||||
|  |   /// has a priority greater than [messageHandlerPriority]. | ||||||
|  |   static int messageHandlerPriority = -100; | ||||||
|  | 
 | ||||||
|   /// A list of callbacks that are called when a message is sent in order to add |   /// A list of callbacks that are called when a message is sent in order to add | ||||||
|   /// appropriate child elements. |   /// appropriate child elements. | ||||||
|   final List<MessageSendingCallback> _messageSendingCallbacks = |   final List<MessageSendingCallback> _messageSendingCallbacks = | ||||||
| @ -60,7 +65,7 @@ class MessageManager extends XmppManagerBase { | |||||||
|         StanzaHandler( |         StanzaHandler( | ||||||
|           stanzaTag: 'message', |           stanzaTag: 'message', | ||||||
|           callback: _onMessage, |           callback: _onMessage, | ||||||
|           priority: -100, |           priority: messageHandlerPriority, | ||||||
|         ) |         ) | ||||||
|       ]; |       ]; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -23,11 +23,17 @@ class PresenceManager extends XmppManagerBase { | |||||||
|   final List<PresencePreSendCallback> _presenceCallbacks = |   final List<PresencePreSendCallback> _presenceCallbacks = | ||||||
|       List.empty(growable: true); |       List.empty(growable: true); | ||||||
| 
 | 
 | ||||||
|  |   /// The priority of the presence handler. If a handler should run before this one, | ||||||
|  |   /// which terminates processing, make sure the handler has a priority greater than | ||||||
|  |   /// [presenceHandlerPriority]. | ||||||
|  |   static int presenceHandlerPriority = -100; | ||||||
|  | 
 | ||||||
|   @override |   @override | ||||||
|   List<StanzaHandler> getIncomingStanzaHandlers() => [ |   List<StanzaHandler> getIncomingStanzaHandlers() => [ | ||||||
|         StanzaHandler( |         StanzaHandler( | ||||||
|           stanzaTag: 'presence', |           stanzaTag: 'presence', | ||||||
|           callback: _onPresence, |           callback: _onPresence, | ||||||
|  |           priority: presenceHandlerPriority, | ||||||
|         ) |         ) | ||||||
|       ]; |       ]; | ||||||
| 
 | 
 | ||||||
| @ -75,9 +81,6 @@ class PresenceManager extends XmppManagerBase { | |||||||
|     if (presence.from != null) { |     if (presence.from != null) { | ||||||
|       logger.finest("Received presence from '${presence.from}'"); |       logger.finest("Received presence from '${presence.from}'"); | ||||||
| 
 | 
 | ||||||
|       getAttributes().sendEvent( |  | ||||||
|         PresenceReceivedEvent(JID.fromString(presence.from!), presence), |  | ||||||
|       ); |  | ||||||
|       return state..done = true; |       return state..done = true; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -4,10 +4,13 @@ import 'package:meta/meta.dart'; | |||||||
| import 'package:moxxmpp/src/events.dart'; | import 'package:moxxmpp/src/events.dart'; | ||||||
| import 'package:moxxmpp/src/jid.dart'; | import 'package:moxxmpp/src/jid.dart'; | ||||||
| import 'package:moxxmpp/src/managers/base.dart'; | import 'package:moxxmpp/src/managers/base.dart'; | ||||||
|  | import 'package:moxxmpp/src/managers/data.dart'; | ||||||
|  | import 'package:moxxmpp/src/managers/handlers.dart'; | ||||||
| import 'package:moxxmpp/src/managers/namespaces.dart'; | import 'package:moxxmpp/src/managers/namespaces.dart'; | ||||||
| import 'package:moxxmpp/src/namespaces.dart'; | import 'package:moxxmpp/src/namespaces.dart'; | ||||||
| import 'package:moxxmpp/src/presence.dart'; | import 'package:moxxmpp/src/presence.dart'; | ||||||
| import 'package:moxxmpp/src/rfcs/rfc_4790.dart'; | import 'package:moxxmpp/src/rfcs/rfc_4790.dart'; | ||||||
|  | import 'package:moxxmpp/src/stanza.dart'; | ||||||
| import 'package:moxxmpp/src/stringxml.dart'; | import 'package:moxxmpp/src/stringxml.dart'; | ||||||
| import 'package:moxxmpp/src/util/list.dart'; | import 'package:moxxmpp/src/util/list.dart'; | ||||||
| import 'package:moxxmpp/src/xeps/xep_0004.dart'; | import 'package:moxxmpp/src/xeps/xep_0004.dart'; | ||||||
| @ -105,7 +108,20 @@ class EntityCapabilitiesManager extends XmppManagerBase { | |||||||
|   Future<bool> isSupported() async => true; |   Future<bool> isSupported() async => true; | ||||||
| 
 | 
 | ||||||
|   @override |   @override | ||||||
|   List<String> getDiscoFeatures() => [capsXmlns]; |   List<String> getDiscoFeatures() => [ | ||||||
|  |         capsXmlns, | ||||||
|  |       ]; | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   List<StanzaHandler> getIncomingStanzaHandlers() => [ | ||||||
|  |         StanzaHandler( | ||||||
|  |           stanzaTag: 'presence', | ||||||
|  |           tagName: 'c', | ||||||
|  |           tagXmlns: capsXmlns, | ||||||
|  |           callback: onPresence, | ||||||
|  |           priority: PresenceManager.presenceHandlerPriority + 1, | ||||||
|  |         ), | ||||||
|  |       ]; | ||||||
| 
 | 
 | ||||||
|   /// Computes, if required, the capability hash of the data provided by |   /// Computes, if required, the capability hash of the data provided by | ||||||
|   /// the DiscoManager. |   /// the DiscoManager. | ||||||
| @ -159,33 +175,38 @@ class EntityCapabilitiesManager extends XmppManagerBase { | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   @visibleForTesting |   @visibleForTesting | ||||||
|   Future<void> onPresence(PresenceReceivedEvent event) async { |   Future<StanzaHandlerData> onPresence( | ||||||
|     final c = event.presence.firstTag('c', xmlns: capsXmlns); |     Stanza stanza, | ||||||
|     if (c == null) { |     StanzaHandlerData state, | ||||||
|       return; |   ) async { | ||||||
|  |     if (stanza.from == null) { | ||||||
|  |       return state; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     final from = JID.fromString(stanza.from!); | ||||||
|  |     final c = stanza.firstTag('c', xmlns: capsXmlns)!; | ||||||
|  | 
 | ||||||
|     final hashFunctionName = c.attributes['hash'] as String?; |     final hashFunctionName = c.attributes['hash'] as String?; | ||||||
|     final capabilityNode = c.attributes['node'] as String?; |     final capabilityNode = c.attributes['node'] as String?; | ||||||
|     final ver = c.attributes['ver'] as String?; |     final ver = c.attributes['ver'] as String?; | ||||||
|     if (hashFunctionName == null || capabilityNode == null || ver == null) { |     if (hashFunctionName == null || capabilityNode == null || ver == null) { | ||||||
|       return; |       return state; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // Check if we know of the hash |     // Check if we know of the hash | ||||||
|     final isCached = |     final isCached = | ||||||
|         await _cacheLock.synchronized(() => _capHashCache.containsKey(ver)); |         await _cacheLock.synchronized(() => _capHashCache.containsKey(ver)); | ||||||
|     if (isCached) { |     if (isCached) { | ||||||
|       return; |       return state; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     final dm = getAttributes().getManagerById<DiscoManager>(discoManager)!; |     final dm = getAttributes().getManagerById<DiscoManager>(discoManager)!; | ||||||
|     final discoRequest = await dm.discoInfoQuery( |     final discoRequest = await dm.discoInfoQuery( | ||||||
|       event.jid, |       from, | ||||||
|       node: capabilityNode, |       node: capabilityNode, | ||||||
|     ); |     ); | ||||||
|     if (discoRequest.isType<DiscoError>()) { |     if (discoRequest.isType<DiscoError>()) { | ||||||
|       return; |       return state; | ||||||
|     } |     } | ||||||
|     final discoInfo = discoRequest.get<DiscoInfo>(); |     final discoInfo = discoRequest.get<DiscoInfo>(); | ||||||
| 
 | 
 | ||||||
| @ -194,13 +215,13 @@ class EntityCapabilitiesManager extends XmppManagerBase { | |||||||
|       await dm.addCachedDiscoInfo( |       await dm.addCachedDiscoInfo( | ||||||
|         MapEntry<DiscoCacheKey, DiscoInfo>( |         MapEntry<DiscoCacheKey, DiscoInfo>( | ||||||
|           DiscoCacheKey( |           DiscoCacheKey( | ||||||
|             event.jid, |             from, | ||||||
|             null, |             null, | ||||||
|           ), |           ), | ||||||
|           discoInfo, |           discoInfo, | ||||||
|         ), |         ), | ||||||
|       ); |       ); | ||||||
|       return; |       return state; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // Validate the disco#info result according to XEP-0115 § 5.4 |     // Validate the disco#info result according to XEP-0115 § 5.4 | ||||||
| @ -214,7 +235,7 @@ class EntityCapabilitiesManager extends XmppManagerBase { | |||||||
|         logger.warning( |         logger.warning( | ||||||
|           'Malformed disco#info response: More than one equal identity', |           'Malformed disco#info response: More than one equal identity', | ||||||
|         ); |         ); | ||||||
|         return; |         return state; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -225,7 +246,7 @@ class EntityCapabilitiesManager extends XmppManagerBase { | |||||||
|         logger.warning( |         logger.warning( | ||||||
|           'Malformed disco#info response: More than one equal feature', |           'Malformed disco#info response: More than one equal feature', | ||||||
|         ); |         ); | ||||||
|         return; |         return state; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -253,7 +274,7 @@ class EntityCapabilitiesManager extends XmppManagerBase { | |||||||
|           logger.warning( |           logger.warning( | ||||||
|             'Malformed disco#info response: Extended Info FORM_TYPE contains more than one value(s) of different value.', |             'Malformed disco#info response: Extended Info FORM_TYPE contains more than one value(s) of different value.', | ||||||
|           ); |           ); | ||||||
|           return; |           return state; | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
| @ -268,7 +289,7 @@ class EntityCapabilitiesManager extends XmppManagerBase { | |||||||
|         logger.warning( |         logger.warning( | ||||||
|           'Malformed disco#info response: More than one Extended Disco Info forms with the same FORM_TYPE value', |           'Malformed disco#info response: More than one Extended Disco Info forms with the same FORM_TYPE value', | ||||||
|         ); |         ); | ||||||
|         return; |         return state; | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       // Check if the field type is hidden |       // Check if the field type is hidden | ||||||
| @ -297,14 +318,16 @@ class EntityCapabilitiesManager extends XmppManagerBase { | |||||||
| 
 | 
 | ||||||
|     if (computedCapabilityHash == ver) { |     if (computedCapabilityHash == ver) { | ||||||
|       await _cacheLock.synchronized(() { |       await _cacheLock.synchronized(() { | ||||||
|         _jidToCapHashCache[event.jid.toString()] = ver; |         _jidToCapHashCache[from.toString()] = ver; | ||||||
|         _capHashCache[ver] = newDiscoInfo; |         _capHashCache[ver] = newDiscoInfo; | ||||||
|       }); |       }); | ||||||
|     } else { |     } else { | ||||||
|       logger.warning( |       logger.warning( | ||||||
|         'Capability hash mismatch from ${event.jid}: Received "$ver", expected "$computedCapabilityHash".', |         'Capability hash mismatch from $from: Received "$ver", expected "$computedCapabilityHash".', | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     return state; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   @visibleForTesting |   @visibleForTesting | ||||||
| @ -315,9 +338,7 @@ class EntityCapabilitiesManager extends XmppManagerBase { | |||||||
| 
 | 
 | ||||||
|   @override |   @override | ||||||
|   Future<void> onXmppEvent(XmppEvent event) async { |   Future<void> onXmppEvent(XmppEvent event) async { | ||||||
|     if (event is PresenceReceivedEvent) { |     if (event is StreamNegotiationsDoneEvent) { | ||||||
|       unawaited(onPresence(event)); |  | ||||||
|     } else if (event is StreamNegotiationsDoneEvent) { |  | ||||||
|       // Clear the JID to cap. hash mapping. |       // Clear the JID to cap. hash mapping. | ||||||
|       await _cacheLock.synchronized(_jidToCapHashCache.clear); |       await _cacheLock.synchronized(_jidToCapHashCache.clear); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| import 'package:moxxmpp/moxxmpp.dart'; | import 'package:moxxmpp/moxxmpp.dart'; | ||||||
|  | import 'package:moxxmpp/src/util/typed_map.dart'; | ||||||
| import 'package:test/test.dart'; | import 'package:test/test.dart'; | ||||||
| 
 | 
 | ||||||
| import '../helpers/logging.dart'; | import '../helpers/logging.dart'; | ||||||
| @ -324,10 +325,7 @@ void main() { | |||||||
|         manager, |         manager, | ||||||
|       ]); |       ]); | ||||||
| 
 | 
 | ||||||
|       await manager.onPresence( |       final stanza = Stanza.presence( | ||||||
|         PresenceReceivedEvent( |  | ||||||
|           aliceJid, |  | ||||||
|           Stanza.presence( |  | ||||||
|         from: aliceJid.toString(), |         from: aliceJid.toString(), | ||||||
|         children: [ |         children: [ | ||||||
|           XMLNode.xmlns( |           XMLNode.xmlns( | ||||||
| @ -340,8 +338,10 @@ void main() { | |||||||
|             }, |             }, | ||||||
|           ), |           ), | ||||||
|         ], |         ], | ||||||
|           ), |       ); | ||||||
|         ), |       await manager.onPresence( | ||||||
|  |         stanza, | ||||||
|  |         StanzaHandlerData(false, false, stanza, TypedMap()), | ||||||
|       ); |       ); | ||||||
| 
 | 
 | ||||||
|       expect( |       expect( | ||||||
| @ -359,10 +359,7 @@ void main() { | |||||||
|         manager, |         manager, | ||||||
|       ]); |       ]); | ||||||
| 
 | 
 | ||||||
|       await manager.onPresence( |       final stanza = Stanza.presence( | ||||||
|         PresenceReceivedEvent( |  | ||||||
|           aliceJid, |  | ||||||
|           Stanza.presence( |  | ||||||
|         from: aliceJid.toString(), |         from: aliceJid.toString(), | ||||||
|         children: [ |         children: [ | ||||||
|           XMLNode.xmlns( |           XMLNode.xmlns( | ||||||
| @ -375,8 +372,10 @@ void main() { | |||||||
|             }, |             }, | ||||||
|           ), |           ), | ||||||
|         ], |         ], | ||||||
|           ), |       ); | ||||||
|         ), |       await manager.onPresence( | ||||||
|  |         stanza, | ||||||
|  |         StanzaHandlerData(false, false, stanza, TypedMap()), | ||||||
|       ); |       ); | ||||||
| 
 | 
 | ||||||
|       expect( |       expect( | ||||||
| @ -394,10 +393,7 @@ void main() { | |||||||
|         manager, |         manager, | ||||||
|       ]); |       ]); | ||||||
| 
 | 
 | ||||||
|       await manager.onPresence( |       final stanza = Stanza.presence( | ||||||
|         PresenceReceivedEvent( |  | ||||||
|           aliceJid, |  | ||||||
|           Stanza.presence( |  | ||||||
|         from: aliceJid.toString(), |         from: aliceJid.toString(), | ||||||
|         children: [ |         children: [ | ||||||
|           XMLNode.xmlns( |           XMLNode.xmlns( | ||||||
| @ -410,8 +406,10 @@ void main() { | |||||||
|             }, |             }, | ||||||
|           ), |           ), | ||||||
|         ], |         ], | ||||||
|           ), |       ); | ||||||
|         ), |       await manager.onPresence( | ||||||
|  |         stanza, | ||||||
|  |         StanzaHandlerData(false, false, stanza, TypedMap()), | ||||||
|       ); |       ); | ||||||
| 
 | 
 | ||||||
|       expect( |       expect( | ||||||
| @ -429,10 +427,7 @@ void main() { | |||||||
|         manager, |         manager, | ||||||
|       ]); |       ]); | ||||||
| 
 | 
 | ||||||
|       await manager.onPresence( |       final stanza = Stanza.presence( | ||||||
|         PresenceReceivedEvent( |  | ||||||
|           aliceJid, |  | ||||||
|           Stanza.presence( |  | ||||||
|         from: aliceJid.toString(), |         from: aliceJid.toString(), | ||||||
|         children: [ |         children: [ | ||||||
|           XMLNode.xmlns( |           XMLNode.xmlns( | ||||||
| @ -445,8 +440,10 @@ void main() { | |||||||
|             }, |             }, | ||||||
|           ), |           ), | ||||||
|         ], |         ], | ||||||
|           ), |       ); | ||||||
|         ), |       await manager.onPresence( | ||||||
|  |         stanza, | ||||||
|  |         StanzaHandlerData(false, false, stanza, TypedMap()), | ||||||
|       ); |       ); | ||||||
| 
 | 
 | ||||||
|       expect( |       expect( | ||||||
| @ -464,10 +461,7 @@ void main() { | |||||||
|         manager, |         manager, | ||||||
|       ]); |       ]); | ||||||
| 
 | 
 | ||||||
|       await manager.onPresence( |       final stanza = Stanza.presence( | ||||||
|         PresenceReceivedEvent( |  | ||||||
|           aliceJid, |  | ||||||
|           Stanza.presence( |  | ||||||
|         from: aliceJid.toString(), |         from: aliceJid.toString(), | ||||||
|         children: [ |         children: [ | ||||||
|           XMLNode.xmlns( |           XMLNode.xmlns( | ||||||
| @ -480,8 +474,10 @@ void main() { | |||||||
|             }, |             }, | ||||||
|           ), |           ), | ||||||
|         ], |         ], | ||||||
|           ), |       ); | ||||||
|         ), |       await manager.onPresence( | ||||||
|  |         stanza, | ||||||
|  |         StanzaHandlerData(false, false, stanza, TypedMap()), | ||||||
|       ); |       ); | ||||||
| 
 | 
 | ||||||
|       expect( |       expect( | ||||||
| @ -499,10 +495,7 @@ void main() { | |||||||
|         manager, |         manager, | ||||||
|       ]); |       ]); | ||||||
| 
 | 
 | ||||||
|       await manager.onPresence( |       final stanza = Stanza.presence( | ||||||
|         PresenceReceivedEvent( |  | ||||||
|           aliceJid, |  | ||||||
|           Stanza.presence( |  | ||||||
|         from: aliceJid.toString(), |         from: aliceJid.toString(), | ||||||
|         children: [ |         children: [ | ||||||
|           XMLNode.xmlns( |           XMLNode.xmlns( | ||||||
| @ -515,8 +508,10 @@ void main() { | |||||||
|             }, |             }, | ||||||
|           ), |           ), | ||||||
|         ], |         ], | ||||||
|           ), |       ); | ||||||
|         ), |       await manager.onPresence( | ||||||
|  |         stanza, | ||||||
|  |         StanzaHandlerData(false, false, stanza, TypedMap()), | ||||||
|       ); |       ); | ||||||
| 
 | 
 | ||||||
|       final cachedItem = await manager.getCachedDiscoInfoFromJid(aliceJid); |       final cachedItem = await manager.getCachedDiscoInfoFromJid(aliceJid); | ||||||
| @ -536,10 +531,7 @@ void main() { | |||||||
|         manager, |         manager, | ||||||
|       ]); |       ]); | ||||||
| 
 | 
 | ||||||
|       await manager.onPresence( |       final stanza = Stanza.presence( | ||||||
|         PresenceReceivedEvent( |  | ||||||
|           aliceJid, |  | ||||||
|           Stanza.presence( |  | ||||||
|         from: aliceJid.toString(), |         from: aliceJid.toString(), | ||||||
|         children: [ |         children: [ | ||||||
|           XMLNode.xmlns( |           XMLNode.xmlns( | ||||||
| @ -552,8 +544,10 @@ void main() { | |||||||
|             }, |             }, | ||||||
|           ), |           ), | ||||||
|         ], |         ], | ||||||
|           ), |       ); | ||||||
|         ), |       await manager.onPresence( | ||||||
|  |         stanza, | ||||||
|  |         StanzaHandlerData(false, false, stanza, TypedMap()), | ||||||
|       ); |       ); | ||||||
| 
 | 
 | ||||||
|       final cachedItem = await manager.getCachedDiscoInfoFromJid(aliceJid); |       final cachedItem = await manager.getCachedDiscoInfoFromJid(aliceJid); | ||||||
| @ -573,10 +567,7 @@ void main() { | |||||||
|         manager, |         manager, | ||||||
|       ]); |       ]); | ||||||
| 
 | 
 | ||||||
|       await manager.onPresence( |       final stanza = Stanza.presence( | ||||||
|         PresenceReceivedEvent( |  | ||||||
|           aliceJid, |  | ||||||
|           Stanza.presence( |  | ||||||
|         from: aliceJid.toString(), |         from: aliceJid.toString(), | ||||||
|         children: [ |         children: [ | ||||||
|           XMLNode.xmlns( |           XMLNode.xmlns( | ||||||
| @ -589,8 +580,10 @@ void main() { | |||||||
|             }, |             }, | ||||||
|           ), |           ), | ||||||
|         ], |         ], | ||||||
|           ), |       ); | ||||||
|         ), |       await manager.onPresence( | ||||||
|  |         stanza, | ||||||
|  |         StanzaHandlerData(false, false, stanza, TypedMap()), | ||||||
|       ); |       ); | ||||||
| 
 | 
 | ||||||
|       expect( |       expect( | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user