diff --git a/ChangeLog b/ChangeLog index 88d77f5..5eafc82 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Version 0.7.1: +xxxx-xx-xx Maxime “pep” Buquet + * Changes: + - fetch_bundle and fetch_device methods are now public + * Added: + - New fetch_bundles method to fetch all bundles at once Version 0.7.0: 2022-04-03 Maxime “pep” Buquet * Breaking: diff --git a/slixmpp_omemo/__init__.py b/slixmpp_omemo/__init__.py index 43feea4..bcb6855 100644 --- a/slixmpp_omemo/__init__.py +++ b/slixmpp_omemo/__init__.py @@ -415,9 +415,9 @@ class XEP_0384(BasePlugin): else: log.debug('Not publishing.') - async def _fetch_bundle(self, jid: JID, device_id: int) -> None: + async def fetch_bundle(self, jid: JID, device_id: int) -> None: """ - Fetch bundles for specified jid / device_id pair. + Fetch bundle for specified jid / device_id pair. """ log.debug('Fetching bundle for JID: %r, device: %r', jid, device_id) node = f'{OMEMO_BUNDLES_NS}:{device_id}' @@ -435,7 +435,23 @@ class XEP_0384(BasePlugin): else: log.debug('Encryption: Bundle %r not found!', device_id) - async def _fetch_devices(self, jid: JID) -> None: + async def fetch_bundles(self, jid: JID) -> None: + """ + Fetch bundles of active devices for specified JID. + + This is a helper function to allow the user to request a store + update. Failed bundles are not retried. + """ + # Ignore failures + await asyncio.gather( + *map( + lambda did: self.fetch_bundle(jid, did), + self.get_active_devices(jid) + ), # type: ignore + return_exceptions=True, + ) + + async def fetch_devices(self, jid: JID) -> None: """ Manually query PEP OMEMO_DEVICES_NS nodes """ @@ -829,10 +845,10 @@ class XEP_0384(BasePlugin): for exn in errors: if isinstance(exn, omemo.exceptions.NoDevicesException): log.debug('Encryption: Missing device list for JID: %r', exn.bare_jid) - await self._fetch_devices(JID(exn.bare_jid)) + await self.fetch_devices(JID(exn.bare_jid)) elif isinstance(exn, omemo.exceptions.MissingBundleException): log.debug('Encryption: Missing bundle for JID: %r, device: %r', exn.bare_jid, exn.device) - await self._fetch_bundle(JID(exn.bare_jid), exn.device) + await self.fetch_bundle(JID(exn.bare_jid), exn.device) elif isinstance(exn, omemo.exceptions.TrustException): # On TrustException, there are two possibilities. # Either trust has not been explicitely set yet, and is