diff --git a/slixmpp_omemo/__init__.py b/slixmpp_omemo/__init__.py index b31d238..7a2bc52 100644 --- a/slixmpp_omemo/__init__.py +++ b/slixmpp_omemo/__init__.py @@ -208,6 +208,9 @@ class XEP_0384(BasePlugin): # OMEMO Bundles used for encryption bundles = {} # type: Dict[str, Dict[int, ExtendedPublicBundle]] + # Used at startup to prevent publishing device list and bundles multiple times + _initial_publish_done = False + def plugin_init(self) -> None: if not self.backend_loaded: log_str = ("xep_0384 cannot be loaded as the backend omemo library " @@ -247,6 +250,10 @@ class XEP_0384(BasePlugin): self.xmpp.add_event_handler('session_start', self.session_start) self.xmpp['xep_0060'].map_node_event(OMEMO_DEVICES_NS, 'omemo_device_list') self.xmpp.add_event_handler('omemo_device_list_publish', self._receive_device_list) + + if self.xmpp.is_connected and not self._initial_publish_done: + asyncio.ensure_future(self._initial_publish()) + return None def plugin_end(self): @@ -258,12 +265,16 @@ class XEP_0384(BasePlugin): self.xmpp['xep_0163'].remove_interest(OMEMO_DEVICES_NS) async def session_start(self, _jid): - if self.backend_loaded: + if self.backend_loaded and not self._initial_publish_done: + await self._initial_publish() + + async def _initial_publish(self): self.xmpp['xep_0163'].add_interest(OMEMO_DEVICES_NS) await asyncio.wait([ self._set_device_list(), self._publish_bundle(), ]) + self._initial_publish_done = True def my_device_id(self) -> int: return self._device_id