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

Unverified Commit aa5c9fa8 authored by Rafael Tonholo's avatar Rafael Tonholo
Browse files

refactor(outbox): use OutboxFolderManager to retrieve the outbox id in...

refactor(outbox): use OutboxFolderManager to retrieve the outbox id in DefaultDisplayFolderRepository
parent 880ebcbc
Loading
Loading
Loading
Loading
+27 −6
Original line number Diff line number Diff line
@@ -19,11 +19,14 @@ import net.thunderbird.core.android.account.LegacyAccountDto
import net.thunderbird.core.android.account.LegacyAccountDtoManager
import net.thunderbird.feature.mail.folder.api.Folder
import net.thunderbird.feature.mail.folder.api.FolderType
import net.thunderbird.feature.mail.folder.api.OutboxFolderManager
import com.fsck.k9.mail.FolderType as LegacyFolderType

class DefaultDisplayFolderRepository(
    private val accountManager: LegacyAccountDtoManager,
    private val messagingController: MessagingControllerRegistry,
    private val messageStoreManager: MessageStoreManager,
    private val outboxFolderManager: OutboxFolderManager,
    private val coroutineContext: CoroutineContext = Dispatchers.IO,
) : DisplayFolderRepository {
    private val sortForDisplay =
@@ -33,17 +36,22 @@ class DefaultDisplayFolderRepository(
            .thenByDescending { it.isInTopGroup }
            .thenBy(String.CASE_INSENSITIVE_ORDER) { it.folder.name }

    private fun getDisplayFolders(account: LegacyAccountDto, includeHiddenFolders: Boolean): List<DisplayFolder> {
    private fun getDisplayFolders(
        account: LegacyAccountDto,
        outboxFolderId: Long,
        includeHiddenFolders: Boolean,
    ): List<DisplayFolder> {
        val messageStore = messageStoreManager.getMessageStore(account.uuid)
        return messageStore.getDisplayFolders(
            includeHiddenFolders = includeHiddenFolders,
            outboxFolderId = account.outboxFolderId,
            outboxFolderId = outboxFolderId,
        ) { folder ->
            DisplayFolder(
                folder = Folder(
                    id = folder.id,
                    name = folder.name,
                    type = FolderTypeMapper.folderTypeOf(account, folder.id),
                    type = folder.takeIf { it.id == outboxFolderId }?.type?.toFolderType()
                        ?: FolderTypeMapper.folderTypeOf(account, folder.id),
                    isLocalOnly = folder.isLocalOnly,
                ),
                isInTopGroup = folder.isInTopGroup,
@@ -61,19 +69,20 @@ class DefaultDisplayFolderRepository(
        val messageStore = messageStoreManager.getMessageStore(account.uuid)

        return callbackFlow {
            send(getDisplayFolders(account, includeHiddenFolders))
            val outboxFolderId = outboxFolderManager.getOutboxFolderId(account.id)
            send(getDisplayFolders(account, outboxFolderId, includeHiddenFolders))

            val folderStatusChangedListener = object : SimpleMessagingListener() {
                override fun folderStatusChanged(statusChangedAccount: LegacyAccountDto, folderId: Long) {
                    if (statusChangedAccount.uuid == account.uuid) {
                        trySendBlocking(getDisplayFolders(account, includeHiddenFolders))
                        trySendBlocking(getDisplayFolders(account, outboxFolderId, includeHiddenFolders))
                    }
                }
            }
            messagingController.addListener(folderStatusChangedListener)

            val folderSettingsChangedListener = FolderSettingsChangedListener {
                trySendBlocking(getDisplayFolders(account, includeHiddenFolders))
                trySendBlocking(getDisplayFolders(account, outboxFolderId, includeHiddenFolders))
            }
            messageStore.addFolderSettingsChangedListener(folderSettingsChangedListener)

@@ -90,4 +99,16 @@ class DefaultDisplayFolderRepository(
        val account = accountManager.getAccount(accountUuid) ?: error("Account not found: $accountUuid")
        return getDisplayFoldersFlow(account, includeHiddenFolders = false)
    }

    private fun LegacyFolderType.toFolderType(): FolderType =
        when (this) {
            LegacyFolderType.REGULAR -> FolderType.REGULAR
            LegacyFolderType.INBOX -> FolderType.INBOX
            LegacyFolderType.OUTBOX -> FolderType.OUTBOX
            LegacyFolderType.DRAFTS -> FolderType.DRAFTS
            LegacyFolderType.SENT -> FolderType.SENT
            LegacyFolderType.TRASH -> FolderType.TRASH
            LegacyFolderType.SPAM -> FolderType.SPAM
            LegacyFolderType.ARCHIVE -> FolderType.ARCHIVE
        }
}
+1 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ val uiFolderModule = module {
            accountManager = get(),
            messagingController = get(),
            messageStoreManager = get(),
            outboxFolderManager = get(),
        )
    }
}