From cc17a952e090d077062765a8b77ea1fafa9459c0 Mon Sep 17 00:00:00 2001 From: ryanzhao Date: Wed, 4 Aug 2021 11:49:21 +1000 Subject: [PATCH] delete real message and sync message together --- Session/Conversations/ConversationViewItem.m | 13 ++++++++++--- .../Messages/Signal/TSOutgoingMessage.h | 2 ++ .../Messages/Signal/TSOutgoingMessage.m | 2 ++ .../Sending & Receiving/MessageSender.swift | 3 ++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Session/Conversations/ConversationViewItem.m b/Session/Conversations/ConversationViewItem.m index e9db68a4e..aa457da61 100644 --- a/Session/Conversations/ConversationViewItem.m +++ b/Session/Conversations/ConversationViewItem.m @@ -979,7 +979,6 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType) - (void)deleteRemotelyAction { - // TODO: closed group and one-on-one chat TSMessage *message = (TSMessage *)self.interaction; if (self.isGroupThread) { @@ -1010,14 +1009,22 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType) }) retainUntilComplete]; } else { NSString *groupPublicKey = [LKGroupUtilities getDecodedGroupID:groupThread.groupModel.groupId]; - [[SNSnodeAPI deleteMessageForPublickKey:groupPublicKey serverHashes:@[message.serverHash]].catch(^(NSError *error) { + NSArray *serverHashes = @[message.serverHash]; + if ([message isKindOfClass:[TSOutgoingMessage class]] && ((TSOutgoingMessage *)message).syncMessageServerHash != nil) { + serverHashes = @[message.serverHash, ((TSOutgoingMessage *)message).syncMessageServerHash]; + } + [[SNSnodeAPI deleteMessageForPublickKey:groupPublicKey serverHashes:serverHashes].catch(^(NSError *error) { // Roll back [self.interaction save]; }) retainUntilComplete]; } } else { TSContactThread *contactThread = (TSContactThread *)self.interaction.thread; - [[SNSnodeAPI deleteMessageForPublickKey:contactThread.contactSessionID serverHashes:@[message.serverHash]].catch(^(NSError *error) { + NSArray *serverHashes = @[message.serverHash]; + if ([message isKindOfClass:[TSOutgoingMessage class]] && ((TSOutgoingMessage *)message).syncMessageServerHash != nil) { + serverHashes = @[message.serverHash, ((TSOutgoingMessage *)message).syncMessageServerHash]; + } + [[SNSnodeAPI deleteMessageForPublickKey:contactThread.contactSessionID serverHashes:serverHashes].catch(^(NSError *error) { // Roll back [self.interaction save]; }) retainUntilComplete]; diff --git a/SessionMessagingKit/Messages/Signal/TSOutgoingMessage.h b/SessionMessagingKit/Messages/Signal/TSOutgoingMessage.h index f38a173f7..22c0a8a78 100644 --- a/SessionMessagingKit/Messages/Signal/TSOutgoingMessage.h +++ b/SessionMessagingKit/Messages/Signal/TSOutgoingMessage.h @@ -133,6 +133,8 @@ typedef NS_ENUM(NSInteger, TSGroupMetaMessage) { @property (nonatomic, readonly) BOOL isVoiceMessage; +@property (nonatomic, nullable) NSString *syncMessageServerHash; + + (nullable instancetype)findMessageWithTimestamp:(uint64_t)timestamp; - (BOOL)shouldBeSaved; diff --git a/SessionMessagingKit/Messages/Signal/TSOutgoingMessage.m b/SessionMessagingKit/Messages/Signal/TSOutgoingMessage.m index 0ee9be72c..c28037270 100644 --- a/SessionMessagingKit/Messages/Signal/TSOutgoingMessage.m +++ b/SessionMessagingKit/Messages/Signal/TSOutgoingMessage.m @@ -206,6 +206,8 @@ NSString *NSStringForOutgoingMessageRecipientState(OWSOutgoingMessageRecipientSt if (!self) { return self; } + + _syncMessageServerHash = nil; _hasSyncedTranscript = NO; diff --git a/SessionMessagingKit/Sending & Receiving/MessageSender.swift b/SessionMessagingKit/Sending & Receiving/MessageSender.swift index c34c9dde8..70017db79 100644 --- a/SessionMessagingKit/Sending & Receiving/MessageSender.swift +++ b/SessionMessagingKit/Sending & Receiving/MessageSender.swift @@ -332,7 +332,8 @@ public final class MessageSender : NSObject { Storage.shared.addReceivedMessageTimestamp(message.sentTimestamp!, using: transaction) // Get the visible message if possible if let tsMessage = TSOutgoingMessage.find(withTimestamp: message.sentTimestamp!) { - tsMessage.serverHash = message.serverHash + if (!isSyncMessage) { tsMessage.serverHash = message.serverHash } + else { tsMessage.syncMessageServerHash = message.serverHash } // Track the open group server message ID tsMessage.openGroupServerMessageID = message.openGroupServerMessageID ?? 0 tsMessage.save(with: transaction)