Loading feature/account/edit/build.gradle.kts +1 −0 Original line number Diff line number Diff line Loading @@ -29,4 +29,5 @@ dependencies { implementation(projects.feature.account.server.validation) testImplementation(projects.core.ui.compose.testing) testImplementation(projects.mail.protocols.imap) } feature/account/edit/src/main/kotlin/app/k9mail/feature/account/edit/ui/server/settings/modify/ModifyIncomingServerSettingsViewModel.kt +2 −2 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ import app.k9mail.feature.account.common.domain.entity.InteractionMode import app.k9mail.feature.account.edit.domain.AccountEditDomainContract import app.k9mail.feature.account.server.settings.ui.incoming.IncomingServerSettingsContract import app.k9mail.feature.account.server.settings.ui.incoming.IncomingServerSettingsViewModel import app.k9mail.feature.account.server.settings.ui.incoming.toIncomingConfigState import app.k9mail.feature.account.server.settings.ui.incoming.toIncomingServerSettingsState import kotlinx.coroutines.launch class ModifyIncomingServerSettingsViewModel( Loading @@ -27,7 +27,7 @@ class ModifyIncomingServerSettingsViewModel( val state = accountStateLoader.execute(accountUuid) updateState { state.toIncomingConfigState() state.toIncomingServerSettingsState() } } } Loading feature/account/edit/src/main/kotlin/app/k9mail/feature/account/edit/ui/server/settings/modify/ModifyOutgoingServerSettingsViewModel.kt +2 −2 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ import app.k9mail.feature.account.common.domain.entity.InteractionMode import app.k9mail.feature.account.edit.domain.AccountEditDomainContract import app.k9mail.feature.account.server.settings.ui.outgoing.OutgoingServerSettingsContract import app.k9mail.feature.account.server.settings.ui.outgoing.OutgoingServerSettingsViewModel import app.k9mail.feature.account.server.settings.ui.outgoing.toOutgoingConfigState import app.k9mail.feature.account.server.settings.ui.outgoing.toOutgoingServerSettingsState import kotlinx.coroutines.launch class ModifyOutgoingServerSettingsViewModel( Loading @@ -26,7 +26,7 @@ class ModifyOutgoingServerSettingsViewModel( val state = accountStateLoader.execute(accountUuid) updateState { state.toOutgoingConfigState() state.toOutgoingServerSettingsState() } } } Loading feature/account/edit/src/test/kotlin/app/k9mail/feature/account/edit/ui/server/settings/modify/ModifyIncomingServerSettingsViewModelTest.kt +11 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ import app.k9mail.feature.account.server.settings.ui.incoming.fake.FakeIncomingS import assertk.assertions.isEqualTo import com.fsck.k9.mail.AuthType import com.fsck.k9.mail.ServerSettings import com.fsck.k9.mail.store.imap.ImapStoreSettings import kotlinx.coroutines.delay import kotlinx.coroutines.test.runTest import org.junit.Rule Loading @@ -41,7 +42,12 @@ class ModifyIncomingServerSettingsViewModelTest { "username", "password", clientCertificateAlias = null, extra = emptyMap(), extra = ImapStoreSettings.createExtra( autoDetectNamespace = true, pathPrefix = null, useCompression = true, sendClientId = true, ), ), ) Loading Loading @@ -71,6 +77,10 @@ class ModifyIncomingServerSettingsViewModelTest { authenticationType = AuthenticationType.PasswordCleartext, username = StringInputField(value = "username"), password = StringInputField(value = "password"), imapAutodetectNamespaceEnabled = true, imapPrefix = StringInputField(value = ""), imapUseCompression = true, imapSendClientId = true, ), ) } Loading feature/account/server/settings/src/main/kotlin/app/k9mail/feature/account/server/settings/ui/incoming/IncomingServerSettingsStateMapper.kt +22 −17 Original line number Diff line number Diff line Loading @@ -11,25 +11,30 @@ import app.k9mail.feature.account.common.domain.input.StringInputField import app.k9mail.feature.account.server.settings.ui.incoming.IncomingServerSettingsContract.State import com.fsck.k9.mail.ServerSettings import com.fsck.k9.mail.store.imap.ImapStoreSettings import com.fsck.k9.mail.store.imap.ImapStoreSettings.autoDetectNamespace import com.fsck.k9.mail.store.imap.ImapStoreSettings.isSendClientId import com.fsck.k9.mail.store.imap.ImapStoreSettings.isUseCompression import com.fsck.k9.mail.store.imap.ImapStoreSettings.pathPrefix fun AccountState.toIncomingConfigState(): State { val incomingServerSettings = incomingServerSettings return if (incomingServerSettings == null) { State( username = StringInputField(value = emailAddress ?: ""), ) } else { State( protocolType = IncomingProtocolType.fromName(incomingServerSettings.type), server = StringInputField(value = incomingServerSettings.host ?: ""), security = incomingServerSettings.connectionSecurity.toConnectionSecurity(), port = NumberInputField(value = incomingServerSettings.port.toLong()), authenticationType = incomingServerSettings.authenticationType.toAuthenticationType(), username = StringInputField(value = incomingServerSettings.username), password = StringInputField(value = incomingServerSettings.password ?: ""), fun AccountState.toIncomingServerSettingsState() = incomingServerSettings?.toIncomingServerSettingsState() ?: State(username = StringInputField(value = emailAddress ?: "")) private fun ServerSettings.toIncomingServerSettingsState(): State { return State( protocolType = IncomingProtocolType.fromName(type), server = StringInputField(value = host ?: ""), security = connectionSecurity.toConnectionSecurity(), port = NumberInputField(value = port.toLong()), authenticationType = authenticationType.toAuthenticationType(), username = StringInputField(value = username), password = StringInputField(value = password ?: ""), clientCertificateAlias = clientCertificateAlias, imapAutodetectNamespaceEnabled = autoDetectNamespace, imapPrefix = StringInputField(value = pathPrefix ?: ""), imapUseCompression = isUseCompression, imapSendClientId = isSendClientId, ) } } internal fun State.toServerSettings(): ServerSettings { return ServerSettings( Loading Loading
feature/account/edit/build.gradle.kts +1 −0 Original line number Diff line number Diff line Loading @@ -29,4 +29,5 @@ dependencies { implementation(projects.feature.account.server.validation) testImplementation(projects.core.ui.compose.testing) testImplementation(projects.mail.protocols.imap) }
feature/account/edit/src/main/kotlin/app/k9mail/feature/account/edit/ui/server/settings/modify/ModifyIncomingServerSettingsViewModel.kt +2 −2 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ import app.k9mail.feature.account.common.domain.entity.InteractionMode import app.k9mail.feature.account.edit.domain.AccountEditDomainContract import app.k9mail.feature.account.server.settings.ui.incoming.IncomingServerSettingsContract import app.k9mail.feature.account.server.settings.ui.incoming.IncomingServerSettingsViewModel import app.k9mail.feature.account.server.settings.ui.incoming.toIncomingConfigState import app.k9mail.feature.account.server.settings.ui.incoming.toIncomingServerSettingsState import kotlinx.coroutines.launch class ModifyIncomingServerSettingsViewModel( Loading @@ -27,7 +27,7 @@ class ModifyIncomingServerSettingsViewModel( val state = accountStateLoader.execute(accountUuid) updateState { state.toIncomingConfigState() state.toIncomingServerSettingsState() } } } Loading
feature/account/edit/src/main/kotlin/app/k9mail/feature/account/edit/ui/server/settings/modify/ModifyOutgoingServerSettingsViewModel.kt +2 −2 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ import app.k9mail.feature.account.common.domain.entity.InteractionMode import app.k9mail.feature.account.edit.domain.AccountEditDomainContract import app.k9mail.feature.account.server.settings.ui.outgoing.OutgoingServerSettingsContract import app.k9mail.feature.account.server.settings.ui.outgoing.OutgoingServerSettingsViewModel import app.k9mail.feature.account.server.settings.ui.outgoing.toOutgoingConfigState import app.k9mail.feature.account.server.settings.ui.outgoing.toOutgoingServerSettingsState import kotlinx.coroutines.launch class ModifyOutgoingServerSettingsViewModel( Loading @@ -26,7 +26,7 @@ class ModifyOutgoingServerSettingsViewModel( val state = accountStateLoader.execute(accountUuid) updateState { state.toOutgoingConfigState() state.toOutgoingServerSettingsState() } } } Loading
feature/account/edit/src/test/kotlin/app/k9mail/feature/account/edit/ui/server/settings/modify/ModifyIncomingServerSettingsViewModelTest.kt +11 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ import app.k9mail.feature.account.server.settings.ui.incoming.fake.FakeIncomingS import assertk.assertions.isEqualTo import com.fsck.k9.mail.AuthType import com.fsck.k9.mail.ServerSettings import com.fsck.k9.mail.store.imap.ImapStoreSettings import kotlinx.coroutines.delay import kotlinx.coroutines.test.runTest import org.junit.Rule Loading @@ -41,7 +42,12 @@ class ModifyIncomingServerSettingsViewModelTest { "username", "password", clientCertificateAlias = null, extra = emptyMap(), extra = ImapStoreSettings.createExtra( autoDetectNamespace = true, pathPrefix = null, useCompression = true, sendClientId = true, ), ), ) Loading Loading @@ -71,6 +77,10 @@ class ModifyIncomingServerSettingsViewModelTest { authenticationType = AuthenticationType.PasswordCleartext, username = StringInputField(value = "username"), password = StringInputField(value = "password"), imapAutodetectNamespaceEnabled = true, imapPrefix = StringInputField(value = ""), imapUseCompression = true, imapSendClientId = true, ), ) } Loading
feature/account/server/settings/src/main/kotlin/app/k9mail/feature/account/server/settings/ui/incoming/IncomingServerSettingsStateMapper.kt +22 −17 Original line number Diff line number Diff line Loading @@ -11,25 +11,30 @@ import app.k9mail.feature.account.common.domain.input.StringInputField import app.k9mail.feature.account.server.settings.ui.incoming.IncomingServerSettingsContract.State import com.fsck.k9.mail.ServerSettings import com.fsck.k9.mail.store.imap.ImapStoreSettings import com.fsck.k9.mail.store.imap.ImapStoreSettings.autoDetectNamespace import com.fsck.k9.mail.store.imap.ImapStoreSettings.isSendClientId import com.fsck.k9.mail.store.imap.ImapStoreSettings.isUseCompression import com.fsck.k9.mail.store.imap.ImapStoreSettings.pathPrefix fun AccountState.toIncomingConfigState(): State { val incomingServerSettings = incomingServerSettings return if (incomingServerSettings == null) { State( username = StringInputField(value = emailAddress ?: ""), ) } else { State( protocolType = IncomingProtocolType.fromName(incomingServerSettings.type), server = StringInputField(value = incomingServerSettings.host ?: ""), security = incomingServerSettings.connectionSecurity.toConnectionSecurity(), port = NumberInputField(value = incomingServerSettings.port.toLong()), authenticationType = incomingServerSettings.authenticationType.toAuthenticationType(), username = StringInputField(value = incomingServerSettings.username), password = StringInputField(value = incomingServerSettings.password ?: ""), fun AccountState.toIncomingServerSettingsState() = incomingServerSettings?.toIncomingServerSettingsState() ?: State(username = StringInputField(value = emailAddress ?: "")) private fun ServerSettings.toIncomingServerSettingsState(): State { return State( protocolType = IncomingProtocolType.fromName(type), server = StringInputField(value = host ?: ""), security = connectionSecurity.toConnectionSecurity(), port = NumberInputField(value = port.toLong()), authenticationType = authenticationType.toAuthenticationType(), username = StringInputField(value = username), password = StringInputField(value = password ?: ""), clientCertificateAlias = clientCertificateAlias, imapAutodetectNamespaceEnabled = autoDetectNamespace, imapPrefix = StringInputField(value = pathPrefix ?: ""), imapUseCompression = isUseCompression, imapSendClientId = isSendClientId, ) } } internal fun State.toServerSettings(): ServerSettings { return ServerSettings( Loading