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:
parent
d091ccf317
commit
034eac8847
@ -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)
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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.
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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(
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user