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

Commit f2f8e4d0 authored by cketti's avatar cketti
Browse files

Remove FolderRepositoryManager

Instead we use one FolderRepository instance and pass Account as parameter to individual functions.
parent e0fe1a2d
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@ import com.fsck.k9.backend.BackendManager
import com.fsck.k9.backend.api.BackendPusher
import com.fsck.k9.backend.api.BackendPusherCallback
import com.fsck.k9.controller.MessagingController
import com.fsck.k9.mailstore.FolderRepositoryManager
import com.fsck.k9.mailstore.FolderRepository
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -20,11 +20,10 @@ internal class AccountPushController(
    private val backendManager: BackendManager,
    private val messagingController: MessagingController,
    private val preferences: Preferences,
    folderRepositoryManager: FolderRepositoryManager,
    private val folderRepository: FolderRepository,
    backgroundDispatcher: CoroutineDispatcher = Dispatchers.IO,
    private val account: Account
) {
    private val folderRepository = folderRepositoryManager.getFolderRepository(account)
    private val coroutineScope = CoroutineScope(backgroundDispatcher)

    @Volatile
@@ -76,7 +75,7 @@ internal class AccountPushController(

    private fun startListeningForPushFolders() {
        coroutineScope.launch {
            folderRepository.getPushFoldersFlow().collect { remoteFolders ->
            folderRepository.getPushFoldersFlow(account).collect { remoteFolders ->
                val folderServerIds = remoteFolders.map { it.serverId }
                updatePushFolders(folderServerIds)
            }
+3 −3
Original line number Diff line number Diff line
@@ -4,12 +4,12 @@ import com.fsck.k9.Account
import com.fsck.k9.Preferences
import com.fsck.k9.backend.BackendManager
import com.fsck.k9.controller.MessagingController
import com.fsck.k9.mailstore.FolderRepositoryManager
import com.fsck.k9.mailstore.FolderRepository

internal class AccountPushControllerFactory(
    private val backendManager: BackendManager,
    private val messagingController: MessagingController,
    private val folderRepositoryManager: FolderRepositoryManager,
    private val folderRepository: FolderRepository,
    private val preferences: Preferences
) {
    fun create(account: Account): AccountPushController {
@@ -17,7 +17,7 @@ internal class AccountPushControllerFactory(
            backendManager,
            messagingController,
            preferences,
            folderRepositoryManager,
            folderRepository,
            account = account
        )
    }
+1 −1
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@ internal val controllerPushModule = module {
        AccountPushControllerFactory(
            backendManager = get(),
            messagingController = get(),
            folderRepositoryManager = get(),
            folderRepository = get(),
            preferences = get()
        )
    }
+2 −2
Original line number Diff line number Diff line
@@ -22,14 +22,14 @@ class AutoExpandFolderBackendFoldersRefreshListener(
    }

    private fun checkAutoExpandFolder() {
        val folderId = account.importedAutoExpandFolder?.let { folderRepository.getFolderId(it) }
        val folderId = account.importedAutoExpandFolder?.let { folderRepository.getFolderId(account, it) }
        if (folderId != null) {
            account.autoExpandFolderId = folderId
            return
        }

        account.autoExpandFolderId?.let { autoExpandFolderId ->
            if (!folderRepository.isFolderPresent(autoExpandFolderId)) {
            if (!folderRepository.isFolderPresent(account, autoExpandFolderId)) {
                account.autoExpandFolderId = null
            }
        }
+25 −26
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ import com.fsck.k9.mail.FolderType as RemoteFolderType
class FolderRepository(
    private val messageStoreManager: MessageStoreManager,
    private val accountManager: AccountManager,
    private val account: Account,
    private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO
) {
    private val sortForDisplay =
@@ -33,7 +32,7 @@ class FolderRepository(
            .thenByDescending { it.isInTopGroup }
            .thenBy(String.CASE_INSENSITIVE_ORDER) { it.folder.name }

    fun getDisplayFolders(displayMode: FolderMode?): List<DisplayFolder> {
    fun getDisplayFolders(account: Account, displayMode: FolderMode?): List<DisplayFolder> {
        val messageStore = messageStoreManager.getMessageStore(account)
        return messageStore.getDisplayFolders(
            displayMode = displayMode ?: account.folderDisplayMode,
@@ -43,7 +42,7 @@ class FolderRepository(
                folder = Folder(
                    id = folder.id,
                    name = folder.name,
                    type = folderTypeOf(folder.id),
                    type = folderTypeOf(account, folder.id),
                    isLocalOnly = folder.isLocalOnly
                ),
                isInTopGroup = folder.isInTopGroup,
@@ -53,26 +52,26 @@ class FolderRepository(
        }.sortedWith(sortForDisplay)
    }

    fun getFolder(folderId: Long): Folder? {
    fun getFolder(account: Account, folderId: Long): Folder? {
        val messageStore = messageStoreManager.getMessageStore(account)
        return messageStore.getFolder(folderId) { folder ->
            Folder(
                id = folder.id,
                name = folder.name,
                type = folderTypeOf(folder.id),
                type = folderTypeOf(account, folder.id),
                isLocalOnly = folder.isLocalOnly
            )
        }
    }

    fun getFolderDetails(folderId: Long): FolderDetails? {
    fun getFolderDetails(account: Account, folderId: Long): FolderDetails? {
        val messageStore = messageStoreManager.getMessageStore(account)
        return messageStore.getFolder(folderId) { folder ->
            FolderDetails(
                folder = Folder(
                    id = folder.id,
                    name = folder.name,
                    type = folderTypeOf(folder.id),
                    type = folderTypeOf(account, folder.id),
                    isLocalOnly = folder.isLocalOnly
                ),
                isInTopGroup = folder.isInTopGroup,
@@ -85,7 +84,7 @@ class FolderRepository(
        }
    }

    fun getRemoteFolders(): List<RemoteFolder> {
    fun getRemoteFolders(account: Account): List<RemoteFolder> {
        val messageStore = messageStoreManager.getMessageStore(account)
        return messageStore.getFolders(excludeLocalOnly = true) { folder ->
            RemoteFolder(
@@ -97,7 +96,7 @@ class FolderRepository(
        }
    }

    fun getRemoteFolderDetails(): List<RemoteFolderDetails> {
    fun getRemoteFolderDetails(account: Account): List<RemoteFolderDetails> {
        val messageStore = messageStoreManager.getMessageStore(account)
        return messageStore.getFolders(excludeLocalOnly = true) { folder ->
            RemoteFolderDetails(
@@ -117,21 +116,21 @@ class FolderRepository(
        }
    }

    fun getPushFoldersFlow(): Flow<List<RemoteFolder>> {
    fun getPushFoldersFlow(account: Account): Flow<List<RemoteFolder>> {
        return account.getFolderPushModeFlow()
            .flatMapLatest { pushMode ->
                getPushFoldersFlow(pushMode)
                getPushFoldersFlow(account, pushMode)
            }
    }

    private fun getPushFoldersFlow(folderMode: FolderMode): Flow<List<RemoteFolder>> {
    private fun getPushFoldersFlow(account: Account, folderMode: FolderMode): Flow<List<RemoteFolder>> {
        val messageStore = messageStoreManager.getMessageStore(account)
        return callbackFlow {
            send(getPushFolders(folderMode))
            send(getPushFolders(account, folderMode))

            val listener = FolderSettingsChangedListener {
                launch {
                    send(getPushFolders(folderMode))
                    send(getPushFolders(account, folderMode))
                }
            }
            messageStore.addFolderSettingsChangedListener(listener)
@@ -144,10 +143,10 @@ class FolderRepository(
            .flowOn(ioDispatcher)
    }

    private fun getPushFolders(folderMode: FolderMode): List<RemoteFolder> {
    private fun getPushFolders(account: Account, folderMode: FolderMode): List<RemoteFolder> {
        if (folderMode == FolderMode.NONE) return emptyList()

        return getRemoteFolderDetails()
        return getRemoteFolderDetails(account)
            .asSequence()
            .filter { folderDetails ->
                val pushClass = folderDetails.effectivePushClass
@@ -165,54 +164,54 @@ class FolderRepository(
            .toList()
    }

    fun getFolderServerId(folderId: Long): String? {
    fun getFolderServerId(account: Account, folderId: Long): String? {
        val messageStore = messageStoreManager.getMessageStore(account)
        return messageStore.getFolder(folderId) { folder ->
            folder.serverId
        }
    }

    fun getFolderId(folderServerId: String): Long? {
    fun getFolderId(account: Account, folderServerId: String): Long? {
        val messageStore = messageStoreManager.getMessageStore(account)
        return messageStore.getFolderId(folderServerId)
    }

    fun isFolderPresent(folderId: Long): Boolean {
    fun isFolderPresent(account: Account, folderId: Long): Boolean {
        val messageStore = messageStoreManager.getMessageStore(account)
        return messageStore.getFolder(folderId) { true } ?: false
    }

    fun updateFolderDetails(folderDetails: FolderDetails) {
    fun updateFolderDetails(account: Account, folderDetails: FolderDetails) {
        val messageStore = messageStoreManager.getMessageStore(account)
        messageStore.updateFolderSettings(folderDetails)
    }

    fun setIncludeInUnifiedInbox(folderId: Long, includeInUnifiedInbox: Boolean) {
    fun setIncludeInUnifiedInbox(account: Account, folderId: Long, includeInUnifiedInbox: Boolean) {
        val messageStore = messageStoreManager.getMessageStore(account)
        messageStore.setIncludeInUnifiedInbox(folderId, includeInUnifiedInbox)
    }

    fun setDisplayClass(folderId: Long, folderClass: FolderClass) {
    fun setDisplayClass(account: Account, folderId: Long, folderClass: FolderClass) {
        val messageStore = messageStoreManager.getMessageStore(account)
        messageStore.setDisplayClass(folderId, folderClass)
    }

    fun setSyncClass(folderId: Long, folderClass: FolderClass) {
    fun setSyncClass(account: Account, folderId: Long, folderClass: FolderClass) {
        val messageStore = messageStoreManager.getMessageStore(account)
        messageStore.setSyncClass(folderId, folderClass)
    }

    fun setPushClass(folderId: Long, folderClass: FolderClass) {
    fun setPushClass(account: Account, folderId: Long, folderClass: FolderClass) {
        val messageStore = messageStoreManager.getMessageStore(account)
        messageStore.setPushClass(folderId, folderClass)
    }

    fun setNotificationClass(folderId: Long, folderClass: FolderClass) {
    fun setNotificationClass(account: Account, folderId: Long, folderClass: FolderClass) {
        val messageStore = messageStoreManager.getMessageStore(account)
        messageStore.setNotificationClass(folderId, folderClass)
    }

    private fun folderTypeOf(folderId: Long) = when (folderId) {
    private fun folderTypeOf(account: Account, folderId: Long) = when (folderId) {
        account.inboxFolderId -> FolderType.INBOX
        account.outboxFolderId -> FolderType.OUTBOX
        account.sentFolderId -> FolderType.SENT
Loading