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 @@ -99,12 +99,9 @@ processUpdatesActionType, } from '../types/update-types.js'; import { setNewSessionActionType } from '../utils/action-utils.js'; -import { isDev } from '../utils/dev-utils.js'; import { translateClientDBThreadMessageInfos } from '../utils/message-ops-utils.js'; -import { assertObjectsAreEqual } from '../utils/objects.js'; import { ashoatKeyserverID } from '../utils/validation-utils.js'; -const PROCESSED_MSG_STORE_INVARIANTS_DISABLED = !isDev; const _mapValuesWithKeys = _mapValues.convert({ cap: false }); // Input must already be ordered! @@ -136,22 +133,6 @@ ); } -function assertMessageStoreThreadsAreEqual( - processedMessageStore: MessageStore, - expectedMessageStore: MessageStore, - location: string, -) { - if (PROCESSED_MSG_STORE_INVARIANTS_DISABLED) { - return; - } - - assertObjectsAreEqual( - processedMessageStore.threads, - expectedMessageStore.threads, - `MessageStore.threads - ${location}`, - ); -} - const newThread = () => ({ messageIDs: [], startReached: false, @@ -161,6 +142,7 @@ +messageStoreOperations: $ReadOnlyArray, +messageStore: MessageStore, }; + function freshMessageStore( messageInfos: $ReadOnlyArray, truncationStatus: { [threadID: string]: MessageTruncationStatus }, @@ -325,7 +307,6 @@ newMessageInfos: $ReadOnlyArray, truncationStatus: { [threadID: string]: MessageTruncationStatus }, threadInfos: { +[threadID: string]: RawThreadInfo }, - actionType: string, ): MergeNewMessagesResult { const { messageStoreOperations: updateWithLatestThreadInfosOps, @@ -338,15 +319,10 @@ updateWithLatestThreadInfosOps, ); - assertMessageStoreThreadsAreEqual( - messageStoreAfterUpdateOps, - messageStoreUpdatedWithLatestThreadInfos, - `${actionType} | reassignment and filtering`, - ); - const updatedMessageStore = { ...messageStoreUpdatedWithLatestThreadInfos, messages: messageStoreAfterUpdateOps.messages, + threads: messageStoreAfterUpdateOps.threads, }; const localIDsToServerIDs: Map = new Map(); @@ -624,7 +600,7 @@ const messageStore = { messages: processedMessageStore.messages, - threads, + threads: processedMessageStore.threads, local, currentAsOf: { ...processedMessageStore.currentAsOf, @@ -632,12 +608,6 @@ }, }; - assertMessageStoreThreadsAreEqual( - processedMessageStore, - messageStore, - `${actionType} | processed`, - ); - return { messageStoreOperations: [ ...updateWithLatestThreadInfosOps, @@ -652,6 +622,7 @@ +messageStore: MessageStore, +reassignedThreadIDs: string[], }; + function updateMessageStoreWithLatestThreadInfos( messageStore: MessageStore, threadInfos: { +[id: string]: RawThreadInfo }, @@ -739,6 +710,7 @@ +messageStoreOperations: $ReadOnlyArray, +messageStore: MessageStore, }; + function reduceMessageStore( messageStore: MessageStore, action: BaseAction, @@ -762,15 +734,13 @@ messageStoreOperations, ); - assertMessageStoreThreadsAreEqual( - processedMessageStore, - freshStore, - `${action.type} | fresh store`, - ); - return { messageStoreOperations, - messageStore: { ...freshStore, messages: processedMessageStore.messages }, + messageStore: { + ...freshStore, + messages: processedMessageStore.messages, + threads: processedMessageStore.threads, + }, }; } else if (action.type === incrementalStateSyncActionType) { if ( @@ -791,7 +761,6 @@ messagesResult.rawMessageInfos, messagesResult.truncationStatuses, newThreadInfos, - action.type, ); } else if (action.type === processUpdatesActionType) { if (action.payload.updatesResult.newUpdates.length === 0) { @@ -809,7 +778,6 @@ messagesResult.rawMessageInfos, messagesResult.truncationStatuses, newThreadInfos, - action.type, ); return { messageStoreOperations, @@ -830,7 +798,6 @@ messagesResult.rawMessageInfos, messagesResult.truncationStatuses, newThreadInfos, - action.type, ); } else if ( action.type === fetchSingleMostRecentMessagesFromThreadsActionTypes.success @@ -840,7 +807,6 @@ action.payload.rawMessageInfos, action.payload.truncationStatuses, newThreadInfos, - action.type, ); } else if ( action.type === fetchMessagesBeforeCursorActionTypes.success || @@ -851,7 +817,6 @@ action.payload.rawMessageInfos, { [action.payload.threadID]: action.payload.truncationStatus }, newThreadInfos, - action.type, ); } else if ( action.type === logOutActionTypes.success || @@ -868,17 +833,12 @@ messageStoreOperations, ); - assertMessageStoreThreadsAreEqual( - processedMessageStore, - filteredMessageStore, - action.type, - ); - return { messageStoreOperations, messageStore: { ...filteredMessageStore, messages: processedMessageStore.messages, + threads: processedMessageStore.threads, }, }; } else if (action.type === newThreadActionTypes.success) { @@ -891,7 +851,6 @@ messagesResult.rawMessageInfos, messagesResult.truncationStatuses, newThreadInfos, - action.type, ); } else if (action.type === sendMessageReportActionTypes.success) { return mergeNewMessages( @@ -902,7 +861,6 @@ messageTruncationStatus.UNCHANGED, }, newThreadInfos, - action.type, ); } else if (action.type === registerActionTypes.success) { const truncationStatuses = {}; @@ -915,7 +873,6 @@ action.payload.rawMessageInfos, truncationStatuses, newThreadInfos, - action.type, ); } else if ( action.type === changeThreadSettingsActionTypes.success || @@ -931,7 +888,6 @@ action.payload.newMessageInfos, { [action.payload.threadID]: messageTruncationStatus.UNCHANGED }, newThreadInfos, - action.type, ); } else if (action.type === deleteEntryActionTypes.success) { const payload = action.payload; @@ -941,7 +897,6 @@ payload.newMessageInfos, { [payload.threadID]: messageTruncationStatus.UNCHANGED }, newThreadInfos, - action.type, ); } } else if (action.type === joinThreadActionTypes.success) { @@ -954,7 +909,6 @@ messagesResult.rawMessageInfos, messagesResult.truncationStatuses, newThreadInfos, - action.type, ); } else if (action.type === sendEditMessageActionTypes.success) { const { newMessageInfos } = action.payload; @@ -968,7 +922,6 @@ newMessageInfos, truncationStatuses, newThreadInfos, - action.type, ); } else if ( action.type === sendTextMessageActionTypes.started || @@ -1027,10 +980,6 @@ }; } - const threads = { - ...messageStore.threads, - ...updatedThreads, - }; messageStoreOperations.push({ type: 'replace_threads', payload: { @@ -1045,17 +994,11 @@ const newMessageStore = { messages: processedMessageStore.messages, - threads, + threads: processedMessageStore.threads, local, currentAsOf: messageStore.currentAsOf, }; - assertMessageStoreThreadsAreEqual( - processedMessageStore, - newMessageStore, - action.type, - ); - return { messageStoreOperations, messageStore: newMessageStore, @@ -1106,23 +1049,9 @@ messageStoreOperations, ); - const newMessageStore = { - ...processedMessageStore, - threads: { - ...messageStore.threads, - ...updatedThreads, - }, - }; - - assertMessageStoreThreadsAreEqual( - processedMessageStore, - newMessageStore, - action.type, - ); - return { messageStoreOperations, - messageStore: newMessageStore, + messageStore: processedMessageStore, }; } else if ( action.type === sendTextMessageActionTypes.success || @@ -1200,25 +1129,14 @@ messageStoreOperations, ); - const newMessageStore = { - ...messageStore, - messages: processedMessageStore.messages, - threads: { - ...messageStore.threads, - ...updatedThreads, - }, - local, - }; - - assertMessageStoreThreadsAreEqual( - processedMessageStore, - newMessageStore, - action.type, - ); - return { messageStoreOperations, - messageStore: newMessageStore, + messageStore: { + ...messageStore, + messages: processedMessageStore.messages, + threads: processedMessageStore.threads, + local, + }, }; } else if (action.type === saveMessagesActionType) { const truncationStatuses = {}; @@ -1232,7 +1150,6 @@ action.payload.rawMessageInfos, truncationStatuses, newThreadInfos, - action.type, ); return { messageStoreOperations, @@ -1293,20 +1210,11 @@ const newMessageStore = { messages: processedMessageStore.messages, - threads: { - ...messageStore.threads, - ...updatedThreads, - }, + threads: processedMessageStore.threads, local: _omit(messageIDsToPrune)(messageStore.local), currentAsOf: messageStore.currentAsOf, }; - assertMessageStoreThreadsAreEqual( - processedMessageStore, - newMessageStore, - action.type, - ); - return { messageStoreOperations, messageStore: newMessageStore, @@ -1555,24 +1463,13 @@ messageStoreOperations, ); - const newMessageStore = { - ...messageStore, - threads: { - ...messageStore.threads, - [threadID]: threadState, - }, - messages: processedMessageStore.messages, - }; - - assertMessageStoreThreadsAreEqual( - processedMessageStore, - newMessageStore, - action.type, - ); - return { messageStoreOperations, - messageStore: newMessageStore, + messageStore: { + ...messageStore, + threads: processedMessageStore.threads, + messages: processedMessageStore.messages, + }, }; } else if (action.type === processServerRequestsActionType) { const { @@ -1585,24 +1482,15 @@ messageStoreOperations, ); - assertMessageStoreThreadsAreEqual( - processedMessageStore, - messageStoreAfterReassignment, - action.type, - ); - return { messageStoreOperations, messageStore: { ...messageStoreAfterReassignment, messages: processedMessageStore.messages, + threads: processedMessageStore.threads, }, }; } else if (action.type === setClientDBStoreActionType) { - const payloadMessages = action.payload.messages; - if (!payloadMessages) { - return { messageStoreOperations: [], messageStore }; - } const actionPayloadMessageStoreThreads = translateClientDBThreadMessageInfos( action.payload.messageStoreThreads ?? [], @@ -1612,21 +1500,23 @@ for (const threadID in actionPayloadMessageStoreThreads) { newThreads[threadID] = { ...actionPayloadMessageStoreThreads[threadID], - messageIDs: messageStore.threads[threadID]?.messageIDs ?? [], + messageIDs: messageStore.threads?.[threadID]?.messageIDs ?? [], }; } - assertMessageStoreThreadsAreEqual( - { - ...messageStore, - threads: newThreads, - }, - messageStore, - `${action.type} | comparing SQLite with redux-persist`, - ); + const payloadMessages = action.payload.messages; + if (!payloadMessages) { + return { + messageStoreOperations: [], + messageStore: { ...messageStore, threads: newThreads }, + }; + } const { messageStoreOperations, messageStore: updatedMessageStore } = - updateMessageStoreWithLatestThreadInfos(messageStore, newThreadInfos); + updateMessageStoreWithLatestThreadInfos( + { ...messageStore, threads: newThreads }, + newThreadInfos, + ); let threads = { ...updatedMessageStore.threads }; let local = { ...updatedMessageStore.local }; @@ -1729,6 +1619,7 @@ +rawMessageInfos: $ReadOnlyArray, +truncationStatuses: MessageTruncationStatuses, }; + function mergeUpdatesWithMessageInfos( messageInfos: $ReadOnlyArray, newUpdates: $ReadOnlyArray, diff --git a/lib/reducers/message-reducer.test.js b/lib/reducers/message-reducer.test.js --- a/lib/reducers/message-reducer.test.js +++ b/lib/reducers/message-reducer.test.js @@ -265,17 +265,17 @@ }, ]; - const threads = { - '88471': { - messageIDs: ['local11', 'local10', '103502'], - startReached: false, + const clientDBThreads = [ + { + id: '88471', + start_reached: '0', }, - }; + ]; const { messageStore: updatedMessageStore } = reduceMessageStore( { messages: {}, - threads, + threads: {}, local: {}, currentAsOf: { [ashoatKeyserverID]: 1234567890123 }, }, @@ -287,7 +287,7 @@ threadStore: { threadInfos: {}, }, - messageStoreThreads: [], + messageStoreThreads: clientDBThreads, messages: clientDBMessages, reports: [], },