delete locally and send unsend request

pull/484/head
Ryan Zhao 3 years ago
parent 7be6d13afd
commit 6aa865e7b7

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

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

@ -132,7 +132,8 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType);
- (void)copyTextAction;
- (void)shareMediaAction;
- (void)saveMediaAction;
- (void)deleteAction;
- (void)deleteLocallyAction;
- (void)deleteRemotelyAction;
- (BOOL)canCopyMedia;
- (BOOL)canSaveMedia;

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

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

Loading…
Cancel
Save