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

Unverified Commit bfe82bf9 authored by Wolf-Martell Montwé's avatar Wolf-Martell Montwé Committed by GitHub
Browse files

Merge pull request #7174 from thundernest/add_account_updater

Add account updater
parents 8f911650 8549bfc5
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@ dependencies {

    implementation(projects.feature.onboarding)
    implementation(projects.feature.account.setup)
    implementation(projects.feature.account.edit)

    implementation(libs.appauth)
    implementation(libs.okhttp)
+14 −3
Original line number Diff line number Diff line
package app.k9mail.feature.preview

import app.k9mail.core.common.oauth.OAuthConfigurationFactory
import app.k9mail.feature.account.edit.AccountEditExternalContract
import app.k9mail.feature.account.setup.AccountSetupExternalContract
import app.k9mail.feature.account.setup.featureAccountSetupModule
import app.k9mail.feature.preview.account.AccountCreator
import app.k9mail.feature.preview.account.AccountOwnerNameProvider
import app.k9mail.feature.preview.account.InMemoryAccountStore
import app.k9mail.feature.preview.auth.AndroidKeyStoreDirectoryProvider
import app.k9mail.feature.preview.auth.AppOAuthConfigurationFactory
import app.k9mail.feature.preview.auth.DefaultTrustedSocketFactory
@@ -15,11 +16,18 @@ import com.fsck.k9.mail.ssl.LocalKeyStore
import com.fsck.k9.mail.ssl.TrustManagerFactory
import com.fsck.k9.mail.ssl.TrustedSocketFactory
import org.koin.core.module.Module
import org.koin.dsl.binds
import org.koin.dsl.module

val accountModule: Module = module {
    single { InMemoryAccountStore() }
        .binds(
            arrayOf(
                AccountSetupExternalContract.AccountCreator::class,
                AccountEditExternalContract.AccountUpdater::class,
            ),
        )
    factory<AccountSetupExternalContract.AccountOwnerNameProvider> { AccountOwnerNameProvider() }
    factory<AccountSetupExternalContract.AccountCreator> { AccountCreator() }
}

val featureModule: Module = module {
@@ -31,5 +39,8 @@ val featureModule: Module = module {
    single<TrustedSocketFactory> { DefaultTrustedSocketFactory(get(), get()) }
    single<OAuth2TokenProviderFactory> { RealOAuth2TokenProviderFactory(context = get()) }

    includes(featureAccountSetupModule, accountModule)
    includes(
        accountModule,
        featureAccountSetupModule,
    )
}
+28 −0
Original line number Diff line number Diff line
package app.k9mail.feature.preview.account

import app.k9mail.feature.account.common.domain.entity.Account
import app.k9mail.feature.account.setup.AccountSetupExternalContract
import app.k9mail.feature.account.edit.AccountEditExternalContract.AccountUpdater
import app.k9mail.feature.account.edit.AccountEditExternalContract.AccountUpdater.AccountUpdaterResult
import app.k9mail.feature.account.setup.AccountSetupExternalContract.AccountCreator
import app.k9mail.feature.account.setup.AccountSetupExternalContract.AccountCreator.AccountCreatorResult
import java.util.UUID

class AccountCreator : AccountSetupExternalContract.AccountCreator {
class InMemoryAccountStore(
    private val accountMap: MutableMap<String, Account> = mutableMapOf(),
) : AccountCreator, AccountUpdater {

    override suspend fun createAccount(account: Account): AccountCreatorResult {
        return AccountCreatorResult.Success(UUID.randomUUID().toString())
        accountMap[account.uuid] = account

        return AccountCreatorResult.Success(account.uuid)
    }

    override suspend fun updateAccount(account: Account): AccountUpdaterResult {
        return if (!accountMap.containsKey(account.uuid)) {
            AccountUpdaterResult.Error("Account not found")
        } else {
            accountMap[account.uuid] = account

            AccountUpdaterResult.Success(account.uuid)
        }
    }
}
+4 −1
Original line number Diff line number Diff line
@@ -122,7 +122,6 @@ class Preferences internal constructor(
        }
    }

    @OptIn(ExperimentalCoroutinesApi::class)
    override fun getAccountFlow(accountUuid: String): Flow<Account> {
        return callbackFlow {
            val initialAccount = getAccount(accountUuid)
@@ -169,6 +168,10 @@ class Preferences internal constructor(

    fun newAccount(): Account {
        val accountUuid = UUID.randomUUID().toString()
        return newAccount(accountUuid)
    }

    fun newAccount(accountUuid: String): Account {
        val account = Account(accountUuid)
        accountPreferenceSerializer.loadDefaults(account)

+1 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ dependencies {
    implementation(projects.feature.launcher)

    implementation(projects.feature.account.setup)
    implementation(projects.feature.account.edit)

    implementation(libs.androidx.appcompat)
    implementation(libs.androidx.core.ktx)
Loading