Loading feature/migration/qrcode/build.gradle.kts +2 −0 Original line number Diff line number Diff line Loading @@ -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) Loading feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/QrCodeModule.kt +21 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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(), Loading feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/domain/entity/AccountData.kt +3 −0 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -11,6 +13,7 @@ internal data class AccountData( ) { data class Account( val accountName: String, val deletePolicy: DeletePolicy, val incomingServer: IncomingServer, val outgoingServerGroups: List<OutgoingServerGroup>, ) Loading feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/domain/usecase/QrCodePayloadReader.kt +2 −2 Original line number Diff line number Diff line Loading @@ -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 Loading feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/payload/QrCodePayloadMapper.kt +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)) { Loading @@ -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, ) Loading Loading @@ -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
feature/migration/qrcode/build.gradle.kts +2 −0 Original line number Diff line number Diff line Loading @@ -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) Loading
feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/QrCodeModule.kt +21 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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(), Loading
feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/domain/entity/AccountData.kt +3 −0 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -11,6 +13,7 @@ internal data class AccountData( ) { data class Account( val accountName: String, val deletePolicy: DeletePolicy, val incomingServer: IncomingServer, val outgoingServerGroups: List<OutgoingServerGroup>, ) Loading
feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/domain/usecase/QrCodePayloadReader.kt +2 −2 Original line number Diff line number Diff line Loading @@ -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 Loading
feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/payload/QrCodePayloadMapper.kt +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)) { Loading @@ -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, ) Loading Loading @@ -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) } }