send msg: try claiming keys and sharing session
The sharing will fail for now, until device verification is implemented.
This commit is contained in:
parent
ca04e4c4a4
commit
a672b725de
@ -1,6 +1,7 @@
|
||||
# Copyright 2019 miruka
|
||||
# This file is part of harmonyqml, licensed under GPLv3.
|
||||
|
||||
import logging as log
|
||||
import time
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from threading import Event
|
||||
@ -84,11 +85,24 @@ class Client(QObject):
|
||||
self.net.talk(self.nio.keys_upload)
|
||||
|
||||
|
||||
@futurize(max_running=1, discard_if_max_running=True, pyqt=False)
|
||||
def _keys_query(self) -> None:
|
||||
self.net.talk(self.nio.keys_query)
|
||||
|
||||
|
||||
def _keys_claim(self, room_id: str) -> None:
|
||||
self.net.talk(self.nio.keys_claim, room_id)
|
||||
|
||||
|
||||
def _share_group_session(self,
|
||||
room_id: str,
|
||||
ignore_missing_sessions: bool = False) -> None:
|
||||
self.net.talk(
|
||||
self.nio.share_group_session,
|
||||
room_id = room_id,
|
||||
ignore_missing_sessions = ignore_missing_sessions,
|
||||
)
|
||||
|
||||
|
||||
@pyqtSlot(str, result="QVariant")
|
||||
@pyqtSlot(str, str, result="QVariant")
|
||||
@futurize()
|
||||
@ -253,13 +267,29 @@ class Client(QObject):
|
||||
# sent at a time is one per room at a time.
|
||||
@futurize(max_running=1, consider_args=True)
|
||||
def send(self, room_id: str) -> PyQtFuture:
|
||||
return self.net.talk(
|
||||
talk = lambda: self.net.talk(
|
||||
self.nio.room_send,
|
||||
room_id = room_id,
|
||||
message_type = "m.room.message",
|
||||
content = content,
|
||||
)
|
||||
|
||||
try:
|
||||
log.debug("Try sending message %r to %r", content, room_id)
|
||||
return talk()
|
||||
except nio.GroupEncryptionError as err:
|
||||
log.warning(err)
|
||||
try:
|
||||
self._share_group_session(room_id)
|
||||
except nio.EncryptionError as err:
|
||||
log.warning(err)
|
||||
self._keys_claim(room_id)
|
||||
self._share_group_session(room_id,
|
||||
ignore_missing_sessions=True)
|
||||
|
||||
log.debug("Final try to send %r to %r", content, room_id)
|
||||
return talk()
|
||||
|
||||
return send(self, room_id)
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user