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

Unverified Commit 4f01ec05 authored by cketti's avatar cketti Committed by GitHub
Browse files

Merge pull request #8555 from cketti/set_delete_policy_on_qr_code_import

Set delete policy on QR code import
parents 84c61220 107d123d
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -9,6 +9,8 @@ android {

dependencies {
    implementation(projects.core.common)
    implementation(projects.legacy.account)
    implementation(projects.legacy.common)
    implementation(projects.legacy.ui.base)
    implementation(projects.core.ui.compose.designsystem)

+21 −1
Original line number Diff line number Diff line
@@ -3,6 +3,10 @@ package app.k9mail.feature.migration.qrcode
import app.k9mail.feature.migration.qrcode.domain.QrCodeDomainContract.UseCase
import app.k9mail.feature.migration.qrcode.domain.usecase.QrCodePayloadReader
import app.k9mail.feature.migration.qrcode.domain.usecase.QrCodeSettingsWriter
import app.k9mail.feature.migration.qrcode.payload.QrCodePayloadAdapter
import app.k9mail.feature.migration.qrcode.payload.QrCodePayloadMapper
import app.k9mail.feature.migration.qrcode.payload.QrCodePayloadParser
import app.k9mail.feature.migration.qrcode.payload.QrCodePayloadValidator
import app.k9mail.feature.migration.qrcode.settings.DefaultUuidGenerator
import app.k9mail.feature.migration.qrcode.settings.UuidGenerator
import app.k9mail.feature.migration.qrcode.settings.XmlSettingWriter
@@ -18,7 +22,23 @@ val qrCodeModule = module {
        )
    }

    factory<UseCase.QrCodePayloadReader> { QrCodePayloadReader() }
    factory { QrCodePayloadAdapter() }
    factory { QrCodePayloadParser(qrCodePayloadAdapter = get()) }
    factory { QrCodePayloadValidator() }
    factory {
        QrCodePayloadMapper(
            qrCodePayloadValidator = get(),
            deletePolicyProvider = get(),
        )
    }

    factory<UseCase.QrCodePayloadReader> {
        QrCodePayloadReader(
            parser = get(),
            mapper = get(),
        )
    }

    factory<UseCase.QrCodeSettingsWriter> {
        QrCodeSettingsWriter(
            context = get(),
+3 −0
Original line number Diff line number Diff line
@@ -3,6 +3,8 @@ package app.k9mail.feature.migration.qrcode.domain.entity
import app.k9mail.core.common.mail.EmailAddress
import app.k9mail.core.common.net.Hostname
import app.k9mail.core.common.net.Port
import app.k9mail.legacy.account.Account
import app.k9mail.legacy.account.Account.DeletePolicy

internal data class AccountData(
    val sequenceNumber: Int,
@@ -11,6 +13,7 @@ internal data class AccountData(
) {
    data class Account(
        val accountName: String,
        val deletePolicy: DeletePolicy,
        val incomingServer: IncomingServer,
        val outgoingServerGroups: List<OutgoingServerGroup>,
    )
+2 −2
Original line number Diff line number Diff line
@@ -6,8 +6,8 @@ import app.k9mail.feature.migration.qrcode.payload.QrCodePayloadMapper
import app.k9mail.feature.migration.qrcode.payload.QrCodePayloadParser

internal class QrCodePayloadReader(
    private val parser: QrCodePayloadParser = QrCodePayloadParser(),
    private val mapper: QrCodePayloadMapper = QrCodePayloadMapper(),
    private val parser: QrCodePayloadParser,
    private val mapper: QrCodePayloadMapper,
) : UseCase.QrCodePayloadReader {
    override fun read(payload: String): AccountData? {
        val parsedData = parser.parse(payload) ?: return null
+17 −1
Original line number Diff line number Diff line
package app.k9mail.feature.migration.qrcode.payload

import app.k9mail.core.common.mail.Protocols
import app.k9mail.core.common.mail.toUserEmailAddress
import app.k9mail.core.common.net.toHostname
import app.k9mail.core.common.net.toPort
import app.k9mail.feature.migration.qrcode.domain.entity.AccountData
import app.k9mail.feature.migration.qrcode.domain.entity.AccountData.IncomingServerProtocol
import app.k9mail.legacy.account.Account.DeletePolicy
import com.fsck.k9.account.DeletePolicyProvider

internal class QrCodePayloadMapper(
    private val qrCodePayloadValidator: QrCodePayloadValidator = QrCodePayloadValidator(),
    private val qrCodePayloadValidator: QrCodePayloadValidator,
    private val deletePolicyProvider: DeletePolicyProvider,
) {
    fun toAccountData(data: QrCodeData): AccountData? {
        return if (qrCodePayloadValidator.isValid(data)) {
@@ -31,9 +36,11 @@ internal class QrCodePayloadMapper(
            accountName = account.incomingServer.accountName,
            identity = outgoingServerGroups.first().identities.first(),
        )
        val deletePolicy = getDeletePolicy(incomingServer.protocol)

        return AccountData.Account(
            accountName = accountName,
            deletePolicy = deletePolicy,
            incomingServer = incomingServer,
            outgoingServerGroups = outgoingServerGroups,
        )
@@ -92,4 +99,13 @@ internal class QrCodePayloadMapper(
            displayName = identity.displayName,
        )
    }

    private fun getDeletePolicy(protocol: IncomingServerProtocol): DeletePolicy {
        val accountType = when (protocol) {
            IncomingServerProtocol.Imap -> Protocols.IMAP
            IncomingServerProtocol.Pop3 -> Protocols.POP3
        }

        return deletePolicyProvider.getDeletePolicy(accountType)
    }
}
Loading