mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-28 23:32:41 +00:00
Merge pull request #7078 from vector-im/andy/large_backups
Import progress for room keys
This commit is contained in:
commit
62980bed54
5 changed files with 58 additions and 18 deletions
|
@ -140,8 +140,20 @@ private enum BackupRows {
|
||||||
.info(text: infoText),
|
.info(text: infoText),
|
||||||
.createSecureBackupAction
|
.createSecureBackupAction
|
||||||
]
|
]
|
||||||
case .keyBackup(let keyBackupVersion, _, _),
|
case .keyBackup(let keyBackupVersion, _, let progress):
|
||||||
.keyBackupNotTrusted(let keyBackupVersion, _): // Manage the key backup in the same way for the moment
|
if let progress = progress {
|
||||||
|
backupRows = [
|
||||||
|
.info(text: importProgressText(for: progress)),
|
||||||
|
.deleteKeyBackupAction(keyBackupVersion: keyBackupVersion)
|
||||||
|
]
|
||||||
|
} else {
|
||||||
|
backupRows = [
|
||||||
|
.info(text: VectorL10n.securitySettingsSecureBackupInfoValid),
|
||||||
|
.restoreFromKeyBackupAction(keyBackupVersion: keyBackupVersion, title: VectorL10n.securitySettingsSecureBackupRestore),
|
||||||
|
.deleteKeyBackupAction(keyBackupVersion: keyBackupVersion)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
case .keyBackupNotTrusted(let keyBackupVersion, _):
|
||||||
backupRows = [
|
backupRows = [
|
||||||
.info(text: VectorL10n.securitySettingsSecureBackupInfoValid),
|
.info(text: VectorL10n.securitySettingsSecureBackupInfoValid),
|
||||||
.restoreFromKeyBackupAction(keyBackupVersion: keyBackupVersion, title: VectorL10n.securitySettingsSecureBackupRestore),
|
.restoreFromKeyBackupAction(keyBackupVersion: keyBackupVersion, title: VectorL10n.securitySettingsSecureBackupRestore),
|
||||||
|
@ -160,8 +172,22 @@ private enum BackupRows {
|
||||||
.createKeyBackupAction,
|
.createKeyBackupAction,
|
||||||
.resetSecureBackupAction
|
.resetSecureBackupAction
|
||||||
]
|
]
|
||||||
case .keyBackup(let keyBackupVersion, _, _),
|
case .keyBackup(let keyBackupVersion, _, let progress):
|
||||||
.keyBackupNotTrusted(let keyBackupVersion, _): // Manage the key backup in the same way for the moment
|
if let progress = progress {
|
||||||
|
backupRows = [
|
||||||
|
.info(text: importProgressText(for: progress)),
|
||||||
|
.deleteKeyBackupAction(keyBackupVersion: keyBackupVersion),
|
||||||
|
.resetSecureBackupAction
|
||||||
|
]
|
||||||
|
} else {
|
||||||
|
backupRows = [
|
||||||
|
.info(text: VectorL10n.securitySettingsSecureBackupInfoValid),
|
||||||
|
.restoreFromKeyBackupAction(keyBackupVersion: keyBackupVersion, title: VectorL10n.securitySettingsSecureBackupRestore),
|
||||||
|
.deleteKeyBackupAction(keyBackupVersion: keyBackupVersion),
|
||||||
|
.resetSecureBackupAction
|
||||||
|
]
|
||||||
|
}
|
||||||
|
case .keyBackupNotTrusted(let keyBackupVersion, _):
|
||||||
backupRows = [
|
backupRows = [
|
||||||
.info(text: VectorL10n.securitySettingsSecureBackupInfoValid),
|
.info(text: VectorL10n.securitySettingsSecureBackupInfoValid),
|
||||||
.restoreFromKeyBackupAction(keyBackupVersion: keyBackupVersion, title: VectorL10n.securitySettingsSecureBackupRestore),
|
.restoreFromKeyBackupAction(keyBackupVersion: keyBackupVersion, title: VectorL10n.securitySettingsSecureBackupRestore),
|
||||||
|
@ -172,6 +198,11 @@ private enum BackupRows {
|
||||||
}
|
}
|
||||||
self.backupRows = backupRows
|
self.backupRows = backupRows
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func importProgressText(for progress: Progress) -> String {
|
||||||
|
let percentage = Int(round(progress.fractionCompleted * 100))
|
||||||
|
return VectorL10n.keyBackupRecoverFromPrivateKeyInfo + " \(percentage)%"
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: - Cells -
|
// MARK: - Cells -
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@ final class SettingsSecureBackupViewModel: SettingsSecureBackupViewModelType {
|
||||||
// MARK: Private
|
// MARK: Private
|
||||||
private let recoveryService: MXRecoveryService
|
private let recoveryService: MXRecoveryService
|
||||||
private let keyBackup: MXKeyBackup
|
private let keyBackup: MXKeyBackup
|
||||||
|
private var progressUpdateTimer: Timer?
|
||||||
|
|
||||||
init(recoveryService: MXRecoveryService, keyBackup: MXKeyBackup) {
|
init(recoveryService: MXRecoveryService, keyBackup: MXKeyBackup) {
|
||||||
self.recoveryService = recoveryService
|
self.recoveryService = recoveryService
|
||||||
|
@ -106,17 +107,13 @@ final class SettingsSecureBackupViewModel: SettingsSecureBackupViewModelType {
|
||||||
guard let keyBackupVersion = self.keyBackup.keyBackupVersion, let keyBackupVersionTrust = keyBackupVersionTrust else {
|
guard let keyBackupVersion = self.keyBackup.keyBackupVersion, let keyBackupVersionTrust = keyBackupVersionTrust else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the backup progress before updating the state
|
let importProgress = keyBackup.importProgress
|
||||||
self.keyBackup.backupProgress { [weak self] (progress) in
|
let keyBackupState: SettingsSecureBackupViewState.KeyBackupState = .keyBackup(keyBackupVersion, keyBackupVersionTrust, importProgress)
|
||||||
guard let self = self else {
|
let viewState: SettingsSecureBackupViewState = self.recoveryService.hasRecovery() ? .secureBackup(keyBackupState) : .noSecureBackup(keyBackupState)
|
||||||
return
|
self.viewDelegate?.settingsSecureBackupViewModel(self, didUpdateViewState: viewState)
|
||||||
}
|
scheduleProgressUpdateIfNecessary(keyBackupVersionTrust: keyBackupVersionTrust, progress: importProgress)
|
||||||
|
|
||||||
let keyBackupState: SettingsSecureBackupViewState.KeyBackupState = .keyBackup(keyBackupVersion, keyBackupVersionTrust, progress)
|
|
||||||
let viewState: SettingsSecureBackupViewState = self.recoveryService.hasRecovery() ? .secureBackup(keyBackupState) : .noSecureBackup(keyBackupState)
|
|
||||||
self.viewDelegate?.settingsSecureBackupViewModel(self, didUpdateViewState: viewState)
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -130,6 +127,17 @@ final class SettingsSecureBackupViewModel: SettingsSecureBackupViewModelType {
|
||||||
self.viewDelegate?.settingsSecureBackupViewModel(self, didUpdateViewState: viewState)
|
self.viewDelegate?.settingsSecureBackupViewModel(self, didUpdateViewState: viewState)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func scheduleProgressUpdateIfNecessary(keyBackupVersionTrust: MXKeyBackupVersionTrust, progress: Progress?) {
|
||||||
|
if progress != nil {
|
||||||
|
progressUpdateTimer = Timer.scheduledTimer(withTimeInterval: 1, repeats: false) { [weak self] _ in
|
||||||
|
self?.computeState(withBackupVersionTrust: keyBackupVersionTrust)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
progressUpdateTimer?.invalidate()
|
||||||
|
progressUpdateTimer = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private func deleteKeyBackupVersion(_ keyBackupVersion: MXKeyBackupVersion) {
|
private func deleteKeyBackupVersion(_ keyBackupVersion: MXKeyBackupVersion) {
|
||||||
guard let keyBackupVersionVersion = keyBackupVersion.version else {
|
guard let keyBackupVersionVersion = keyBackupVersion.version else {
|
||||||
|
|
|
@ -35,7 +35,7 @@ enum SettingsSecureBackupViewState {
|
||||||
/// - keyBackupNotTrusted: There is a backup on the homeserver but it is not trusted
|
/// - keyBackupNotTrusted: There is a backup on the homeserver but it is not trusted
|
||||||
enum KeyBackupState {
|
enum KeyBackupState {
|
||||||
case noKeyBackup
|
case noKeyBackup
|
||||||
case keyBackup(MXKeyBackupVersion, MXKeyBackupVersionTrust, Progress)
|
case keyBackup(MXKeyBackupVersion, MXKeyBackupVersionTrust, Progress?)
|
||||||
case keyBackupNotTrusted(MXKeyBackupVersion, MXKeyBackupVersionTrust)
|
case keyBackupNotTrusted(MXKeyBackupVersion, MXKeyBackupVersionTrust)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1218,9 +1218,9 @@ TableViewSectionsDelegate>
|
||||||
cell = [secureBackupSection cellForRowAtRow:rowTag];
|
cell = [secureBackupSection cellForRowAtRow:rowTag];
|
||||||
}
|
}
|
||||||
#ifdef CROSS_SIGNING_AND_BACKUP_DEV
|
#ifdef CROSS_SIGNING_AND_BACKUP_DEV
|
||||||
else if (section == SECTION_KEYBACKUP)
|
else if (sectionTag == SECTION_KEYBACKUP)
|
||||||
{
|
{
|
||||||
cell = [keyBackupSection cellForRowAtRow:row];
|
cell = [keyBackupSection cellForRowAtRow:rowTag];
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (sectionTag == SECTION_CROSSSIGNING)
|
else if (sectionTag == SECTION_CROSSSIGNING)
|
||||||
|
|
1
changelog.d/pr-7078.change
Normal file
1
changelog.d/pr-7078.change
Normal file
|
@ -0,0 +1 @@
|
||||||
|
CryptoV2: Import progress for room keys
|
Loading…
Reference in a new issue