Loading app/core/src/main/java/com/fsck/k9/controller/KoinModule.kt +2 −1 Original line number Diff line number Diff line Loading @@ -31,7 +31,8 @@ val controllerModule = module { DefaultMessageCountsProvider( preferences = get(), accountSearchConditions = get(), localStoreProvider = get() localStoreProvider = get(), messageStoreManager = get() ) } } app/core/src/main/java/com/fsck/k9/controller/MessageCountsProvider.kt +10 −6 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ import com.fsck.k9.Account import com.fsck.k9.Preferences import com.fsck.k9.mail.MessagingException import com.fsck.k9.mailstore.LocalStoreProvider import com.fsck.k9.mailstore.MessageStoreManager import com.fsck.k9.search.AccountSearchConditions import com.fsck.k9.search.LocalSearch import com.fsck.k9.search.SearchAccount Loading @@ -21,7 +22,8 @@ data class MessageCounts(val unread: Int, val starred: Int) internal class DefaultMessageCountsProvider( private val preferences: Preferences, private val accountSearchConditions: AccountSearchConditions, private val localStoreProvider: LocalStoreProvider private val localStoreProvider: LocalStoreProvider, private val messageStoreManager: MessageStoreManager ) : MessageCountsProvider { override fun getMessageCounts(account: Account): MessageCounts { return try { Loading Loading @@ -55,11 +57,13 @@ internal class DefaultMessageCountsProvider( override fun getUnreadMessageCount(account: Account, folderId: Long): Int { return try { val localStore = localStoreProvider.getInstance(account) val localFolder = localStore.getFolder(folderId) localFolder.unreadMessageCount } catch (e: MessagingException) { val messageStore = messageStoreManager.getMessageStore(account) return if (folderId == account.outboxFolderId) { messageStore.getMessageCount(folderId) } else { messageStore.getUnreadMessageCount(folderId) } } catch (e: Exception) { Timber.e(e, "Unable to getUnreadMessageCount for account: %s, folder: %d", account, folderId) 0 } Loading app/core/src/main/java/com/fsck/k9/mailstore/MessageStore.kt +5 −0 Original line number Diff line number Diff line Loading @@ -221,6 +221,11 @@ interface MessageStore { */ fun getMessageCount(folderId: Long): Int /** * Retrieve the number of unread messages in a folder. */ fun getUnreadMessageCount(folderId: Long): Int /** * Update a folder's name and type. */ Loading app/storage/src/main/java/com/fsck/k9/storage/messages/K9MessageStore.kt +4 −0 Original line number Diff line number Diff line Loading @@ -176,6 +176,10 @@ class K9MessageStore( return retrieveFolderOperations.getMessageCount(folderId) } override fun getUnreadMessageCount(folderId: Long): Int { return retrieveFolderOperations.getUnreadMessageCount(folderId) } override fun getSize(): Long { return databaseOperations.getSize() } Loading app/storage/src/main/java/com/fsck/k9/storage/messages/RetrieveFolderOperations.kt +11 −0 Original line number Diff line number Diff line Loading @@ -159,6 +159,17 @@ $displayModeSelection } } fun getUnreadMessageCount(folderId: Long): Int { return lockableDatabase.execute(false) { db -> db.rawQuery( "SELECT COUNT(id) FROM messages WHERE empty = 0 AND deleted = 0 AND read = 0 AND folder_id = ?", arrayOf(folderId.toString()) ).use { cursor -> if (cursor.moveToFirst()) cursor.getInt(0) else 0 } } } fun hasMoreMessages(folderId: Long): MoreMessages { return getFolder(folderId) { it.moreMessages } ?: throw FolderNotFoundException(folderId) } Loading Loading
app/core/src/main/java/com/fsck/k9/controller/KoinModule.kt +2 −1 Original line number Diff line number Diff line Loading @@ -31,7 +31,8 @@ val controllerModule = module { DefaultMessageCountsProvider( preferences = get(), accountSearchConditions = get(), localStoreProvider = get() localStoreProvider = get(), messageStoreManager = get() ) } }
app/core/src/main/java/com/fsck/k9/controller/MessageCountsProvider.kt +10 −6 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ import com.fsck.k9.Account import com.fsck.k9.Preferences import com.fsck.k9.mail.MessagingException import com.fsck.k9.mailstore.LocalStoreProvider import com.fsck.k9.mailstore.MessageStoreManager import com.fsck.k9.search.AccountSearchConditions import com.fsck.k9.search.LocalSearch import com.fsck.k9.search.SearchAccount Loading @@ -21,7 +22,8 @@ data class MessageCounts(val unread: Int, val starred: Int) internal class DefaultMessageCountsProvider( private val preferences: Preferences, private val accountSearchConditions: AccountSearchConditions, private val localStoreProvider: LocalStoreProvider private val localStoreProvider: LocalStoreProvider, private val messageStoreManager: MessageStoreManager ) : MessageCountsProvider { override fun getMessageCounts(account: Account): MessageCounts { return try { Loading Loading @@ -55,11 +57,13 @@ internal class DefaultMessageCountsProvider( override fun getUnreadMessageCount(account: Account, folderId: Long): Int { return try { val localStore = localStoreProvider.getInstance(account) val localFolder = localStore.getFolder(folderId) localFolder.unreadMessageCount } catch (e: MessagingException) { val messageStore = messageStoreManager.getMessageStore(account) return if (folderId == account.outboxFolderId) { messageStore.getMessageCount(folderId) } else { messageStore.getUnreadMessageCount(folderId) } } catch (e: Exception) { Timber.e(e, "Unable to getUnreadMessageCount for account: %s, folder: %d", account, folderId) 0 } Loading
app/core/src/main/java/com/fsck/k9/mailstore/MessageStore.kt +5 −0 Original line number Diff line number Diff line Loading @@ -221,6 +221,11 @@ interface MessageStore { */ fun getMessageCount(folderId: Long): Int /** * Retrieve the number of unread messages in a folder. */ fun getUnreadMessageCount(folderId: Long): Int /** * Update a folder's name and type. */ Loading
app/storage/src/main/java/com/fsck/k9/storage/messages/K9MessageStore.kt +4 −0 Original line number Diff line number Diff line Loading @@ -176,6 +176,10 @@ class K9MessageStore( return retrieveFolderOperations.getMessageCount(folderId) } override fun getUnreadMessageCount(folderId: Long): Int { return retrieveFolderOperations.getUnreadMessageCount(folderId) } override fun getSize(): Long { return databaseOperations.getSize() } Loading
app/storage/src/main/java/com/fsck/k9/storage/messages/RetrieveFolderOperations.kt +11 −0 Original line number Diff line number Diff line Loading @@ -159,6 +159,17 @@ $displayModeSelection } } fun getUnreadMessageCount(folderId: Long): Int { return lockableDatabase.execute(false) { db -> db.rawQuery( "SELECT COUNT(id) FROM messages WHERE empty = 0 AND deleted = 0 AND read = 0 AND folder_id = ?", arrayOf(folderId.toString()) ).use { cursor -> if (cursor.moveToFirst()) cursor.getInt(0) else 0 } } } fun hasMoreMessages(folderId: Long): MoreMessages { return getFolder(folderId) { it.moreMessages } ?: throw FolderNotFoundException(folderId) } Loading