Support user devices added or deleted at runtime
This commit is contained in:
parent
d1dfd2673f
commit
4367f52ce5
|
@ -32,6 +32,9 @@ class Client(QObject):
|
|||
|
||||
messageAboutToBeSent = pyqtSignal(str, dict)
|
||||
|
||||
deviceIsPresent = pyqtSignal(str, str, str)
|
||||
deviceIsDeleted = pyqtSignal(str, str)
|
||||
|
||||
|
||||
def __init__(self,
|
||||
manager,
|
||||
|
@ -87,7 +90,22 @@ class Client(QObject):
|
|||
|
||||
|
||||
def queryE2EKeys(self) -> None:
|
||||
self.net.talk(self.nio.keys_query)
|
||||
print("query")
|
||||
self._on_query_e2e_keys(self.net.talk(self.nio.keys_query))
|
||||
|
||||
|
||||
def _on_query_e2e_keys(self, response: nio.KeysQueryResponse) -> None:
|
||||
for user_id, device_dict in response.device_keys.items():
|
||||
for device_id, payload in device_dict.items():
|
||||
if device_id == self.nio.device_id:
|
||||
continue
|
||||
|
||||
ed25519_key = payload["keys"][f"ed25519:{device_id}"]
|
||||
self.deviceIsPresent.emit(user_id, device_id, ed25519_key)
|
||||
|
||||
for device_id, device in self.nio.device_store[user_id].items():
|
||||
if device.deleted:
|
||||
self.deviceIsDeleted.emit(user_id, device_id)
|
||||
|
||||
|
||||
def claimE2EKeysForRoom(self, room_id: str) -> None:
|
||||
|
@ -117,7 +135,9 @@ class Client(QObject):
|
|||
@pyqtSlot(str, str, result="QVariant")
|
||||
@futurize()
|
||||
def login(self, password: str, device_name: str = "") -> "Client":
|
||||
# Main nio client will receive the response here
|
||||
response = self.net.talk(self.nio.login, password, device_name)
|
||||
# Now, receive it with the sync nio client too:
|
||||
self.nio_sync.receive_response(response)
|
||||
return self
|
||||
|
||||
|
|
|
@ -74,7 +74,6 @@ class SignalManager(QObject):
|
|||
deviceId = dev.id,
|
||||
ed25519Key = dev.ed25519,
|
||||
trust = client.getDeviceTrust(dev),
|
||||
# displayName = TODO
|
||||
) for dev in store.active_user_devices(user_id)
|
||||
])
|
||||
|
||||
|
@ -349,3 +348,25 @@ class SignalManager(QObject):
|
|||
categ.rooms.pop(room_id, None)
|
||||
|
||||
self.backend.roomEvents[room_id].clear()
|
||||
|
||||
|
||||
def onDeviceIsPresent(self,
|
||||
client: Client,
|
||||
user_id: str,
|
||||
device_id: str,
|
||||
ed25519_key: str) -> None:
|
||||
nio_device = client.nio.device_store[user_id][device_id]
|
||||
|
||||
self.backend.devices[user_id].upsert(
|
||||
where_main_key_is = device_id,
|
||||
update_with = Device(
|
||||
deviceId = device_id,
|
||||
ed25519Key = ed25519_key,
|
||||
trust = client.getDeviceTrust(nio_device),
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def onDeviceIsDeleted(self, _: Client, user_id: str, device_id: str
|
||||
) -> None:
|
||||
self.backend.devices[user_id].pop(device_id, None)
|
||||
|
|
Loading…
Reference in New Issue
Block a user