mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 19:44:05 +00:00
Fix a bug where the room state wouldn't indicate when a call was in progress. (#3442)
* Fix breaking changes on decryption errors and sending failures. * Update SDK and analytics events. * Add extra UTD strings. --------- Co-authored-by: Stefan Ceriu <stefan.ceriu@gmail.com>
This commit is contained in:
@@ -415,9 +415,9 @@ class ClientProxy: ClientProxyProtocol {
|
||||
}
|
||||
}
|
||||
|
||||
func knockRoom(_ roomID: String, message: String?) async -> Result<Void, ClientProxyError> {
|
||||
func knockRoom(_ roomID: String, via: [String], message: String?) async -> Result<Void, ClientProxyError> {
|
||||
do {
|
||||
let _ = try await client.knock(roomIdOrAlias: roomID)
|
||||
let _ = try await client.knock(roomIdOrAlias: roomID, reason: nil, serverNames: via)
|
||||
await waitForRoomToSync(roomID: roomID, timeout: .seconds(30))
|
||||
return .success(())
|
||||
} catch {
|
||||
@@ -428,7 +428,7 @@ class ClientProxy: ClientProxyProtocol {
|
||||
|
||||
func knockRoomAlias(_ roomAlias: String, message: String?) async -> Result<Void, ClientProxyError> {
|
||||
do {
|
||||
let room = try await client.knock(roomIdOrAlias: roomAlias)
|
||||
let room = try await client.knock(roomIdOrAlias: roomAlias, reason: nil, serverNames: [])
|
||||
await waitForRoomToSync(roomID: room.id(), timeout: .seconds(30))
|
||||
return .success(())
|
||||
} catch {
|
||||
|
||||
@@ -136,7 +136,7 @@ protocol ClientProxyProtocol: AnyObject, MediaLoaderProtocol {
|
||||
|
||||
func joinRoomAlias(_ roomAlias: String) async -> Result<Void, ClientProxyError>
|
||||
|
||||
func knockRoom(_ roomID: String, message: String?) async -> Result<Void, ClientProxyError>
|
||||
func knockRoom(_ roomID: String, via: [String], message: String?) async -> Result<Void, ClientProxyError>
|
||||
|
||||
func knockRoomAlias(_ roomAlias: String, message: String?) async -> Result<Void, ClientProxyError>
|
||||
|
||||
|
||||
@@ -26,7 +26,9 @@ struct RoomEventStringBuilder {
|
||||
switch eventItemProxy.content {
|
||||
case .unableToDecrypt(let encryptedMessage):
|
||||
let errorMessage = switch encryptedMessage {
|
||||
case .megolmV1AesSha2(_, .membership): L10n.commonUnableToDecryptNoAccess
|
||||
case .megolmV1AesSha2(_, .sentBeforeWeJoined): L10n.commonUnableToDecryptNoAccess
|
||||
case .megolmV1AesSha2(_, .verificationViolation): L10n.commonUnableToDecryptVerificationViolation
|
||||
case .megolmV1AesSha2(_, .unknownDevice), .megolmV1AesSha2(_, .unsignedDevice): L10n.commonUnableToDecryptInsecureDevice
|
||||
default: L10n.commonWaitingForDecryptionKey
|
||||
}
|
||||
return prefix(errorMessage, with: displayName)
|
||||
|
||||
@@ -83,18 +83,19 @@ class EventTimelineItemProxy {
|
||||
}
|
||||
|
||||
switch localSendState {
|
||||
case .sendingFailed(_, let isRecoverable):
|
||||
return isRecoverable ? .sending : .sendingFailed(.unknown)
|
||||
case .sendingFailed(let error, let isRecoverable):
|
||||
switch error {
|
||||
case .identityViolations(let users):
|
||||
return .sendingFailed(.verifiedUser(.changedIdentity(users: users)))
|
||||
case .insecureDevices(let userDeviceMap):
|
||||
return .sendingFailed(.verifiedUser(.hasUnsignedDevice(devices: userDeviceMap)))
|
||||
default:
|
||||
return .sendingFailed(.unknown)
|
||||
}
|
||||
case .notSentYet:
|
||||
return .sending
|
||||
case .sent:
|
||||
return .sent
|
||||
case .verifiedUserHasUnsignedDevice(devices: let devices):
|
||||
return .sendingFailed(.verifiedUser(.hasUnsignedDevice(devices: devices)))
|
||||
case .verifiedUserChangedIdentity(users: let users):
|
||||
return .sendingFailed(.verifiedUser(.changedIdentity(users: users)))
|
||||
case .crossSigningNotSetup, .sendingFromUnverifiedDevice:
|
||||
return .sendingFailed(.unknown)
|
||||
}
|
||||
}()
|
||||
|
||||
|
||||
+3
-1
@@ -15,7 +15,9 @@ struct EncryptedRoomTimelineItem: EventBasedTimelineItemProtocol, Equatable {
|
||||
}
|
||||
|
||||
enum UTDCause: Hashable {
|
||||
case membership
|
||||
case sentBeforeWeJoined
|
||||
case verificationViolation
|
||||
case insecureDevice
|
||||
case unknown
|
||||
}
|
||||
|
||||
|
||||
@@ -157,8 +157,14 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
|
||||
case .unknown:
|
||||
encryptionType = .megolmV1AesSha2(sessionID: sessionID, cause: .unknown)
|
||||
errorLabel = L10n.commonWaitingForDecryptionKey
|
||||
case .membership:
|
||||
encryptionType = .megolmV1AesSha2(sessionID: sessionID, cause: .membership)
|
||||
case .verificationViolation:
|
||||
encryptionType = .megolmV1AesSha2(sessionID: sessionID, cause: .verificationViolation)
|
||||
errorLabel = L10n.commonUnableToDecryptVerificationViolation
|
||||
case .unsignedDevice, .unknownDevice:
|
||||
encryptionType = .megolmV1AesSha2(sessionID: sessionID, cause: .insecureDevice)
|
||||
errorLabel = L10n.commonUnableToDecryptInsecureDevice
|
||||
case .sentBeforeWeJoined:
|
||||
encryptionType = .megolmV1AesSha2(sessionID: sessionID, cause: .sentBeforeWeJoined)
|
||||
errorLabel = L10n.commonUnableToDecryptNoAccess
|
||||
}
|
||||
case .olmV1Curve25519AesSha2(let senderKey):
|
||||
|
||||
Reference in New Issue
Block a user