0
0
mirror of https://github.com/thunderbird/thunderbird-android.git synced 2024-09-20 12:12:15 +02:00

Save special folder mapping when creating an account

This commit is contained in:
cketti 2023-12-13 23:14:27 +01:00
parent a1a090f77e
commit df776baeea
2 changed files with 53 additions and 5 deletions

View File

@ -151,23 +151,18 @@ class Account(override val uuid: String) : BaseAccount {
@get:Synchronized
var draftsFolderSelection = SpecialFolderSelection.AUTOMATIC
private set
@get:Synchronized
var sentFolderSelection = SpecialFolderSelection.AUTOMATIC
private set
@get:Synchronized
var trashFolderSelection = SpecialFolderSelection.AUTOMATIC
private set
@get:Synchronized
var archiveFolderSelection = SpecialFolderSelection.AUTOMATIC
private set
@get:Synchronized
var spamFolderSelection = SpecialFolderSelection.AUTOMATIC
private set
@get:Synchronized
@set:Synchronized

View File

@ -3,9 +3,12 @@ package com.fsck.k9.account
import android.content.Context
import app.k9mail.core.common.mail.Protocols
import app.k9mail.feature.account.common.domain.entity.Account
import app.k9mail.feature.account.common.domain.entity.SpecialFolderOption
import app.k9mail.feature.account.common.domain.entity.SpecialFolderSettings
import app.k9mail.feature.account.setup.AccountSetupExternalContract
import app.k9mail.feature.account.setup.AccountSetupExternalContract.AccountCreator.AccountCreatorResult
import com.fsck.k9.Account.FolderMode
import com.fsck.k9.Account.SpecialFolderSelection
import com.fsck.k9.Core
import com.fsck.k9.Preferences
import com.fsck.k9.controller.MessagingController
@ -16,6 +19,7 @@ import com.fsck.k9.mail.store.imap.ImapStoreSettings.createExtra
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
import com.fsck.k9.mailstore.SpecialFolderUpdater
import com.fsck.k9.mailstore.SpecialLocalFoldersCreator
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
@ -69,6 +73,10 @@ class AccountCreator(
localFoldersCreator.createSpecialLocalFolders(newAccount)
account.specialFolderSettings?.let { specialFolderSettings ->
newAccount.setSpecialFolders(specialFolderSettings)
}
newAccount.markSetupFinished()
preferences.saveAccount(newAccount)
@ -79,6 +87,51 @@ class AccountCreator(
return newAccount.uuid
}
/**
* Set special folders by name.
*
* Since the folder list hasn't been synced yet, we don't have database IDs for the folders. So we use the same
* mechanism that is used when importing settings. See [SpecialFolderUpdater] for details.
*/
private fun K9Account.setSpecialFolders(specialFolders: SpecialFolderSettings) {
importedArchiveFolder = specialFolders.archiveSpecialFolderOption.toFolderServerId()
archiveFolderSelection = specialFolders.archiveSpecialFolderOption.toFolderSelection()
importedDraftsFolder = specialFolders.draftsSpecialFolderOption.toFolderServerId()
draftsFolderSelection = specialFolders.draftsSpecialFolderOption.toFolderSelection()
importedSentFolder = specialFolders.sentSpecialFolderOption.toFolderServerId()
sentFolderSelection = specialFolders.sentSpecialFolderOption.toFolderSelection()
importedSpamFolder = specialFolders.spamSpecialFolderOption.toFolderServerId()
spamFolderSelection = specialFolders.spamSpecialFolderOption.toFolderSelection()
importedTrashFolder = specialFolders.trashSpecialFolderOption.toFolderServerId()
trashFolderSelection = specialFolders.trashSpecialFolderOption.toFolderSelection()
}
private fun SpecialFolderOption.toFolderServerId(): String? {
return when (this) {
is SpecialFolderOption.None -> null
is SpecialFolderOption.Regular -> remoteFolder.serverId.serverId
is SpecialFolderOption.Special -> remoteFolder.serverId.serverId
}
}
private fun SpecialFolderOption.toFolderSelection(): SpecialFolderSelection {
return when (this) {
is SpecialFolderOption.None -> {
if (isAutomatic) SpecialFolderSelection.AUTOMATIC else SpecialFolderSelection.MANUAL
}
is SpecialFolderOption.Regular -> {
SpecialFolderSelection.MANUAL
}
is SpecialFolderOption.Special -> {
if (isAutomatic) SpecialFolderSelection.AUTOMATIC else SpecialFolderSelection.MANUAL
}
}
}
}
private fun K9Account.setIncomingServerSettings(serverSettings: ServerSettings) {