mirror of
https://github.com/element-hq/element-x-ios.git
synced 2025-03-11 13:59:13 +00:00
Fix race condition when setting up session verification controller subscriptions.
This commit is contained in:
parent
f3a15f7937
commit
c54e4bf6d5
@ -156,19 +156,10 @@ class ClientProxy: ClientProxyProtocol {
|
|||||||
self?.ignoredUsersSubject.send(ignoredUsers)
|
self?.ignoredUsersSubject.send(ignoredUsers)
|
||||||
})
|
})
|
||||||
|
|
||||||
updateVerificationState(client.encryption().verificationState())
|
await updateVerificationState(client.encryption().verificationState())
|
||||||
|
|
||||||
verificationStateListenerTaskHandle = client.encryption().verificationStateListener(listener: VerificationStateListenerProxy { [weak self] verificationState in
|
verificationStateListenerTaskHandle = client.encryption().verificationStateListener(listener: VerificationStateListenerProxy { [weak self] verificationState in
|
||||||
guard let self else { return }
|
Task { await self?.updateVerificationState(verificationState) }
|
||||||
|
|
||||||
updateVerificationState(verificationState)
|
|
||||||
|
|
||||||
// The session verification controller requires the user's identity which
|
|
||||||
// isn't available before a keys query response. Use the verification
|
|
||||||
// state updates as an aproximation for when that happens.
|
|
||||||
Task {
|
|
||||||
await self.buildSessionVerificationControllerProxyIfPossible(verificationState: verificationState)
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
sendQueueListenerTaskHandle = client.subscribeToSendQueueStatus(listener: SendQueueRoomErrorListenerProxy { [weak self] roomID, error in
|
sendQueueListenerTaskHandle = client.subscribeToSendQueueStatus(listener: SendQueueRoomErrorListenerProxy { [weak self] roomID, error in
|
||||||
@ -727,7 +718,7 @@ class ClientProxy: ClientProxyProtocol {
|
|||||||
|
|
||||||
// MARK: - Private
|
// MARK: - Private
|
||||||
|
|
||||||
private func updateVerificationState(_ verificationState: VerificationState) {
|
private func updateVerificationState(_ verificationState: VerificationState) async {
|
||||||
let verificationState: SessionVerificationState = switch verificationState {
|
let verificationState: SessionVerificationState = switch verificationState {
|
||||||
case .unknown:
|
case .unknown:
|
||||||
.unknown
|
.unknown
|
||||||
@ -737,10 +728,17 @@ class ClientProxy: ClientProxyProtocol {
|
|||||||
.verified
|
.verified
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The session verification controller requires the user's identity which
|
||||||
|
// isn't available before a keys query response. Use the verification
|
||||||
|
// state updates as an aproximation for when that happens.
|
||||||
|
await buildSessionVerificationControllerProxyIfPossible(verificationState: verificationState)
|
||||||
|
|
||||||
|
// Only update the session verification state after creating a session
|
||||||
|
// verification proxy to avoid race conditions
|
||||||
verificationStateSubject.send(verificationState)
|
verificationStateSubject.send(verificationState)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func buildSessionVerificationControllerProxyIfPossible(verificationState: VerificationState) async {
|
private func buildSessionVerificationControllerProxyIfPossible(verificationState: SessionVerificationState) async {
|
||||||
guard sessionVerificationController == nil, verificationState != .unknown else {
|
guard sessionVerificationController == nil, verificationState != .unknown else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user