Philipp Hörist pushed to branch omemo_integration at gajim / gajim
Commits: 14ae155c by Philipp Hörist at 2022-10-22T14:40:29+02:00 fix: check preconditions
- - - - -
3 changed files:
- gajim/common/client.py - gajim/common/modules/omemo.py - gajim/gtk/chat_stack.py
Changes:
===================================== gajim/common/client.py ===================================== @@ -484,10 +484,7 @@ def send_message(self, message: OutgoingMessage) -> None:
if method == 'OMEMO': try: - can_send = self.get_module('OMEMO').encrypt_message(message) - if not can_send: - return - + self.get_module('OMEMO').encrypt_message(message) except Exception: app.ged.raise_event( MessageNotSent(client=self._client,
===================================== gajim/common/modules/omemo.py ===================================== @@ -180,8 +180,7 @@ def _get_backend(self) -> OmemoState: db_path = data_dir / f'omemo_{self._own_jid}.db' return OmemoState(self._own_jid, db_path, self._account, self)
- def _can_send_message(self, event: OutgoingMessage) -> bool: - contact = event.contact + def check_send_preconditions(self, contact: types.ChatContactT) -> bool: jid = str(contact.jid) if contact.is_groupchat: if not self.is_omemo_groupchat(jid): @@ -223,35 +222,37 @@ def _can_send_message(self, event: OutgoingMessage) -> bool: message=EncryptionInfoMsg.UNDECIDED_FINGERPRINTS)) return False
- self._log.debug('%s => Sending Message to %s', - contact.account, jid) + if self._new_fingerprints_available(contact): + return False + + self._log.debug('%s => Sending Message to %s', + contact.account, jid)
return True
- def _new_fingerprints_available(self, event: OutgoingMessage) -> bool: - contact = event.contact + def _new_fingerprints_available(self, contact: types.ChatContactT) -> bool: + fingerprints: list[int] = [] if contact.is_groupchat: for member_jid in self.backend.get_muc_members(str(contact.jid), without_self=False): fingerprints = self.backend.storage.getNewFingerprints( member_jid) if fingerprints: - app.ged.raise_event(EncryptionAnnouncement( - account=contact.account, - jid=contact.jid, - message=EncryptionInfoMsg.UNDECIDED_FINGERPRINTS)) - return True + break + else: fingerprints = self.backend.storage.getNewFingerprints( str(contact.jid)) - if fingerprints: - app.ged.raise_event(EncryptionAnnouncement( - account=contact.account, - jid=contact.jid, - message=EncryptionInfoMsg.UNDECIDED_FINGERPRINTS)) - return True
- return False + if not fingerprints: + return False + + app.ged.raise_event(EncryptionAnnouncement( + account=contact.account, + jid=contact.jid, + message=EncryptionInfoMsg.UNDECIDED_FINGERPRINTS)) + + return True
def is_omemo_groupchat(self, room_jid: str) -> bool: return room_jid in self._omemo_groupchats @@ -260,12 +261,6 @@ def encrypt_message(self, event: OutgoingMessage) -> bool: if not event.message: return False
- if self._new_fingerprints_available(event): - return False - - if not self._can_send_message(event): - return False - omemo_message = self.backend.encrypt(str(event.jid), event.message) if omemo_message is None: raise Exception('Encryption error')
===================================== gajim/gtk/chat_stack.py ===================================== @@ -717,8 +717,14 @@ def _on_send_message(self) -> None: contact = self._current_contact assert contact is not None
+ client = app.get_client(contact.account) + encryption = contact.settings.get('encryption') - if encryption and encryption != 'OMEMO': + if encryption == 'OMEMO': + if not client.get_module('OMEMO').check_send_preconditions(contact): + return + + elif encryption: if encryption not in app.plugin_manager.encryption_plugins: ErrorDialog(_('Encryption error'), _('Missing necessary encryption plugin')) @@ -731,7 +737,6 @@ def _on_send_message(self) -> None: if not self._chat_control.sendmessage: return
- client = app.get_client(contact.account)
message = helpers.remove_invalid_xml_chars(message) if message in ('', None, '\n'):
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/14ae155cb2cb403d0aa6467f40ac1efa4...