diff --git a/lib/reducers/draft-reducer.js b/lib/reducers/draft-reducer.js --- a/lib/reducers/draft-reducer.js +++ b/lib/reducers/draft-reducer.js @@ -1,8 +1,8 @@ // @flow +import { setClientDBStoreActionType } from '../actions/client-db-store-actions'; import { moveDraftActionType, - setDraftStoreDrafts, updateDraftActionType, } from '../actions/draft-actions'; import { @@ -72,9 +72,9 @@ }, }, }; - } else if (action.type === setDraftStoreDrafts) { + } else if (action.type === setClientDBStoreActionType) { const drafts = {}; - for (const dbDraftInfo of action.payload) { + for (const dbDraftInfo of action.payload.drafts) { drafts[dbDraftInfo.key] = dbDraftInfo.text; } return { 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 @@ -14,6 +14,7 @@ import _pickBy from 'lodash/fp/pickBy'; import _uniq from 'lodash/fp/uniq'; +import { setClientDBStoreActionType } from '../actions/client-db-store-actions'; import { createEntryActionTypes, saveEntryActionTypes, @@ -30,7 +31,6 @@ messageStorePruneActionType, createLocalMessageActionType, fetchSingleMostRecentMessagesFromThreadsActionTypes, - setMessageStoreMessages, } from '../actions/message-actions'; import { sendMessageReportActionTypes } from '../actions/message-report-actions'; import { @@ -1287,7 +1287,7 @@ messages: processedMessageStore.messages, }, }; - } else if (action.type === setMessageStoreMessages) { + } else if (action.type === setClientDBStoreActionType) { const { messageStoreOperations, messageStore: updatedMessageStore, @@ -1306,7 +1306,7 @@ } const threadsNeedMsgIDsResorting = new Set(); const actionPayloadMessages = translateClientDBMessageInfosToRawMessageInfos( - action.payload, + action.payload.messages, ); // When starting the app on native, we filter out any local-only multimedia 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 @@ -272,7 +272,7 @@ ]; const threads = { - '88471': { + ['88471']: { messageIDs: ['local11', 'local10', '103502'], startReached: false, lastNavigatedTo: 1658172614602, @@ -288,8 +288,15 @@ currentAsOf: 1234567890123, }, { - type: 'SET_MESSAGE_STORE_MESSAGES', - payload: clientDBMessages, + type: 'SET_CLIENT_DB_STORE', + payload: { + currentUserID: '', + drafts: [], + threadStore: { + threadInfos: {}, + }, + messages: clientDBMessages, + }, }, { [88471]: createPendingThread({ diff --git a/lib/reducers/thread-reducer.js b/lib/reducers/thread-reducer.js --- a/lib/reducers/thread-reducer.js +++ b/lib/reducers/thread-reducer.js @@ -6,6 +6,7 @@ setThreadUnreadStatusActionTypes, updateActivityActionTypes, } from '../actions/activity-actions'; +import { setClientDBStoreActionType } from '../actions/client-db-store-actions.js'; import { saveMessagesActionType } from '../actions/message-actions'; import { changeThreadSettingsActionTypes, @@ -15,7 +16,6 @@ changeThreadMemberRolesActionTypes, joinThreadActionTypes, leaveThreadActionTypes, - setThreadStoreActionType, } from '../actions/thread-actions'; import { logOutActionTypes, @@ -469,9 +469,9 @@ newThreadInconsistencies: [], threadStoreOperations, }; - } else if (action.type === setThreadStoreActionType) { + } else if (action.type === setClientDBStoreActionType) { return { - threadStore: action.payload, + threadStore: action.payload.threadStore, newThreadInconsistencies: [], threadStoreOperations: [], }; diff --git a/native/redux/redux-setup.js b/native/redux/redux-setup.js --- a/native/redux/redux-setup.js +++ b/native/redux/redux-setup.js @@ -7,6 +7,7 @@ import { persistStore, persistReducer } from 'redux-persist'; import thunk from 'redux-thunk'; +import { setClientDBStoreActionType } from 'lib/actions/client-db-store-actions'; import { setDeviceTokenActionTypes } from 'lib/actions/device-actions'; import { logOutActionTypes, @@ -345,6 +346,26 @@ }; } } + if (action.type === setClientDBStoreActionType) { + state = { + ...state, + storeLoaded: true, + }; + const currentLoggedInUserID = state.currentUserInfo?.anonymous + ? undefined + : state.currentUserInfo?.id; + const actionCurrentLoggedInUserID = action.payload.currentUserID; + if ( + !currentLoggedInUserID || + !actionCurrentLoggedInUserID || + actionCurrentLoggedInUserID !== currentLoggedInUserID + ) { + // If user is logged out now, was logged out at the time action was + // dispatched or their ID changed between action dispatch and a + // call to reducer we ignore SQLite data since their are not valid + return state; + } + } const baseReducerResult = baseReducer(state, (action: BaseAction)); state = baseReducerResult.state;