From f35bdf288c34bdd2e2fedec086ec647584c1dd67 Mon Sep 17 00:00:00 2001 From: cketti Date: Wed, 12 Jun 2024 22:36:14 +0200 Subject: [PATCH] Move code to validate identities and folders --- .../preferences/AccountSettingsValidator.kt | 28 +++++++++++++++++ .../fsck/k9/preferences/SettingsImporter.kt | 31 ++++++------------- .../fsck/k9/preferences/ValidatedSettings.kt | 4 +-- 3 files changed, 39 insertions(+), 24 deletions(-) diff --git a/app/core/src/main/java/com/fsck/k9/preferences/AccountSettingsValidator.kt b/app/core/src/main/java/com/fsck/k9/preferences/AccountSettingsValidator.kt index 855e6ec779..15c764b0a7 100644 --- a/app/core/src/main/java/com/fsck/k9/preferences/AccountSettingsValidator.kt +++ b/app/core/src/main/java/com/fsck/k9/preferences/AccountSettingsValidator.kt @@ -4,6 +4,9 @@ import com.fsck.k9.preferences.ServerTypeConverter.toServerSettingsType import com.fsck.k9.preferences.Settings.InvalidSettingValueException internal class AccountSettingsValidator { + private val identitySettingsValidator = IdentitySettingsValidator() + private val folderSettingsValidator = FolderSettingsValidator() + fun validate(contentVersion: Int, account: SettingsFile.Account): ValidatedSettings.Account { val validatedSettings = AccountSettingsDescriptions.validate(contentVersion, account.settings!!, true) @@ -16,9 +19,34 @@ internal class AccountSettingsValidator { incoming = incomingServer, outgoing = outgoingServer, settings = validatedSettings, + identities = validateIdentities(contentVersion, account.identities), + folders = validateFolders(contentVersion, account.folders), ) } + private fun validateIdentities( + contentVersion: Int, + identities: List?, + ): List { + if (identities.isNullOrEmpty()) { + throw InvalidSettingValueException("Missing identities, there should be at least one.") + } + + return identities.map { identity -> + identitySettingsValidator.validate(contentVersion, identity) + } + } + + private fun validateFolders( + contentVersion: Int, + folders: List?, + ): List { + return folders.orEmpty() + .map { folder -> + folderSettingsValidator.validate(contentVersion, folder) + } + } + private fun validateIncomingServer(incoming: SettingsFile.Server?): ValidatedSettings.Server { if (incoming == null) { throw InvalidSettingValueException("Missing incoming server settings") diff --git a/app/core/src/main/java/com/fsck/k9/preferences/SettingsImporter.kt b/app/core/src/main/java/com/fsck/k9/preferences/SettingsImporter.kt index 179a0a1880..83624fc206 100644 --- a/app/core/src/main/java/com/fsck/k9/preferences/SettingsImporter.kt +++ b/app/core/src/main/java/com/fsck/k9/preferences/SettingsImporter.kt @@ -33,8 +33,6 @@ class SettingsImporter internal constructor( private val context: Context, ) { private val generalSettingsValidator = GeneralSettingsValidator() - private val folderSettingsValidator = FolderSettingsValidator() - private val identitySettingsValidator = IdentitySettingsValidator() private val accountSettingsValidator = AccountSettingsValidator() private val generalSettingsUpgrader = GeneralSettingsUpgrader() @@ -260,18 +258,11 @@ class SettingsImporter internal constructor( val uuid = accountMapping.second.uuid // Write identities - if (account.identities != null) { - importIdentities(editor, contentVersion, uuid, account) - } else { - // Require accounts to at least have one identity - throw InvalidSettingValueException("Missing identities, there should be at least one.") - } + importIdentities(editor, contentVersion, uuid, currentAccount.identities) // Write folder settings - if (account.folders != null) { - for (folder in account.folders) { - importFolder(editor, contentVersion, uuid, folder) - } + for (folder in currentAccount.folders) { + importFolder(editor, contentVersion, uuid, folder) } return AccountDescriptionPair( @@ -289,11 +280,9 @@ class SettingsImporter internal constructor( editor: StorageEditor, contentVersion: Int, uuid: String, - folder: SettingsFile.Folder, + folder: ValidatedSettings.Folder, ) { - val validatedFolder = folderSettingsValidator.validate(contentVersion, folder) - - val currentFolder = folderSettingsUpgrader.upgrade(contentVersion, validatedFolder) + val currentFolder = folderSettingsUpgrader.upgrade(contentVersion, folder) folderSettingsWriter.write(editor, uuid, currentFolder) } @@ -303,10 +292,10 @@ class SettingsImporter internal constructor( editor: StorageEditor, contentVersion: Int, uuid: String, - account: SettingsFile.Account, + identities: List, ) { // Write identities - for ((index, identity) in account.identities!!.withIndex()) { + for ((index, identity) in identities.withIndex()) { importIdentity(editor, contentVersion, uuid, index, identity) } } @@ -316,11 +305,9 @@ class SettingsImporter internal constructor( contentVersion: Int, accountUuid: String, index: Int, - identity: SettingsFile.Identity, + identity: ValidatedSettings.Identity, ) { - val validatedIdentity = identitySettingsValidator.validate(contentVersion, identity) - - val currentIdentity = identitySettingsUpgrader.upgrade(contentVersion, validatedIdentity) + val currentIdentity = identitySettingsUpgrader.upgrade(contentVersion, identity) identitySettingsWriter.write(editor, accountUuid, index, currentIdentity) } diff --git a/app/core/src/main/java/com/fsck/k9/preferences/ValidatedSettings.kt b/app/core/src/main/java/com/fsck/k9/preferences/ValidatedSettings.kt index 3d8f58a1bf..4efcb0495a 100644 --- a/app/core/src/main/java/com/fsck/k9/preferences/ValidatedSettings.kt +++ b/app/core/src/main/java/com/fsck/k9/preferences/ValidatedSettings.kt @@ -9,8 +9,8 @@ interface ValidatedSettings { val incoming: Server, val outgoing: Server, val settings: InternalSettingsMap, -// val identities: List, -// val folders: List, + val identities: List, + val folders: List, ) data class Server(