Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fca4ac18 authored by Wolf-Martell Montwé's avatar Wolf-Martell Montwé Committed by cketti
Browse files

Add missing extra mapping for incoming and outgoing server settings

parent b90301ec
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -29,4 +29,5 @@ dependencies {
    implementation(projects.feature.account.server.validation)

    testImplementation(projects.core.ui.compose.testing)
    testImplementation(projects.mail.protocols.imap)
}
+2 −2
Original line number Diff line number Diff line
@@ -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(
@@ -27,7 +27,7 @@ class ModifyIncomingServerSettingsViewModel(
            val state = accountStateLoader.execute(accountUuid)

            updateState {
                state.toIncomingConfigState()
                state.toIncomingServerSettingsState()
            }
        }
    }
+2 −2
Original line number Diff line number Diff line
@@ -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(
@@ -26,7 +26,7 @@ class ModifyOutgoingServerSettingsViewModel(
            val state = accountStateLoader.execute(accountUuid)

            updateState {
                state.toOutgoingConfigState()
                state.toOutgoingServerSettingsState()
            }
        }
    }
+11 −1
Original line number Diff line number Diff line
@@ -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
@@ -41,7 +42,12 @@ class ModifyIncomingServerSettingsViewModelTest {
                "username",
                "password",
                clientCertificateAlias = null,
                extra = emptyMap(),
                extra = ImapStoreSettings.createExtra(
                    autoDetectNamespace = true,
                    pathPrefix = null,
                    useCompression = true,
                    sendClientId = true,
                ),
            ),
        )

@@ -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,
                ),
            )
        }
+22 −17
Original line number Diff line number Diff line
@@ -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