diff --git a/lib/shared/dm-ops/process-dm-ops.js b/lib/shared/dm-ops/process-dm-ops.js
--- a/lib/shared/dm-ops/process-dm-ops.js
+++ b/lib/shared/dm-ops/process-dm-ops.js
@@ -14,13 +14,16 @@
   type DMOperation,
   processDMOpsActionType,
   queueDMOpsActionType,
+  scheduleP2PNotifsActionType,
 } from '../../types/dm-ops.js';
 import { updateTypes } from '../../types/update-types-enum.js';
-import { useSelector } from '../../utils/redux-utils.js';
+import { useSelector, useDispatch } from '../../utils/redux-utils.js';
+import { messageDataFromRawMessageInfo } from '../message-utils.js';
 
 function useProcessDMOperation(): (
   dmOp: DMOperation,
   metadata: ?MessageSourceMetadata,
+  isSender?: boolean,
 ) => Promise<void> {
   const fetchMessage = useGetLatestMessageEdit();
   const threadInfos = useSelector(state => state.threadStore.threadInfos);
@@ -34,10 +37,16 @@
   );
 
   const dispatchWithMessageSource = useDispatchWithMessageSource();
+  const dispatch = useDispatch();
+
   const loggedInUserInfo = useLoggedInUserInfo();
   const viewerID = loggedInUserInfo?.id;
   return React.useCallback(
-    async (dmOp: DMOperation, metadata: ?MessageSourceMetadata) => {
+    async (
+      dmOp: DMOperation,
+      metadata: ?MessageSourceMetadata,
+      isSender?: boolean,
+    ) => {
       if (!viewerID) {
         console.log('ignored DMOperation because logged out');
         return;
@@ -103,8 +112,23 @@
         },
         metadata,
       );
+
+      if (!isSender) {
+        return;
+      }
+
+      const notificationsCreationData = {
+        messageDatas: allNewMessageInfos.map(messageDataFromRawMessageInfo),
+      };
+
+      dispatch({
+        type: scheduleP2PNotifsActionType,
+        payload: {
+          notificationsCreationData,
+        },
+      });
     },
-    [viewerID, utilities, dispatchWithMessageSource],
+    [viewerID, utilities, dispatchWithMessageSource, dispatch],
   );
 }