diff --git a/lib/reducers/calendar-filters-reducer.js b/lib/reducers/calendar-filters-reducer.js --- a/lib/reducers/calendar-filters-reducer.js +++ b/lib/reducers/calendar-filters-reducer.js @@ -27,6 +27,7 @@ } from '../selectors/calendar-filter-selectors.js'; import { threadInFilterList } from '../shared/thread-utils.js'; import { updateSpecs } from '../shared/updates/update-specs.js'; +import { processDMOpsActionType } from '../types/dm-ops.js'; import { type CalendarFilter, defaultCalendarFilters, @@ -156,6 +157,8 @@ } else if (action.type === clearCalendarCommunityFilter) { const nonThreadFilters = nonThreadCalendarFilters(state); return nonThreadFilters; + } else if (action.type === processDMOpsActionType) { + return updateFilterListFromUpdateInfos(state, action.payload.updateInfos); } return state; } diff --git a/lib/reducers/entry-reducer.js b/lib/reducers/entry-reducer.js --- a/lib/reducers/entry-reducer.js +++ b/lib/reducers/entry-reducer.js @@ -47,6 +47,7 @@ import { threadInFilterList } from '../shared/thread-utils.js'; import { updateSpecs } from '../shared/updates/update-specs.js'; import { isWebPlatform } from '../types/device-types.js'; +import { processDMOpsActionType } from '../types/dm-ops.js'; import type { RawEntryInfo, EntryStore } from '../types/entry-types.js'; import type { BaseAction } from '../types/redux-types.js'; import { type ClientEntryInconsistencyReportCreationRequest } from '../types/report-types.js'; @@ -774,6 +775,18 @@ entryStoreOperations: [], reportCreationRequests: [], }; + } else if (action.type === processDMOpsActionType) { + const ops = mergeNewEntryInfosOps( + entryInfos, + daysToEntries, + mergeUpdateEntryInfos([], action.payload.updateInfos), + newThreadInfos, + ); + return { + entryStore: entryStoreOpsHandlers.processStoreOperations(entryStore, ops), + entryStoreOperations: ops, + reportCreationRequests: [], + }; } return { entryStore, 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 @@ -78,6 +78,7 @@ import { unshimMessageInfos } from '../shared/unshim-utils.js'; import { updateSpecs } from '../shared/updates/update-specs.js'; import { recoveryFromReduxActionSources } from '../types/account-types.js'; +import { processDMOpsActionType } from '../types/dm-ops.js'; import type { Media, Image } from '../types/media-types.js'; import { messageTypes } from '../types/message-types-enum.js'; import { @@ -1814,6 +1815,24 @@ messageStoreOperations, messageStore: processedMessageStore, }; + } else if (action.type === processDMOpsActionType) { + const { rawMessageInfos, updateInfos } = action.payload; + if (rawMessageInfos.length === 0 && updateInfos.length === 0) { + return { messageStoreOperations: [], messageStore }; + } + + const messagesResult = mergeUpdatesWithMessageInfos( + rawMessageInfos, + updateInfos, + {}, + ); + + return mergeNewMessages( + messageStore, + messagesResult.rawMessageInfos, + messagesResult.truncationStatuses, + newThreadInfos, + ); } return { messageStoreOperations: [], messageStore }; } diff --git a/lib/reducers/thread-activity-reducer.js b/lib/reducers/thread-activity-reducer.js --- a/lib/reducers/thread-activity-reducer.js +++ b/lib/reducers/thread-activity-reducer.js @@ -24,6 +24,7 @@ type ThreadActivityStoreOperation, } from '../ops/thread-activity-store-ops.js'; import { isWebPlatform } from '../types/device-types.js'; +import { processDMOpsActionType } from '../types/dm-ops.js'; import type { BaseAction } from '../types/redux-types.js'; import { incrementalStateSyncActionType, @@ -240,6 +241,8 @@ threadActivityStore: state, threadActivityStoreOperations: [], }; + } else if (action.type === processDMOpsActionType) { + return handleThreadDeletionUpdates(state, action.payload.updateInfos); } return { threadActivityStore: state, 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 @@ -37,6 +37,7 @@ } from '../ops/thread-store-ops.js'; import { stateSyncSpecs } from '../shared/state-sync/state-sync-specs.js'; import { updateSpecs } from '../shared/updates/update-specs.js'; +import { processDMOpsActionType } from '../types/dm-ops.js'; import type { RawThreadInfo } from '../types/minimally-encoded-thread-permissions-types.js'; import type { BaseAction } from '../types/redux-types.js'; import { type ClientThreadInconsistencyReportCreationRequest } from '../types/report-types.js'; @@ -534,6 +535,28 @@ newThreadInconsistencies: [], threadStoreOperations: [], }; + } else if (action.type === processDMOpsActionType) { + const { updateInfos } = action.payload; + if (updateInfos.length === 0) { + return { + threadStore: state, + newThreadInconsistencies: [], + threadStoreOperations: [], + }; + } + const threadStoreOperations = generateOpsForThreadUpdates( + state.threadInfos, + updateInfos, + ); + const updatedThreadStore = processThreadStoreOperations( + state, + threadStoreOperations, + ); + return { + threadStore: updatedThreadStore, + newThreadInconsistencies: [], + threadStoreOperations, + }; } return { threadStore: state,