Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit ad43f3b8 authored by cketti's avatar cketti Committed by GitHub
Browse files

Merge pull request #6268 from thundernest/cache_fast_path

Add fast path to `MessageListRepository` to bypass an empty cache
parents d091ccf3 034eac88
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -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)
+3 −3
Original line number Diff line number Diff line
@@ -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)
    }
}
+3 −3
Original line number Diff line number Diff line
@@ -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.
+3 −3
Original line number Diff line number Diff line
@@ -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)
    }

+3 −3
Original line number Diff line number Diff line
@@ -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(
                """