Fix #10: ensure device list and bundle are published after startup
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
parent
3ac03796dc
commit
fbe5e36c3e
1 changed files with 12 additions and 1 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue