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() { private fun notifyChange() {
val messageListRepository = DI.get<MessageListRepository>() val messageListRepository = DI.get<MessageListRepository>()
messageListRepository.notifyMessageListChanged(accountUuid) messageListRepository.notifyMessageListChanged(accountUuid)

View File

@ -37,7 +37,7 @@ class MessageListRepository(
val messageStore = messageStoreManager.getMessageStore(accountUuid) val messageStore = messageStoreManager.getMessageStore(accountUuid)
val cache = MessageListCache.getCache(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) return messageStore.getMessages(selection, selectionArgs, sortOrder, mapper)
} }
@ -54,7 +54,7 @@ class MessageListRepository(
val messageStore = messageStoreManager.getMessageStore(accountUuid) val messageStore = messageStoreManager.getMessageStore(accountUuid)
val cache = MessageListCache.getCache(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) return messageStore.getThreadedMessages(selection, selectionArgs, sortOrder, mapper)
} }
@ -70,7 +70,7 @@ class MessageListRepository(
val messageStore = messageStoreManager.getMessageStore(accountUuid) val messageStore = messageStoreManager.getMessageStore(accountUuid)
val cache = MessageListCache.getCache(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) return messageStore.getThread(threadId, sortOrder, mapper)
} }
} }

View File

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

View File

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

View File

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