Loading app/core/src/main/java/com/fsck/k9/mailstore/FolderRepository.kt +94 −48 Original line number Diff line number Diff line Loading @@ -71,11 +71,92 @@ class FolderRepository( } fun getFolderDetails(folderId: Long): FolderDetails? { return getFolderDetails(selection = "id = ?", selectionArgs = arrayOf(folderId.toString())).firstOrNull() val database = localStoreProvider.getInstance(account).database return database.execute(false) { db -> db.query( "folders", arrayOf( "id", "server_id", "name", "top_group", "integrate", "poll_class", "display_class", "notify_class", "push_class", "local_only" ), "id = ?", arrayOf(folderId.toString()), null, null, null ).use { cursor -> cursor.map { val id = cursor.getLong(0) FolderDetails( folder = Folder( id = id, serverId = cursor.getString(1), name = cursor.getString(2), type = folderTypeOf(id), isLocalOnly = cursor.getInt(9) == 1 ), isInTopGroup = cursor.getInt(3) == 1, isIntegrate = cursor.getInt(4) == 1, syncClass = cursor.getStringOrNull(5).toFolderClass(), displayClass = cursor.getStringOrNull(6).toFolderClass(), notifyClass = cursor.getStringOrNull(7).toFolderClass(), pushClass = cursor.getStringOrNull(8).toFolderClass() ) } } }.firstOrNull() } fun getFolderDetails(): List<FolderDetails> { return getFolderDetails(selection = null, selectionArgs = null) fun getRemoteFolderDetails(): List<RemoteFolderDetails> { val database = localStoreProvider.getInstance(account).database return database.execute(false) { db -> db.query( "folders", arrayOf( "id", "server_id", "name", "type", "top_group", "integrate", "poll_class", "display_class", "notify_class", "push_class" ), "local_only = 0", null, null, null, null ).use { cursor -> cursor.map { val id = cursor.getLong(0) RemoteFolderDetails( folder = RemoteFolder( id = id, serverId = cursor.getString(1), name = cursor.getString(2), type = cursor.getString(3).toFolderType().toFolderType() ), isInTopGroup = cursor.getInt(4) == 1, isIntegrate = cursor.getInt(5) == 1, syncClass = cursor.getStringOrNull(6).toFolderClass(), displayClass = cursor.getStringOrNull(7).toFolderClass(), notifyClass = cursor.getStringOrNull(8).toFolderClass(), pushClass = cursor.getStringOrNull(9).toFolderClass() ) } } } } fun getFolderServerId(folderId: Long): String? { Loading Loading @@ -129,51 +210,6 @@ class FolderRepository( } } private fun getFolderDetails(selection: String?, selectionArgs: Array<String>?): List<FolderDetails> { val database = localStoreProvider.getInstance(account).database return database.execute(false) { db -> db.query( "folders", arrayOf( "id", "server_id", "name", "top_group", "integrate", "poll_class", "display_class", "notify_class", "push_class", "local_only" ), selection, selectionArgs, null, null, null ).use { cursor -> cursor.map { val id = cursor.getLong(0) FolderDetails( folder = Folder( id = id, serverId = cursor.getString(1), name = cursor.getString(2), type = folderTypeOf(id), isLocalOnly = cursor.getInt(9) == 1 ), isInTopGroup = cursor.getInt(3) == 1, isIntegrate = cursor.getInt(4) == 1, syncClass = cursor.getStringOrNull(5).toFolderClass(), displayClass = cursor.getStringOrNull(6).toFolderClass(), notifyClass = cursor.getStringOrNull(7).toFolderClass(), pushClass = cursor.getStringOrNull(8).toFolderClass() ) } } } } fun updateFolderDetails(folderDetails: FolderDetails) { val database = localStoreProvider.getInstance(account).database database.execute(false) { db -> Loading Loading @@ -312,6 +348,16 @@ data class FolderDetails( val pushClass: FolderClass ) data class RemoteFolderDetails( val folder: RemoteFolder, val isInTopGroup: Boolean, val isIntegrate: Boolean, val syncClass: FolderClass, val displayClass: FolderClass, val notifyClass: FolderClass, val pushClass: FolderClass ) data class DisplayFolder( val folder: Folder, val isInTopGroup: Boolean, Loading app/core/src/main/java/com/fsck/k9/preferences/FolderSettingsProvider.kt +4 −4 Original line number Diff line number Diff line Loading @@ -2,18 +2,18 @@ package com.fsck.k9.preferences import com.fsck.k9.Account import com.fsck.k9.mail.FolderClass import com.fsck.k9.mailstore.FolderDetails import com.fsck.k9.mailstore.FolderRepositoryManager import com.fsck.k9.mailstore.RemoteFolderDetails class FolderSettingsProvider(private val folderRepositoryManager: FolderRepositoryManager) { fun getFolderSettings(account: Account): List<FolderSettings> { val folderRepository = folderRepositoryManager.getFolderRepository(account) return folderRepository.getFolderDetails() return folderRepository.getRemoteFolderDetails() .filterNot { it.containsOnlyDefaultValues() } .map { it.toFolderSettings() } } private fun FolderDetails.containsOnlyDefaultValues(): Boolean { private fun RemoteFolderDetails.containsOnlyDefaultValues(): Boolean { return isInTopGroup == getDefaultValue("inTopGroup") && isIntegrate == getDefaultValue("integrate") && syncClass == getDefaultValue("syncMode") && Loading @@ -29,7 +29,7 @@ class FolderSettingsProvider(private val folderRepositoryManager: FolderReposito return setting.defaultValue } private fun FolderDetails.toFolderSettings(): FolderSettings { private fun RemoteFolderDetails.toFolderSettings(): FolderSettings { return FolderSettings( folder.serverId, isInTopGroup, Loading Loading
app/core/src/main/java/com/fsck/k9/mailstore/FolderRepository.kt +94 −48 Original line number Diff line number Diff line Loading @@ -71,11 +71,92 @@ class FolderRepository( } fun getFolderDetails(folderId: Long): FolderDetails? { return getFolderDetails(selection = "id = ?", selectionArgs = arrayOf(folderId.toString())).firstOrNull() val database = localStoreProvider.getInstance(account).database return database.execute(false) { db -> db.query( "folders", arrayOf( "id", "server_id", "name", "top_group", "integrate", "poll_class", "display_class", "notify_class", "push_class", "local_only" ), "id = ?", arrayOf(folderId.toString()), null, null, null ).use { cursor -> cursor.map { val id = cursor.getLong(0) FolderDetails( folder = Folder( id = id, serverId = cursor.getString(1), name = cursor.getString(2), type = folderTypeOf(id), isLocalOnly = cursor.getInt(9) == 1 ), isInTopGroup = cursor.getInt(3) == 1, isIntegrate = cursor.getInt(4) == 1, syncClass = cursor.getStringOrNull(5).toFolderClass(), displayClass = cursor.getStringOrNull(6).toFolderClass(), notifyClass = cursor.getStringOrNull(7).toFolderClass(), pushClass = cursor.getStringOrNull(8).toFolderClass() ) } } }.firstOrNull() } fun getFolderDetails(): List<FolderDetails> { return getFolderDetails(selection = null, selectionArgs = null) fun getRemoteFolderDetails(): List<RemoteFolderDetails> { val database = localStoreProvider.getInstance(account).database return database.execute(false) { db -> db.query( "folders", arrayOf( "id", "server_id", "name", "type", "top_group", "integrate", "poll_class", "display_class", "notify_class", "push_class" ), "local_only = 0", null, null, null, null ).use { cursor -> cursor.map { val id = cursor.getLong(0) RemoteFolderDetails( folder = RemoteFolder( id = id, serverId = cursor.getString(1), name = cursor.getString(2), type = cursor.getString(3).toFolderType().toFolderType() ), isInTopGroup = cursor.getInt(4) == 1, isIntegrate = cursor.getInt(5) == 1, syncClass = cursor.getStringOrNull(6).toFolderClass(), displayClass = cursor.getStringOrNull(7).toFolderClass(), notifyClass = cursor.getStringOrNull(8).toFolderClass(), pushClass = cursor.getStringOrNull(9).toFolderClass() ) } } } } fun getFolderServerId(folderId: Long): String? { Loading Loading @@ -129,51 +210,6 @@ class FolderRepository( } } private fun getFolderDetails(selection: String?, selectionArgs: Array<String>?): List<FolderDetails> { val database = localStoreProvider.getInstance(account).database return database.execute(false) { db -> db.query( "folders", arrayOf( "id", "server_id", "name", "top_group", "integrate", "poll_class", "display_class", "notify_class", "push_class", "local_only" ), selection, selectionArgs, null, null, null ).use { cursor -> cursor.map { val id = cursor.getLong(0) FolderDetails( folder = Folder( id = id, serverId = cursor.getString(1), name = cursor.getString(2), type = folderTypeOf(id), isLocalOnly = cursor.getInt(9) == 1 ), isInTopGroup = cursor.getInt(3) == 1, isIntegrate = cursor.getInt(4) == 1, syncClass = cursor.getStringOrNull(5).toFolderClass(), displayClass = cursor.getStringOrNull(6).toFolderClass(), notifyClass = cursor.getStringOrNull(7).toFolderClass(), pushClass = cursor.getStringOrNull(8).toFolderClass() ) } } } } fun updateFolderDetails(folderDetails: FolderDetails) { val database = localStoreProvider.getInstance(account).database database.execute(false) { db -> Loading Loading @@ -312,6 +348,16 @@ data class FolderDetails( val pushClass: FolderClass ) data class RemoteFolderDetails( val folder: RemoteFolder, val isInTopGroup: Boolean, val isIntegrate: Boolean, val syncClass: FolderClass, val displayClass: FolderClass, val notifyClass: FolderClass, val pushClass: FolderClass ) data class DisplayFolder( val folder: Folder, val isInTopGroup: Boolean, Loading
app/core/src/main/java/com/fsck/k9/preferences/FolderSettingsProvider.kt +4 −4 Original line number Diff line number Diff line Loading @@ -2,18 +2,18 @@ package com.fsck.k9.preferences import com.fsck.k9.Account import com.fsck.k9.mail.FolderClass import com.fsck.k9.mailstore.FolderDetails import com.fsck.k9.mailstore.FolderRepositoryManager import com.fsck.k9.mailstore.RemoteFolderDetails class FolderSettingsProvider(private val folderRepositoryManager: FolderRepositoryManager) { fun getFolderSettings(account: Account): List<FolderSettings> { val folderRepository = folderRepositoryManager.getFolderRepository(account) return folderRepository.getFolderDetails() return folderRepository.getRemoteFolderDetails() .filterNot { it.containsOnlyDefaultValues() } .map { it.toFolderSettings() } } private fun FolderDetails.containsOnlyDefaultValues(): Boolean { private fun RemoteFolderDetails.containsOnlyDefaultValues(): Boolean { return isInTopGroup == getDefaultValue("inTopGroup") && isIntegrate == getDefaultValue("integrate") && syncClass == getDefaultValue("syncMode") && Loading @@ -29,7 +29,7 @@ class FolderSettingsProvider(private val folderRepositoryManager: FolderReposito return setting.defaultValue } private fun FolderDetails.toFolderSettings(): FolderSettings { private fun RemoteFolderDetails.toFolderSettings(): FolderSettings { return FolderSettings( folder.serverId, isInTopGroup, Loading