diff --git a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/legacy/FoldersViewModel.kt b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/legacy/FoldersViewModel.kt index e106b7bc1f..6b69c356a2 100644 --- a/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/legacy/FoldersViewModel.kt +++ b/feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/legacy/FoldersViewModel.kt @@ -5,9 +5,9 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.asLiveData import androidx.lifecycle.viewModelScope import app.k9mail.legacy.account.Account -import app.k9mail.legacy.mailstore.DisplayFolderRepository import app.k9mail.legacy.message.controller.MessageCountsProvider import app.k9mail.legacy.search.SearchAccount +import app.k9mail.legacy.ui.folder.DisplayFolderRepository import app.k9mail.legacy.ui.folder.DisplayUnifiedInbox import app.k9mail.legacy.ui.folder.FolderList import kotlinx.coroutines.CoroutineDispatcher diff --git a/legacy/core/src/main/java/com/fsck/k9/mailstore/KoinModule.kt b/legacy/core/src/main/java/com/fsck/k9/mailstore/KoinModule.kt index d1917b4bbc..3d626b5986 100644 --- a/legacy/core/src/main/java/com/fsck/k9/mailstore/KoinModule.kt +++ b/legacy/core/src/main/java/com/fsck/k9/mailstore/KoinModule.kt @@ -1,6 +1,5 @@ package com.fsck.k9.mailstore -import app.k9mail.legacy.mailstore.DisplayFolderRepository import app.k9mail.legacy.mailstore.FolderRepository import app.k9mail.legacy.mailstore.MessageListRepository import app.k9mail.legacy.mailstore.MessageStoreManager @@ -16,12 +15,6 @@ val mailStoreModule = module { accountManager = get(), ) } - single { - DisplayFolderRepository( - messageStoreManager = get(), - accountManager = get(), - ) - } single { MessageViewInfoExtractorFactory(get(), get(), get()) } single { StorageManager.getInstance(get()) } single { SpecialFolderSelectionStrategy() } diff --git a/legacy/mailstore/src/main/java/app/k9mail/legacy/mailstore/DisplayFolderRepository.kt b/legacy/ui/folder/src/main/java/app/k9mail/legacy/ui/folder/DisplayFolderRepository.kt similarity index 87% rename from legacy/mailstore/src/main/java/app/k9mail/legacy/mailstore/DisplayFolderRepository.kt rename to legacy/ui/folder/src/main/java/app/k9mail/legacy/ui/folder/DisplayFolderRepository.kt index ed5bf840b3..f0d4815802 100644 --- a/legacy/mailstore/src/main/java/app/k9mail/legacy/mailstore/DisplayFolderRepository.kt +++ b/legacy/ui/folder/src/main/java/app/k9mail/legacy/ui/folder/DisplayFolderRepository.kt @@ -1,17 +1,19 @@ -package app.k9mail.legacy.mailstore +package app.k9mail.legacy.ui.folder import app.k9mail.core.mail.folder.api.Folder import app.k9mail.core.mail.folder.api.FolderType import app.k9mail.legacy.account.Account import app.k9mail.legacy.account.Account.FolderMode import app.k9mail.legacy.account.AccountManager -import app.k9mail.legacy.di.DI import app.k9mail.legacy.folder.DisplayFolder -import app.k9mail.legacy.mailstore.FolderTypeMapper.folderTypeOf +import app.k9mail.legacy.mailstore.FolderSettingsChangedListener +import app.k9mail.legacy.mailstore.FolderTypeMapper +import app.k9mail.legacy.mailstore.MessageStoreManager import app.k9mail.legacy.message.controller.MessagingControllerRegistry import app.k9mail.legacy.message.controller.SimpleMessagingListener import kotlin.coroutines.CoroutineContext import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.channels.trySendBlocking @@ -24,8 +26,9 @@ import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map class DisplayFolderRepository( - private val messageStoreManager: MessageStoreManager, private val accountManager: AccountManager, + private val messagingController: MessagingControllerRegistry, + private val messageStoreManager: MessageStoreManager, private val coroutineContext: CoroutineContext = Dispatchers.IO, ) { private val sortForDisplay = @@ -35,7 +38,7 @@ class DisplayFolderRepository( .thenByDescending { it.isInTopGroup } .thenBy(String.CASE_INSENSITIVE_ORDER) { it.folder.name } - private fun getDisplayFolders(account: Account, displayMode: FolderMode?): List { + private fun getDisplayFolders(account: Account, displayMode: Account.FolderMode?): List { val messageStore = messageStoreManager.getMessageStore(account.uuid) return messageStore.getDisplayFolders( displayMode = displayMode ?: account.folderDisplayMode, @@ -45,7 +48,7 @@ class DisplayFolderRepository( folder = Folder( id = folder.id, name = folder.name, - type = folderTypeOf(account, folder.id), + type = FolderTypeMapper.folderTypeOf(account, folder.id), isLocalOnly = folder.isLocalOnly, ), isInTopGroup = folder.isInTopGroup, @@ -55,8 +58,7 @@ class DisplayFolderRepository( }.sortedWith(sortForDisplay) } - fun getDisplayFoldersFlow(account: Account, displayMode: FolderMode): Flow> { - val messagingController = DI.get() + fun getDisplayFoldersFlow(account: Account, displayMode: Account.FolderMode): Flow> { val messageStore = messageStoreManager.getMessageStore(account.uuid) return callbackFlow { @@ -85,6 +87,7 @@ class DisplayFolderRepository( .flowOn(coroutineContext) } + @OptIn(ExperimentalCoroutinesApi::class) fun getDisplayFoldersFlow(accountUuid: String): Flow> { return accountManager.getAccountFlow(accountUuid) .map { latestAccount -> diff --git a/legacy/ui/folder/src/main/java/app/k9mail/legacy/ui/folder/KoinModule.kt b/legacy/ui/folder/src/main/java/app/k9mail/legacy/ui/folder/KoinModule.kt new file mode 100644 index 0000000000..70a212104d --- /dev/null +++ b/legacy/ui/folder/src/main/java/app/k9mail/legacy/ui/folder/KoinModule.kt @@ -0,0 +1,13 @@ +package app.k9mail.legacy.ui.folder + +import org.koin.dsl.module + +val uiFolderModule = module { + single { + DisplayFolderRepository( + accountManager = get(), + messagingController = get(), + messageStoreManager = get(), + ) + } +} diff --git a/legacy/ui/legacy/src/main/java/com/fsck/k9/UiKoinModules.kt b/legacy/ui/legacy/src/main/java/com/fsck/k9/UiKoinModules.kt index 73530e9f57..e0737e7e18 100644 --- a/legacy/ui/legacy/src/main/java/com/fsck/k9/UiKoinModules.kt +++ b/legacy/ui/legacy/src/main/java/com/fsck/k9/UiKoinModules.kt @@ -2,6 +2,7 @@ package com.fsck.k9 import app.k9mail.feature.account.oauth.featureAccountOAuthModule import app.k9mail.feature.launcher.di.featureLauncherModule +import app.k9mail.legacy.ui.folder.uiFolderModule import com.fsck.k9.account.accountModule import com.fsck.k9.activity.activityModule import com.fsck.k9.contacts.contactsModule @@ -26,6 +27,7 @@ val uiModules = listOf( uiBaseModule, activityModule, uiModule, + uiFolderModule, settingsUiModule, endToEndUiModule, foldersUiModule, diff --git a/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/choosefolder/ChooseFolderViewModel.kt b/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/choosefolder/ChooseFolderViewModel.kt index f023b0be25..5e09b2b87e 100644 --- a/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/choosefolder/ChooseFolderViewModel.kt +++ b/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/choosefolder/ChooseFolderViewModel.kt @@ -7,7 +7,7 @@ import androidx.lifecycle.viewModelScope import app.k9mail.legacy.account.Account import app.k9mail.legacy.account.Account.FolderMode import app.k9mail.legacy.folder.DisplayFolder -import app.k9mail.legacy.mailstore.DisplayFolderRepository +import app.k9mail.legacy.ui.folder.DisplayFolderRepository import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.flatMapLatest diff --git a/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/managefolders/ManageFoldersViewModel.kt b/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/managefolders/ManageFoldersViewModel.kt index 87e2b67b2c..96d5e5ae85 100644 --- a/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/managefolders/ManageFoldersViewModel.kt +++ b/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/managefolders/ManageFoldersViewModel.kt @@ -5,7 +5,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.asLiveData import app.k9mail.legacy.account.Account import app.k9mail.legacy.folder.DisplayFolder -import app.k9mail.legacy.mailstore.DisplayFolderRepository +import app.k9mail.legacy.ui.folder.DisplayFolderRepository class ManageFoldersViewModel( private val folderRepository: DisplayFolderRepository,