From 6aa865e7b7091045664ace7adfd7d7a19c68da0c Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Fri, 30 Jul 2021 16:51:43 +1000 Subject: [PATCH] delete locally and send unsend request --- .../Context Menu/ContextMenuVC.swift | 2 +- .../ConversationVC+Interaction.swift | 20 +++++++++++++--- Session/Conversations/ConversationViewItem.h | 3 ++- Session/Conversations/ConversationViewItem.m | 24 +++++++++---------- .../Sending & Receiving/MessageSender.swift | 2 +- 5 files changed, 33 insertions(+), 18 deletions(-) diff --git a/Session/Conversations/Context Menu/ContextMenuVC.swift b/Session/Conversations/Context Menu/ContextMenuVC.swift index 5e699ff3d..14cfc785a 100644 --- a/Session/Conversations/Context Menu/ContextMenuVC.swift +++ b/Session/Conversations/Context Menu/ContextMenuVC.swift @@ -108,7 +108,7 @@ final class ContextMenuVC : UIViewController { } func updateMenu(forDelete: Bool = false) -> CGFloat { - // Menu + // Menu: return the menuHeight menuView.subviews.forEach({ $0.removeFromSuperview() }) let menuBackgroundView = UIView() menuBackgroundView.backgroundColor = Colors.receivedMessageBackground diff --git a/Session/Conversations/ConversationVC+Interaction.swift b/Session/Conversations/ConversationVC+Interaction.swift index 3694d1fdc..44a5ca0cb 100644 --- a/Session/Conversations/ConversationVC+Interaction.swift +++ b/Session/Conversations/ConversationVC+Interaction.swift @@ -546,15 +546,29 @@ extension ConversationVC : InputViewDelegate, MessageCellDelegate, ContextMenuAc } func delete(_ viewItem: ConversationViewItem) { - self.contextMenuVC?.updateMenu(forDelete: true) + let _ = self.contextMenuVC?.updateMenu(forDelete: true) } func deleteLocally(_ viewItem: ConversationViewItem) { - // TODO: delete locally + viewItem.deleteLocallyAction() } func deleteForEveryone(_ viewItem: ConversationViewItem) { - // TODO: delete for everyone + viewItem.deleteLocallyAction() + viewItem.deleteRemotelyAction() + let unsendRequest = UnsendRequest() + switch viewItem.interaction.interactionType() { + case .incomingMessage: + if let incomingMessage = viewItem.interaction as? TSIncomingMessage { + unsendRequest.author = incomingMessage.authorId + } + case .outgoingMessage: unsendRequest.author = getUserHexEncodedPublicKey() + default: return // Should never occur + } + unsendRequest.timestamp = viewItem.interaction.timestamp + SNMessagingKitConfiguration.shared.storage.write { transaction in + MessageSender.send(unsendRequest, in: self.thread, using: transaction as! YapDatabaseReadWriteTransaction) + } } func save(_ viewItem: ConversationViewItem) { diff --git a/Session/Conversations/ConversationViewItem.h b/Session/Conversations/ConversationViewItem.h index ea06f62aa..e514ba3f8 100644 --- a/Session/Conversations/ConversationViewItem.h +++ b/Session/Conversations/ConversationViewItem.h @@ -132,7 +132,8 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType); - (void)copyTextAction; - (void)shareMediaAction; - (void)saveMediaAction; -- (void)deleteAction; +- (void)deleteLocallyAction; +- (void)deleteRemotelyAction; - (BOOL)canCopyMedia; - (BOOL)canSaveMedia; diff --git a/Session/Conversations/ConversationViewItem.m b/Session/Conversations/ConversationViewItem.m index 86165a028..02b1c0c8f 100644 --- a/Session/Conversations/ConversationViewItem.m +++ b/Session/Conversations/ConversationViewItem.m @@ -967,7 +967,7 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType) return [self saveMediaAlbumItems:mediaAlbumItems]; } -- (void)deleteAction +- (void)deleteLocallyAction { [LKStorage writeWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { [self.interaction removeWithTransaction:transaction]; @@ -975,6 +975,11 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType) [LKStorage.shared cancelPendingMessageSendJobIfNeededForMessage:self.interaction.timestamp using:transaction]; } }]; +} + +- (void)deleteRemotelyAction +{ + // TODO: closefd group and one-on-one chat if (self.isGroupThread) { TSGroupThread *groupThread = (TSGroupThread *)self.interaction.thread; @@ -989,24 +994,19 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType) // Get the open group SNOpenGroupV2 *openGroupV2 = [LKStorage.shared getV2OpenGroupForThreadID:groupThread.uniqueId]; - if (openGroup == nil && openGroupV2 == nil) return; + if (openGroupV2 == nil) return; // If it's an incoming message the user must have moderator status if (self.interaction.interactionType == OWSInteractionType_IncomingMessage) { NSString *userPublicKey = [LKStorage.shared getUserPublicKey]; - if (openGroupV2 != nil) { - if (![SNOpenGroupAPIV2 isUserModerator:userPublicKey forRoom:openGroupV2.room onServer:openGroupV2.server]) { return; } - } + if (![SNOpenGroupAPIV2 isUserModerator:userPublicKey forRoom:openGroupV2.room onServer:openGroupV2.server]) { return; } } // Delete the message - BOOL wasSentByUser = (interationType == OWSInteractionType_OutgoingMessage); - if (openGroupV2 != nil) { - [[SNOpenGroupAPIV2 deleteMessageWithServerID:message.openGroupServerMessageID fromRoom:openGroupV2.room onServer:openGroupV2.server].catch(^(NSError *error) { - // Roll back - [self.interaction save]; - }) retainUntilComplete]; - } + [[SNOpenGroupAPIV2 deleteMessageWithServerID:message.openGroupServerMessageID fromRoom:openGroupV2.room onServer:openGroupV2.server].catch(^(NSError *error) { + // Roll back + [self.interaction save]; + }) retainUntilComplete]; } } diff --git a/SessionMessagingKit/Sending & Receiving/MessageSender.swift b/SessionMessagingKit/Sending & Receiving/MessageSender.swift index 456ba6e23..746466fb6 100644 --- a/SessionMessagingKit/Sending & Receiving/MessageSender.swift +++ b/SessionMessagingKit/Sending & Receiving/MessageSender.swift @@ -212,7 +212,7 @@ public final class MessageSender : NSObject { isSuccess = true storage.write(with: { transaction in MessageSender.handleSuccessfulMessageSend(message, to: destination, isSyncMessage: isSyncMessage, using: transaction) - var shouldNotify = (message is VisibleMessage && !isSyncMessage) + var shouldNotify = ((message is VisibleMessage || message is UnsendRequest) && !isSyncMessage) /* if let closedGroupControlMessage = message as? ClosedGroupControlMessage, case .new = closedGroupControlMessage.kind { shouldNotify = true