Files
letro-ios/ElementX/Sources/Services/SecureBackup/SecureBackupControllerProtocol.swift
Doug b1b2b6bf8a Show internet connection warning when uploading keys on log out. (#4027)
* Show the key upload progress when waiting to log out.

Add some basic view model tests too.

* Show a network suggestion if key upload doesn't report any progress during logout.
2025-04-15 16:47:31 +01:00

62 lines
2.0 KiB
Swift

//
// Copyright 2023, 2024 New Vector Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
// Please see LICENSE files in the repository root for full details.
//
import Combine
import Foundation
enum SecureBackupRecoveryState {
case unknown
case disabled
case enabled
/// Recovery is not set up properly, the user will need to re-enter it so we can cleanup
/// https://github.com/element-hq/element-meta/issues/2107
case incomplete
case settingUp
}
enum SecureBackupKeyBackupState {
/// Any state where backups couldn't have been enabled but we didn't explicitly disable them on this client.
/// For all intents and purposes, within the client, this can be treated as `disabled`.
case unknown
case enabling
case enabled
case disabling
}
/// Represents the progress towards a complete backup before logging out.
enum SecureBackupSteadyState {
case waiting
case uploading(uploadedKeyCount: Int, totalKeyCount: Int)
case error
case done
}
enum SecureBackupControllerError: Error {
case failedEnablingBackup
case failedDisablingBackup
case failedGeneratingRecoveryKey
case failedConfirmingRecoveryKey
case failedUploadingForBackup
}
// sourcery: AutoMockable
protocol SecureBackupControllerProtocol {
var recoveryState: CurrentValuePublisher<SecureBackupRecoveryState, Never> { get }
var keyBackupState: CurrentValuePublisher<SecureBackupKeyBackupState, Never> { get }
func enable() async -> Result<Void, SecureBackupControllerError>
func disable() async -> Result<Void, SecureBackupControllerError>
func generateRecoveryKey() async -> Result<String, SecureBackupControllerError>
func confirmRecoveryKey(_ key: String) async -> Result<Void, SecureBackupControllerError>
func waitForKeyBackupUpload(uploadStateSubject: CurrentValueSubject<SecureBackupSteadyState, Never>) async -> Result<Void, SecureBackupControllerError>
}