mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
Show recovery instead of verification if this is the last session and recovery is set up
* Show recovery instead of verification if this is the last session and recovery is set up * Rename `recoveryKeyState` to `recoveryState` * Remove duplicates on session security state changes. * Fix missing "Save recovery key" button * Fix unit tests * Rename `isLastDevice` to `isOnlyDeviceLeft` * Address PR comments
This commit is contained in:
@@ -21,7 +21,7 @@ import MatrixRustSDK
|
||||
class SecureBackupController: SecureBackupControllerProtocol {
|
||||
private let encryption: Encryption
|
||||
|
||||
private let recoveryKeyStateSubject = CurrentValueSubject<SecureBackupRecoveryKeyState, Never>(.unknown)
|
||||
private let recoveryStateSubject = CurrentValueSubject<SecureBackupRecoveryState, Never>(.unknown)
|
||||
private let keyBackupStateSubject = CurrentValueSubject<SecureBackupKeyBackupState, Never>(.unknown)
|
||||
|
||||
// periphery:ignore - retaining purpose
|
||||
@@ -33,8 +33,8 @@ class SecureBackupController: SecureBackupControllerProtocol {
|
||||
/// Used to dedupe remote backup state requests
|
||||
@CancellableTask private var remoteBackupStateTask: Task<Void, Error>?
|
||||
|
||||
var recoveryKeyState: CurrentValuePublisher<SecureBackupRecoveryKeyState, Never> {
|
||||
recoveryKeyStateSubject.asCurrentValuePublisher()
|
||||
var recoveryState: CurrentValuePublisher<SecureBackupRecoveryState, Never> {
|
||||
recoveryStateSubject.asCurrentValuePublisher()
|
||||
}
|
||||
|
||||
var keyBackupState: CurrentValuePublisher<SecureBackupKeyBackupState, Never> {
|
||||
@@ -76,16 +76,16 @@ class SecureBackupController: SecureBackupControllerProtocol {
|
||||
|
||||
switch state {
|
||||
case .unknown:
|
||||
recoveryKeyStateSubject.send(.unknown)
|
||||
recoveryStateSubject.send(.unknown)
|
||||
case .enabled:
|
||||
recoveryKeyStateSubject.send(.enabled)
|
||||
recoveryStateSubject.send(.enabled)
|
||||
case .disabled:
|
||||
recoveryKeyStateSubject.send(.disabled)
|
||||
recoveryStateSubject.send(.disabled)
|
||||
case .incomplete:
|
||||
recoveryKeyStateSubject.send(.incomplete)
|
||||
recoveryStateSubject.send(.incomplete)
|
||||
}
|
||||
|
||||
MXLog.info("Recovery state changed to: \(state), setting local state to \(recoveryKeyStateSubject.value)")
|
||||
MXLog.info("Recovery state changed to: \(state), setting local state to \(recoveryStateSubject.value)")
|
||||
})
|
||||
|
||||
updateBackupStateFromRemote()
|
||||
@@ -120,7 +120,7 @@ class SecureBackupController: SecureBackupControllerProtocol {
|
||||
|
||||
func generateRecoveryKey() async -> Result<String, SecureBackupControllerError> {
|
||||
do {
|
||||
guard recoveryKeyState.value == .disabled else {
|
||||
guard recoveryState.value == .disabled else {
|
||||
MXLog.info("Resetting recovery key")
|
||||
|
||||
let key = try await encryption.resetRecoveryKey()
|
||||
@@ -135,9 +135,9 @@ class SecureBackupController: SecureBackupControllerProtocol {
|
||||
|
||||
switch state {
|
||||
case .starting, .creatingBackup, .creatingRecoveryKey, .backingUp:
|
||||
recoveryKeyStateSubject.send(.settingUp)
|
||||
recoveryStateSubject.send(.settingUp)
|
||||
case .done:
|
||||
recoveryKeyStateSubject.send(.enabled)
|
||||
recoveryStateSubject.send(.enabled)
|
||||
case .roomKeyUploadError:
|
||||
MXLog.error("Failed enabling recovery: room key upload error")
|
||||
keyUploadErrored = true
|
||||
@@ -162,17 +162,7 @@ class SecureBackupController: SecureBackupControllerProtocol {
|
||||
return .failure(.failedConfirmingRecoveryKey)
|
||||
}
|
||||
}
|
||||
|
||||
func isLastSession() async -> Result<Bool, SecureBackupControllerError> {
|
||||
do {
|
||||
MXLog.info("Checking if last session")
|
||||
return try await .success(encryption.isLastDevice())
|
||||
} catch {
|
||||
MXLog.error("Failed checking if last session with error: \(error)")
|
||||
return .failure(.failedFetchingSessionState)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func waitForKeyBackupUpload() async -> Result<Void, SecureBackupControllerError> {
|
||||
do {
|
||||
MXLog.info("Waiting for backup upload steady state")
|
||||
|
||||
Reference in New Issue
Block a user