0
0
mirror of https://github.com/thunderbird/thunderbird-android.git synced 2024-09-20 20:13:04 +02:00

Add fast path to MessageListRepository to bypass an empty cache

This commit is contained in:
cketti 2022-09-01 16:07:00 +02:00
parent d091ccf317
commit 034eac8847
5 changed files with 28 additions and 12 deletions

View File

@ -114,6 +114,22 @@ class MessageListCache private constructor(private val accountUuid: String) {
}
}
fun isEmpty(): Boolean {
return isMessageCacheEmpty() && isThreadCacheEmpty() && isHiddenMessageCacheEmpty()
}
private fun isMessageCacheEmpty(): Boolean {
return synchronized(messageCache) { messageCache.isEmpty() }
}
private fun isThreadCacheEmpty(): Boolean {
return synchronized(threadCache) { threadCache.isEmpty() }
}
private fun isHiddenMessageCacheEmpty(): Boolean {
return synchronized(hiddenMessageCache) { hiddenMessageCache.isEmpty() }
}
private fun notifyChange() {
val messageListRepository = DI.get<MessageListRepository>()
messageListRepository.notifyMessageListChanged(accountUuid)

View File

@ -37,7 +37,7 @@ class MessageListRepository(
val messageStore = messageStoreManager.getMessageStore(accountUuid)
val cache = MessageListCache.getCache(accountUuid)
val mapper = CacheAwareMessageMapper(cache, messageMapper)
val mapper = if (cache.isEmpty()) messageMapper else CacheAwareMessageMapper(cache, messageMapper)
return messageStore.getMessages(selection, selectionArgs, sortOrder, mapper)
}
@ -54,7 +54,7 @@ class MessageListRepository(
val messageStore = messageStoreManager.getMessageStore(accountUuid)
val cache = MessageListCache.getCache(accountUuid)
val mapper = CacheAwareMessageMapper(cache, messageMapper)
val mapper = if (cache.isEmpty()) messageMapper else CacheAwareMessageMapper(cache, messageMapper)
return messageStore.getThreadedMessages(selection, selectionArgs, sortOrder, mapper)
}
@ -70,7 +70,7 @@ class MessageListRepository(
val messageStore = messageStoreManager.getMessageStore(accountUuid)
val cache = MessageListCache.getCache(accountUuid)
val mapper = CacheAwareMessageMapper(cache, messageMapper)
val mapper = if (cache.isEmpty()) messageMapper else CacheAwareMessageMapper(cache, messageMapper)
return messageStore.getThread(threadId, sortOrder, mapper)
}
}

View File

@ -127,7 +127,7 @@ interface MessageStore {
selection: String,
selectionArgs: Array<String>,
sortOrder: String,
messageMapper: MessageMapper<T?>
messageMapper: MessageMapper<out T?>
): List<T>
/**
@ -137,13 +137,13 @@ interface MessageStore {
selection: String,
selectionArgs: Array<String>,
sortOrder: String,
messageMapper: MessageMapper<T?>
messageMapper: MessageMapper<out T?>
): List<T>
/**
* Retrieve list of messages in a thread.
*/
fun <T> getThread(threadId: Long, sortOrder: String, messageMapper: MessageMapper<T?>): List<T>
fun <T> getThread(threadId: Long, sortOrder: String, messageMapper: MessageMapper<out T?>): List<T>
/**
* Retrieve the date of the oldest message in the given folder.

View File

@ -106,7 +106,7 @@ class K9MessageStore(
selection: String,
selectionArgs: Array<String>,
sortOrder: String,
messageMapper: MessageMapper<T?>
messageMapper: MessageMapper<out T?>
): List<T> {
return retrieveMessageListOperations.getMessages(selection, selectionArgs, sortOrder, messageMapper)
}
@ -115,12 +115,12 @@ class K9MessageStore(
selection: String,
selectionArgs: Array<String>,
sortOrder: String,
messageMapper: MessageMapper<T?>
messageMapper: MessageMapper<out T?>
): List<T> {
return retrieveMessageListOperations.getThreadedMessages(selection, selectionArgs, sortOrder, messageMapper)
}
override fun <T> getThread(threadId: Long, sortOrder: String, messageMapper: MessageMapper<T?>): List<T> {
override fun <T> getThread(threadId: Long, sortOrder: String, messageMapper: MessageMapper<out T?>): List<T> {
return retrieveMessageListOperations.getThread(threadId, sortOrder, messageMapper)
}

View File

@ -16,7 +16,7 @@ internal class RetrieveMessageListOperations(private val lockableDatabase: Locka
selection: String,
selectionArgs: Array<String>,
sortOrder: String,
mapper: MessageMapper<T?>
mapper: MessageMapper<out T?>
): List<T> {
return lockableDatabase.execute(false) { database ->
database.rawQuery(
@ -66,7 +66,7 @@ internal class RetrieveMessageListOperations(private val lockableDatabase: Locka
selection: String,
selectionArgs: Array<String>,
sortOrder: String,
mapper: MessageMapper<T?>
mapper: MessageMapper<out T?>
): List<T> {
val orderBy = SqlQueryBuilder.addPrefixToSelection(AGGREGATED_MESSAGES_COLUMNS, "aggregated.", sortOrder)
@ -142,7 +142,7 @@ internal class RetrieveMessageListOperations(private val lockableDatabase: Locka
}
}
fun <T> getThread(threadId: Long, sortOrder: String, mapper: MessageMapper<T?>): List<T> {
fun <T> getThread(threadId: Long, sortOrder: String, mapper: MessageMapper<out T?>): List<T> {
return lockableDatabase.execute(false) { database ->
database.rawQuery(
"""