Loading app/storage/src/main/java/com/fsck/k9/storage/messages/MoveMessageOperations.kt +3 −3 Original line number Diff line number Diff line Loading @@ -20,7 +20,7 @@ internal class MoveMessageOperations( return database.execute(true) { database -> val threadInfo = threadMessageOperations.createOrUpdateParentThreadEntries(database, messageId, destinationFolderId) val destinationMessageId = createMessageEntry(database, messageId, destinationFolderId, threadInfo) threadMessageOperations.createOrUpdateThreadEntry(database, destinationMessageId, threadInfo) threadMessageOperations.createThreadEntryIfNecessary(database, destinationMessageId, threadInfo) convertOriginalMessageEntryToPlaceholderEntry(database, messageId) Loading @@ -32,7 +32,7 @@ internal class MoveMessageOperations( database: SQLiteDatabase, messageId: Long, destinationFolderId: Long, threadInfo: ThreadInfo threadInfo: ThreadInfo? ): Long { val destinationUid = K9.LOCAL_UID_PREFIX + UUID.randomUUID().toString() Loading Loading @@ -81,7 +81,7 @@ internal class MoveMessageOperations( } } val placeHolderMessageId = threadInfo.messageId val placeHolderMessageId = threadInfo?.messageId return if (placeHolderMessageId != null) { database.update("messages", contentValues, "id = ?", arrayOf(placeHolderMessageId.toString())) placeHolderMessageId Loading app/storage/src/main/java/com/fsck/k9/storage/messages/SaveMessageOperations.kt +3 −3 Original line number Diff line number Diff line Loading @@ -116,11 +116,11 @@ internal class SaveMessageOperations( messageServerId, rootMessagePartId, messageData, replaceMessageId = threadInfo.messageId replaceMessageId = threadInfo?.messageId ) if (threadInfo.threadId == null) { threadMessageOperations.createThreadEntry(database, messageId, threadInfo.rootId, threadInfo.parentId) if (threadInfo?.threadId == null) { threadMessageOperations.createThreadEntry(database, messageId, threadInfo?.rootId, threadInfo?.parentId) } createOrReplaceFulltextEntry(database, messageId, messageData) Loading app/storage/src/main/java/com/fsck/k9/storage/messages/ThreadMessageOperations.kt +11 −19 Original line number Diff line number Diff line Loading @@ -13,7 +13,7 @@ internal class ThreadMessageOperations { database: SQLiteDatabase, messageId: Long, destinationFolderId: Long ): ThreadInfo { ): ThreadInfo? { val threadHeaders = getMessageThreadHeaders(database, messageId) return doMessageThreading(database, destinationFolderId, threadHeaders) } Loading Loading @@ -48,15 +48,9 @@ internal class ThreadMessageOperations { } } fun createOrUpdateThreadEntry(database: SQLiteDatabase, messageId: Long, threadInfo: ThreadInfo) { if (threadInfo.threadId == null) { createThreadEntry(database, messageId, threadInfo.rootId, threadInfo.parentId) } else { val contentValues = ContentValues().apply { put("message_id", messageId) } database.update("threads", contentValues, "id = ?", arrayOf(threadInfo.threadId.toString())) fun createThreadEntryIfNecessary(database: SQLiteDatabase, messageId: Long, threadInfo: ThreadInfo?) { if (threadInfo?.threadId == null) { createThreadEntry(database, messageId, threadInfo?.rootId, threadInfo?.parentId) } } Loading @@ -71,7 +65,7 @@ internal class ThreadMessageOperations { } // TODO: Use MessageIdParser fun doMessageThreading(database: SQLiteDatabase, folderId: Long, threadHeaders: ThreadHeaders): ThreadInfo { fun doMessageThreading(database: SQLiteDatabase, folderId: Long, threadHeaders: ThreadHeaders): ThreadInfo? { val messageIdHeader = threadHeaders.messageIdHeader val msgThreadInfo = getThreadInfo(database, folderId, messageIdHeader, onlyEmpty = true) Loading @@ -87,7 +81,6 @@ internal class ThreadMessageOperations { if (messageIdValues.isEmpty()) { // This is not a reply, nothing to do for us. return msgThreadInfo ?: ThreadInfo(threadId = null, messageId = null, messageIdHeader, rootId = null, parentId = null) } var rootId: Long? = null Loading @@ -101,10 +94,10 @@ internal class ThreadMessageOperations { } } else { if (rootId == null) { rootId = threadInfo.rootId!! rootId = threadInfo.rootId } else if (threadInfo.rootId != rootId) { // Merge this thread into our thread updateThreadToNewRoot(database, threadInfo.rootId!!, rootId, parentId) updateThreadToNewRoot(database, threadInfo.rootId, rootId, parentId) } parentId = threadInfo.threadId } Loading @@ -119,7 +112,7 @@ internal class ThreadMessageOperations { } } return ThreadInfo(msgThreadInfo?.threadId, msgThreadInfo?.messageId, messageIdHeader, rootId, parentId) return ThreadInfo(msgThreadInfo?.threadId, msgThreadInfo?.messageId, rootId!!, parentId) } private fun updateThreadToNewRoot(database: SQLiteDatabase, oldRootId: Long, rootId: Long, parentId: Long?) { Loading Loading @@ -178,9 +171,9 @@ internal class ThreadMessageOperations { if (cursor.moveToFirst()) { val threadId = cursor.getLong(0) val messageId = cursor.getLong(1) val rootId = if (cursor.isNull(2)) null else cursor.getLong(2) val rootId = cursor.getLong(2) val parentId = if (cursor.isNull(3)) null else cursor.getLong(3) ThreadInfo(threadId, messageId, messageIdHeader, rootId, parentId) ThreadInfo(threadId, messageId, rootId, parentId) } else { null } Loading Loading @@ -212,8 +205,7 @@ internal class ThreadMessageOperations { internal data class ThreadInfo( val threadId: Long?, val messageId: Long?, val messageIdHeader: String?, val rootId: Long?, val rootId: Long, val parentId: Long? ) Loading app/storage/src/test/java/com/fsck/k9/storage/messages/ThreadMessageOperationsTest.kt +4 −17 Original line number Diff line number Diff line Loading @@ -16,15 +16,7 @@ class ThreadMessageOperationsTest : RobolectricTest() { ThreadHeaders(messageIdHeader = "<msg001@domain.example>", inReplyToHeader = null, referencesHeader = null) ) assertThat(threadInfo).isEqualTo( ThreadInfo( threadId = null, messageId = null, messageIdHeader = "<msg001@domain.example>", rootId = null, parentId = null ) ) assertThat(threadInfo).isNull() assertThat(sqliteDatabase.readThreads()).isEmpty() } Loading Loading @@ -59,8 +51,7 @@ class ThreadMessageOperationsTest : RobolectricTest() { ThreadInfo( threadId = null, messageId = null, messageIdHeader = "<msg002@domain.example>", rootId = rootThread.id, rootId = rootThread.id!!, parentId = rootThread.id ) ) Loading Loading @@ -95,7 +86,6 @@ class ThreadMessageOperationsTest : RobolectricTest() { ThreadInfo( threadId = null, messageId = null, messageIdHeader = "<msg002@domain.example>", rootId = threadId, parentId = threadId ) Loading Loading @@ -137,7 +127,6 @@ class ThreadMessageOperationsTest : RobolectricTest() { ThreadInfo( threadId = threadId1, messageId = messageId1, messageIdHeader = "<msg001@domain.example>", rootId = threadId1, parentId = null ) Loading Loading @@ -190,8 +179,7 @@ class ThreadMessageOperationsTest : RobolectricTest() { ThreadInfo( threadId = threadId2, messageId = messageId2, messageIdHeader = "<msg002@domain.example>", rootId = newRootThread.id, rootId = newRootThread.id!!, parentId = threadId1 ) ) Loading Loading @@ -266,8 +254,7 @@ class ThreadMessageOperationsTest : RobolectricTest() { ThreadInfo( threadId = threadIdD, messageId = messageIdD, messageIdHeader = "<msgD@domain.example>", rootId = threadA.id, rootId = threadA.id!!, parentId = threadIdC ) ) Loading Loading
app/storage/src/main/java/com/fsck/k9/storage/messages/MoveMessageOperations.kt +3 −3 Original line number Diff line number Diff line Loading @@ -20,7 +20,7 @@ internal class MoveMessageOperations( return database.execute(true) { database -> val threadInfo = threadMessageOperations.createOrUpdateParentThreadEntries(database, messageId, destinationFolderId) val destinationMessageId = createMessageEntry(database, messageId, destinationFolderId, threadInfo) threadMessageOperations.createOrUpdateThreadEntry(database, destinationMessageId, threadInfo) threadMessageOperations.createThreadEntryIfNecessary(database, destinationMessageId, threadInfo) convertOriginalMessageEntryToPlaceholderEntry(database, messageId) Loading @@ -32,7 +32,7 @@ internal class MoveMessageOperations( database: SQLiteDatabase, messageId: Long, destinationFolderId: Long, threadInfo: ThreadInfo threadInfo: ThreadInfo? ): Long { val destinationUid = K9.LOCAL_UID_PREFIX + UUID.randomUUID().toString() Loading Loading @@ -81,7 +81,7 @@ internal class MoveMessageOperations( } } val placeHolderMessageId = threadInfo.messageId val placeHolderMessageId = threadInfo?.messageId return if (placeHolderMessageId != null) { database.update("messages", contentValues, "id = ?", arrayOf(placeHolderMessageId.toString())) placeHolderMessageId Loading
app/storage/src/main/java/com/fsck/k9/storage/messages/SaveMessageOperations.kt +3 −3 Original line number Diff line number Diff line Loading @@ -116,11 +116,11 @@ internal class SaveMessageOperations( messageServerId, rootMessagePartId, messageData, replaceMessageId = threadInfo.messageId replaceMessageId = threadInfo?.messageId ) if (threadInfo.threadId == null) { threadMessageOperations.createThreadEntry(database, messageId, threadInfo.rootId, threadInfo.parentId) if (threadInfo?.threadId == null) { threadMessageOperations.createThreadEntry(database, messageId, threadInfo?.rootId, threadInfo?.parentId) } createOrReplaceFulltextEntry(database, messageId, messageData) Loading
app/storage/src/main/java/com/fsck/k9/storage/messages/ThreadMessageOperations.kt +11 −19 Original line number Diff line number Diff line Loading @@ -13,7 +13,7 @@ internal class ThreadMessageOperations { database: SQLiteDatabase, messageId: Long, destinationFolderId: Long ): ThreadInfo { ): ThreadInfo? { val threadHeaders = getMessageThreadHeaders(database, messageId) return doMessageThreading(database, destinationFolderId, threadHeaders) } Loading Loading @@ -48,15 +48,9 @@ internal class ThreadMessageOperations { } } fun createOrUpdateThreadEntry(database: SQLiteDatabase, messageId: Long, threadInfo: ThreadInfo) { if (threadInfo.threadId == null) { createThreadEntry(database, messageId, threadInfo.rootId, threadInfo.parentId) } else { val contentValues = ContentValues().apply { put("message_id", messageId) } database.update("threads", contentValues, "id = ?", arrayOf(threadInfo.threadId.toString())) fun createThreadEntryIfNecessary(database: SQLiteDatabase, messageId: Long, threadInfo: ThreadInfo?) { if (threadInfo?.threadId == null) { createThreadEntry(database, messageId, threadInfo?.rootId, threadInfo?.parentId) } } Loading @@ -71,7 +65,7 @@ internal class ThreadMessageOperations { } // TODO: Use MessageIdParser fun doMessageThreading(database: SQLiteDatabase, folderId: Long, threadHeaders: ThreadHeaders): ThreadInfo { fun doMessageThreading(database: SQLiteDatabase, folderId: Long, threadHeaders: ThreadHeaders): ThreadInfo? { val messageIdHeader = threadHeaders.messageIdHeader val msgThreadInfo = getThreadInfo(database, folderId, messageIdHeader, onlyEmpty = true) Loading @@ -87,7 +81,6 @@ internal class ThreadMessageOperations { if (messageIdValues.isEmpty()) { // This is not a reply, nothing to do for us. return msgThreadInfo ?: ThreadInfo(threadId = null, messageId = null, messageIdHeader, rootId = null, parentId = null) } var rootId: Long? = null Loading @@ -101,10 +94,10 @@ internal class ThreadMessageOperations { } } else { if (rootId == null) { rootId = threadInfo.rootId!! rootId = threadInfo.rootId } else if (threadInfo.rootId != rootId) { // Merge this thread into our thread updateThreadToNewRoot(database, threadInfo.rootId!!, rootId, parentId) updateThreadToNewRoot(database, threadInfo.rootId, rootId, parentId) } parentId = threadInfo.threadId } Loading @@ -119,7 +112,7 @@ internal class ThreadMessageOperations { } } return ThreadInfo(msgThreadInfo?.threadId, msgThreadInfo?.messageId, messageIdHeader, rootId, parentId) return ThreadInfo(msgThreadInfo?.threadId, msgThreadInfo?.messageId, rootId!!, parentId) } private fun updateThreadToNewRoot(database: SQLiteDatabase, oldRootId: Long, rootId: Long, parentId: Long?) { Loading Loading @@ -178,9 +171,9 @@ internal class ThreadMessageOperations { if (cursor.moveToFirst()) { val threadId = cursor.getLong(0) val messageId = cursor.getLong(1) val rootId = if (cursor.isNull(2)) null else cursor.getLong(2) val rootId = cursor.getLong(2) val parentId = if (cursor.isNull(3)) null else cursor.getLong(3) ThreadInfo(threadId, messageId, messageIdHeader, rootId, parentId) ThreadInfo(threadId, messageId, rootId, parentId) } else { null } Loading Loading @@ -212,8 +205,7 @@ internal class ThreadMessageOperations { internal data class ThreadInfo( val threadId: Long?, val messageId: Long?, val messageIdHeader: String?, val rootId: Long?, val rootId: Long, val parentId: Long? ) Loading
app/storage/src/test/java/com/fsck/k9/storage/messages/ThreadMessageOperationsTest.kt +4 −17 Original line number Diff line number Diff line Loading @@ -16,15 +16,7 @@ class ThreadMessageOperationsTest : RobolectricTest() { ThreadHeaders(messageIdHeader = "<msg001@domain.example>", inReplyToHeader = null, referencesHeader = null) ) assertThat(threadInfo).isEqualTo( ThreadInfo( threadId = null, messageId = null, messageIdHeader = "<msg001@domain.example>", rootId = null, parentId = null ) ) assertThat(threadInfo).isNull() assertThat(sqliteDatabase.readThreads()).isEmpty() } Loading Loading @@ -59,8 +51,7 @@ class ThreadMessageOperationsTest : RobolectricTest() { ThreadInfo( threadId = null, messageId = null, messageIdHeader = "<msg002@domain.example>", rootId = rootThread.id, rootId = rootThread.id!!, parentId = rootThread.id ) ) Loading Loading @@ -95,7 +86,6 @@ class ThreadMessageOperationsTest : RobolectricTest() { ThreadInfo( threadId = null, messageId = null, messageIdHeader = "<msg002@domain.example>", rootId = threadId, parentId = threadId ) Loading Loading @@ -137,7 +127,6 @@ class ThreadMessageOperationsTest : RobolectricTest() { ThreadInfo( threadId = threadId1, messageId = messageId1, messageIdHeader = "<msg001@domain.example>", rootId = threadId1, parentId = null ) Loading Loading @@ -190,8 +179,7 @@ class ThreadMessageOperationsTest : RobolectricTest() { ThreadInfo( threadId = threadId2, messageId = messageId2, messageIdHeader = "<msg002@domain.example>", rootId = newRootThread.id, rootId = newRootThread.id!!, parentId = threadId1 ) ) Loading Loading @@ -266,8 +254,7 @@ class ThreadMessageOperationsTest : RobolectricTest() { ThreadInfo( threadId = threadIdD, messageId = messageIdD, messageIdHeader = "<msgD@domain.example>", rootId = threadA.id, rootId = threadA.id!!, parentId = threadIdC ) ) Loading