mirror of
https://github.com/thunderbird/thunderbird-android.git
synced 2024-09-20 12:12:15 +02:00
Rewrite MessageCountsProvider.getUnreadMessageCount()
to not use LocalStore
This commit is contained in:
parent
4cc1643643
commit
5e17829436
@ -31,7 +31,8 @@ val controllerModule = module {
|
||||
DefaultMessageCountsProvider(
|
||||
preferences = get(),
|
||||
accountSearchConditions = get(),
|
||||
localStoreProvider = get()
|
||||
localStoreProvider = get(),
|
||||
messageStoreManager = get()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
@ -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 {
|
||||
@ -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
|
||||
}
|
||||
|
@ -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.
|
||||
*/
|
||||
|
@ -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()
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -351,6 +351,34 @@ class RetrieveFolderOperationsTest : RobolectricTest() {
|
||||
assertThat(result).isEqualTo(2)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `get unread message count from empty folder`() {
|
||||
val folderId = sqliteDatabase.createFolder()
|
||||
|
||||
val result = retrieveFolderOperations.getUnreadMessageCount(folderId)
|
||||
|
||||
assertThat(result).isEqualTo(0)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `get unread message count from non-existent folder`() {
|
||||
val result = retrieveFolderOperations.getUnreadMessageCount(23)
|
||||
|
||||
assertThat(result).isEqualTo(0)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `get unread message count from non-empty folder`() {
|
||||
val folderId = sqliteDatabase.createFolder()
|
||||
sqliteDatabase.createMessage(folderId = folderId, read = false)
|
||||
sqliteDatabase.createMessage(folderId = folderId, read = false)
|
||||
sqliteDatabase.createMessage(folderId = folderId, read = true)
|
||||
|
||||
val result = retrieveFolderOperations.getUnreadMessageCount(folderId)
|
||||
|
||||
assertThat(result).isEqualTo(2)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `get 'more messages' value from non-existent folder`() {
|
||||
try {
|
||||
|
Loading…
Reference in New Issue
Block a user