Add fast path to MessageListRepository
to bypass an empty cache
This commit is contained in:
parent
d091ccf317
commit
034eac8847
5 changed files with 28 additions and 12 deletions
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
@ -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(
|
||||
"""
|
||||
|
|
Loading…
Reference in a new issue