diff --git a/lib/reducers/message-reducer.js b/lib/reducers/message-reducer.js --- a/lib/reducers/message-reducer.js +++ b/lib/reducers/message-reducer.js @@ -1306,7 +1306,8 @@ }, }; } else if (action.type === messageStorePruneActionType) { - const messageIDsToPrune = []; + const reduxMessageIDsToPrune: Array = []; + const dbMessageIDsToPrune: Array = []; const updatedThreads: { [string]: ThreadMessageInfo } = {}; for (const threadID of action.payload.threadIDs) { @@ -1324,37 +1325,45 @@ startReached: false, }; } - for (const id of removed) { - messageIDsToPrune.push(id); + reduxMessageIDsToPrune.push(...removed); + if (!newThreadInfos[threadID]?.thick) { + dbMessageIDsToPrune.push(...removed); } updatedThreads[threadID] = thread; } - const localMessageIDsToRemove = _pick(messageIDsToPrune)( - messageStore.local, - ); + const createMessageStoreOperations = ( + messageIDsToPrune: $ReadOnlyArray, + ) => { + const localMessageIDsToRemove = _pick(messageIDsToPrune)( + messageStore.local, + ); - const messageStoreOperations = [ - { - type: 'remove', - payload: { ids: messageIDsToPrune }, - }, - { - type: 'replace_threads', - payload: { - threads: updatedThreads, + return [ + { + type: 'remove', + payload: { ids: messageIDsToPrune }, }, - }, - { - type: 'remove_local_message_infos', - payload: { ids: Object.keys(localMessageIDsToRemove) }, - }, - ]; + { + type: 'replace_threads', + payload: { + threads: updatedThreads, + }, + }, + { + type: 'remove_local_message_infos', + payload: { ids: Object.keys(localMessageIDsToRemove) }, + }, + ]; + }; + const reduxOperations = createMessageStoreOperations( + reduxMessageIDsToPrune, + ); const processedMessageStore = processMessageStoreOperations( messageStore, - messageStoreOperations, + reduxOperations, ); const newMessageStore = { @@ -1364,8 +1373,9 @@ currentAsOf: messageStore.currentAsOf, }; + const dbOperations = createMessageStoreOperations(dbMessageIDsToPrune); return { - messageStoreOperations, + messageStoreOperations: dbOperations, messageStore: newMessageStore, }; } else if (action.type === updateMultimediaMessageMediaActionType) {