diff --git a/lib/handlers/db-ops-handler.react.js b/lib/handlers/db-ops-handler.react.js --- a/lib/handlers/db-ops-handler.react.js +++ b/lib/handlers/db-ops-handler.react.js @@ -3,6 +3,7 @@ import * as React from 'react'; import { opsProcessingFinishedActionType } from '../actions/db-ops-actions.js'; +import { getAllPeerDevices } from '../selectors/user-selectors.js'; import { usePeerToPeerCommunication } from '../tunnelbroker/peer-to-peer-context.js'; import { useTunnelbroker } from '../tunnelbroker/tunnelbroker-context.js'; import type { DBOpsEntry } from '../types/db-ops-types.js'; @@ -22,6 +23,7 @@ const prevQueueFront = React.useRef(null); const { sendMessageToDevice } = useTunnelbroker(); const { processOutboundMessages } = usePeerToPeerCommunication(); + const allPeerDevices = useSelector(getAllPeerDevices); const dispatch = useDispatch(); @@ -36,14 +38,29 @@ if (ops) { await processDBStoreOperations(ops); if (ops.outboundP2PMessages && ops.outboundP2PMessages.length > 0) { - const messageIDs = ops.outboundP2PMessages.map( - message => message.messageID, - ); + const allPeerDevicesSet = new Set(allPeerDevices); + const removeP2PMessagesPromises = []; + const messageIDs = ops?.outboundP2PMessages + ?.map(message => { + if (!allPeerDevicesSet.has(message.deviceID)) { + removeP2PMessagesPromises.push( + sqliteAPI.removeOutboundP2PMessage( + message.messageID, + message.deviceID, + ), + ); + return null; + } + + return message.messageID; + }) + ?.filter(Boolean); processOutboundMessages( messageIDs, dispatchMetadata?.dmOpID, notificationsCreationData, ); + void Promise.all(removeP2PMessagesPromises); } } dispatch({ @@ -82,6 +99,7 @@ sendMessageToDevice, sqliteAPI, processOutboundMessages, + allPeerDevices, ]); return null;