delete real message and sync message together

This commit is contained in:
ryanzhao 2021-08-04 11:49:21 +10:00
parent dd2f8c7df9
commit cc17a952e0
4 changed files with 16 additions and 4 deletions

View File

@ -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];

View File

@ -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;

View File

@ -206,6 +206,8 @@ NSString *NSStringForOutgoingMessageRecipientState(OWSOutgoingMessageRecipientSt
if (!self) {
return self;
}
_syncMessageServerHash = nil;
_hasSyncedTranscript = NO;

View File

@ -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)