0
0
mirror of https://github.com/thunderbird/thunderbird-android.git synced 2024-09-20 04:02:14 +02:00

Move code to validate identities and folders

This commit is contained in:
cketti 2024-06-12 22:36:14 +02:00
parent cce0b31092
commit f35bdf288c
3 changed files with 39 additions and 24 deletions

View File

@ -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<SettingsFile.Identity>?,
): List<ValidatedSettings.Identity> {
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<SettingsFile.Folder>?,
): List<ValidatedSettings.Folder> {
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")

View File

@ -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<ValidatedSettings.Identity>,
) {
// 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)
}

View File

@ -9,8 +9,8 @@ interface ValidatedSettings {
val incoming: Server,
val outgoing: Server,
val settings: InternalSettingsMap,
// val identities: List<Identity>,
// val folders: List<Folder>,
val identities: List<Identity>,
val folders: List<Folder>,
)
data class Server(