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

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

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

parent 04a7989f
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ import com.fsck.k9.CoreResourceProvider
import com.fsck.k9.Preferences
import com.fsck.k9.activity.MessageList
import com.fsck.k9.ui.messagelist.DefaultFolderProvider
import kotlinx.coroutines.runBlocking
import net.thunderbird.core.android.account.LegacyAccountDto
import net.thunderbird.core.logging.legacy.Log
import net.thunderbird.feature.search.legacy.LocalMessageSearch
@@ -82,7 +83,7 @@ class UnreadWidgetDataProvider(
    }

    private fun getFolderDisplayName(account: LegacyAccountDto, folderId: Long): String {
        val folder = folderRepository.getFolder(account, folderId)
        val folder = runBlocking { folderRepository.getFolder(account, folderId) }
        return if (folder != null) {
            folderNameFormatter.displayName(folder)
        } else {
+1 −1
Original line number Diff line number Diff line
@@ -157,7 +157,7 @@ class UnreadWidgetDataProviderTest : AutoCloseKoinTest() {

    private fun createFolderRepository(): FolderRepository {
        return mock {
            on { getFolder(account, FOLDER_ID) } doReturn FOLDER
            onBlocking { getFolder(account, FOLDER_ID) } doReturn FOLDER
        }
    }

+1 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ val mailStoreModule = module {
    single {
        FolderRepository(
            messageStoreManager = get(),
            outboxFolderManager = get(),
        )
    }
    single { MessageViewInfoExtractorFactory(get(), get(), get()) }
+16 −4
Original line number Diff line number Diff line
@@ -16,33 +16,38 @@ import net.thunderbird.core.android.account.LegacyAccountDto
import net.thunderbird.core.common.exception.MessagingException
import net.thunderbird.feature.mail.folder.api.Folder
import net.thunderbird.feature.mail.folder.api.FolderDetails
import net.thunderbird.feature.mail.folder.api.FolderType
import net.thunderbird.feature.mail.folder.api.OutboxFolderManager
import net.thunderbird.feature.mail.folder.api.RemoteFolder

@Suppress("TooManyFunctions")
class FolderRepository(
    private val messageStoreManager: MessageStoreManager,
    private val outboxFolderManager: OutboxFolderManager,
    private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO,
) {
    fun getFolder(account: LegacyAccountDto, folderId: Long): Folder? {
    suspend fun getFolder(account: LegacyAccountDto, folderId: Long): Folder? {
        val messageStore = messageStoreManager.getMessageStore(account)
        val outboxFolderId = outboxFolderManager.getOutboxFolderId(account.id)
        return messageStore.getFolder(folderId) { folder ->
            Folder(
                id = folder.id,
                name = folder.name,
                type = folderTypeOf(account, folder.id),
                type = folder.getFolderType(account, outboxFolderId),
                isLocalOnly = folder.isLocalOnly,
            )
        }
    }

    fun getFolderDetails(account: LegacyAccountDto, folderId: Long): FolderDetails? {
    suspend fun getFolderDetails(account: LegacyAccountDto, folderId: Long): FolderDetails? {
        val messageStore = messageStoreManager.getMessageStore(account)
        val outboxFolderId = outboxFolderManager.getOutboxFolderId(account.id)
        return messageStore.getFolder(folderId) { folder ->
            FolderDetails(
                folder = Folder(
                    id = folder.id,
                    name = folder.name,
                    type = folderTypeOf(account, folder.id),
                    type = folder.getFolderType(account, outboxFolderId),
                    isLocalOnly = folder.isLocalOnly,
                ),
                isInTopGroup = folder.isInTopGroup,
@@ -187,6 +192,13 @@ class FolderRepository(
            .distinctUntilChanged()
            .flowOn(ioDispatcher)
    }

    private fun FolderDetailsAccessor.getFolderType(account: LegacyAccountDto, outboxFolderId: Long): FolderType =
        if (id == outboxFolderId) {
            FolderType.OUTBOX
        } else {
            folderTypeOf(account, id)
        }
}

data class RemoteFolderDetails(
+0 −1
Original line number Diff line number Diff line
@@ -7,7 +7,6 @@ object FolderTypeMapper {

    fun folderTypeOf(account: LegacyAccountDto, folderId: Long) = when (folderId) {
        account.inboxFolderId -> FolderType.INBOX
        account.outboxFolderId -> FolderType.OUTBOX
        account.sentFolderId -> FolderType.SENT
        account.trashFolderId -> FolderType.TRASH
        account.draftsFolderId -> FolderType.DRAFTS