@@ -36,6 +36,7 @@ import { createSwarmMessageSentFromUs } from '../../../../models/messageFactory'
36
36
import { Data } from '../../../../data/data' ;
37
37
import { processMessagesUsingCache } from './sogsV3MutationCache' ;
38
38
import { destroyMessagesAndUpdateRedux } from '../../../../util/expiringMessages' ;
39
+ import { sogsRollingDeletions } from './sogsRollingDeletions' ;
39
40
40
41
/**
41
42
* Get the convo matching those criteria and make sure it is an opengroup convo, or return null.
@@ -155,29 +156,28 @@ async function filterOutMessagesInvalidSignature(
155
156
return signaturesValidMessages ;
156
157
}
157
158
158
- let totalDeletedMessages = 0 ;
159
159
const handleSogsV3DeletedMessages = async (
160
160
messages : Array < OpenGroupMessageV4 > ,
161
161
serverUrl : string ,
162
162
roomId : string
163
163
) => {
164
- const deletions = messages . filter ( m => Boolean ( m . deleted ) ) ;
165
- const exceptDeletion = messages . filter ( m => ! m . deleted ) ;
166
- if ( ! deletions . length ) {
167
- return messages ;
164
+ const messagesDeleted = messages . filter ( m => Boolean ( m . deleted ) ) ;
165
+ const messagesWithoutDeleted = messages . filter ( m => ! m . deleted ) ;
166
+ if ( ! messagesDeleted . length ) {
167
+ return messagesWithoutDeleted ;
168
168
}
169
- totalDeletedMessages += deletions . length ;
170
- console . warn (
171
- JSON . stringify ( {
172
- totalDeletedMessages,
173
- } )
174
- ) ;
175
- const allIdsRemoved = deletions . map ( m => m . id ) ;
169
+
170
+ const allIdsRemoved = messagesDeleted . map ( m => m . id ) ;
171
+
176
172
try {
177
173
const convoId = getOpenGroupV2ConversationId ( serverUrl , roomId ) ;
178
174
const convo = getConversationController ( ) . get ( convoId ) ;
179
175
const messageIds = await Data . getMessageIdsFromServerIds ( allIdsRemoved , convo . id ) ;
180
176
177
+ allIdsRemoved . forEach ( removedId => {
178
+ sogsRollingDeletions . addMessageDeletedId ( convoId , removedId ) ;
179
+ } ) ;
180
+
181
181
if ( messageIds && messageIds . length ) {
182
182
await destroyMessagesAndUpdateRedux (
183
183
messageIds . map ( messageId => ( {
@@ -189,14 +189,9 @@ const handleSogsV3DeletedMessages = async (
189
189
} catch ( e ) {
190
190
window ?. log ?. warn ( 'handleDeletions failed:' , e ) ;
191
191
}
192
- return exceptDeletion ;
192
+ return messagesWithoutDeleted ;
193
193
} ;
194
194
195
- // tslint:disable-next-line: one-variable-per-declaration
196
- let totalEmptyReactions = 0 ,
197
- totalMessagesWithResolvedBlindedIdsIfFound = 0 ,
198
- totalMessageReactions = 0 ;
199
-
200
195
// tslint:disable-next-line: max-func-body-length cyclomatic-complexity
201
196
const handleMessagesResponseV4 = async (
202
197
messages : Array < OpenGroupMessageV4 > ,
@@ -296,8 +291,6 @@ const handleMessagesResponseV4 = async (
296
291
const incomingMessageSeqNo = compact ( messages . map ( n => n . seqno ) ) ;
297
292
const maxNewMessageSeqNo = Math . max ( ...incomingMessageSeqNo ) ;
298
293
299
- totalMessagesWithResolvedBlindedIdsIfFound += messagesWithResolvedBlindedIdsIfFound . length ;
300
-
301
294
for ( let index = 0 ; index < messagesWithResolvedBlindedIdsIfFound . length ; index ++ ) {
302
295
const msgToHandle = messagesWithResolvedBlindedIdsIfFound [ index ] ;
303
296
try {
@@ -323,25 +316,24 @@ const handleMessagesResponseV4 = async (
323
316
await OpenGroupData . saveV2OpenGroupRoom ( roomInfosRefreshed ) ;
324
317
325
318
const messagesWithReactions = messages . filter ( m => m . reactions !== undefined ) ;
326
- const messagesWithEmptyReactions = messagesWithReactions . filter ( m => isEmpty ( m . reactions ) ) ;
327
-
328
- totalMessageReactions += messagesWithReactions . length ;
329
- totalEmptyReactions += messagesWithEmptyReactions . length ;
330
- console . warn (
331
- JSON . stringify ( {
332
- totalMessagesWithResolvedBlindedIdsIfFound,
333
- totalMessageReactions,
334
- totalEmptyReactions,
335
- } )
336
- ) ;
337
319
338
320
if ( messagesWithReactions . length > 0 ) {
339
321
const conversationId = getOpenGroupV2ConversationId ( serverUrl , roomId ) ;
340
322
const groupConvo = getConversationController ( ) . get ( conversationId ) ;
341
323
if ( groupConvo && groupConvo . isOpenGroupV2 ( ) ) {
342
- for ( const message of messagesWithReactions ) {
324
+ for ( const messageWithReaction of messagesWithReactions ) {
325
+ if ( isEmpty ( messageWithReaction . reactions ) ) {
326
+ /*
327
+ * When a message is deleted from the server, we get the deleted event as a data: null on the message itself
328
+ * and an update on its reactions.
329
+ * But, because we just deleted that message, we can skip trying to udpate its reactions: it's not in the DB anymore.
330
+ */
331
+ if ( sogsRollingDeletions . hasMessageDeletedId ( conversationId , messageWithReaction . id ) ) {
332
+ continue ;
333
+ }
334
+ }
343
335
void groupConvo . queueJob ( async ( ) => {
344
- await processMessagesUsingCache ( serverUrl , roomId , message ) ;
336
+ await processMessagesUsingCache ( serverUrl , roomId , messageWithReaction ) ;
345
337
} ) ;
346
338
}
347
339
}
0 commit comments