delete locally and send unsend request

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

@ -108,7 +108,7 @@ final class ContextMenuVC : UIViewController {
} }
func updateMenu(forDelete: Bool = false) -> CGFloat { func updateMenu(forDelete: Bool = false) -> CGFloat {
// Menu // Menu: return the menuHeight
menuView.subviews.forEach({ $0.removeFromSuperview() }) menuView.subviews.forEach({ $0.removeFromSuperview() })
let menuBackgroundView = UIView() let menuBackgroundView = UIView()
menuBackgroundView.backgroundColor = Colors.receivedMessageBackground menuBackgroundView.backgroundColor = Colors.receivedMessageBackground

@ -546,15 +546,29 @@ extension ConversationVC : InputViewDelegate, MessageCellDelegate, ContextMenuAc
} }
func delete(_ viewItem: ConversationViewItem) { func delete(_ viewItem: ConversationViewItem) {
self.contextMenuVC?.updateMenu(forDelete: true) let _ = self.contextMenuVC?.updateMenu(forDelete: true)
} }
func deleteLocally(_ viewItem: ConversationViewItem) { func deleteLocally(_ viewItem: ConversationViewItem) {
// TODO: delete locally viewItem.deleteLocallyAction()
} }
func deleteForEveryone(_ viewItem: ConversationViewItem) { 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) { func save(_ viewItem: ConversationViewItem) {

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

@ -967,7 +967,7 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType)
return [self saveMediaAlbumItems:mediaAlbumItems]; return [self saveMediaAlbumItems:mediaAlbumItems];
} }
- (void)deleteAction - (void)deleteLocallyAction
{ {
[LKStorage writeWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { [LKStorage writeWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
[self.interaction removeWithTransaction:transaction]; [self.interaction removeWithTransaction:transaction];
@ -975,6 +975,11 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType)
[LKStorage.shared cancelPendingMessageSendJobIfNeededForMessage:self.interaction.timestamp using:transaction]; [LKStorage.shared cancelPendingMessageSendJobIfNeededForMessage:self.interaction.timestamp using:transaction];
} }
}]; }];
}
- (void)deleteRemotelyAction
{
// TODO: closefd group and one-on-one chat
if (self.isGroupThread) { if (self.isGroupThread) {
TSGroupThread *groupThread = (TSGroupThread *)self.interaction.thread; TSGroupThread *groupThread = (TSGroupThread *)self.interaction.thread;
@ -989,24 +994,19 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType)
// Get the open group // Get the open group
SNOpenGroupV2 *openGroupV2 = [LKStorage.shared getV2OpenGroupForThreadID:groupThread.uniqueId]; 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 it's an incoming message the user must have moderator status
if (self.interaction.interactionType == OWSInteractionType_IncomingMessage) { if (self.interaction.interactionType == OWSInteractionType_IncomingMessage) {
NSString *userPublicKey = [LKStorage.shared getUserPublicKey]; 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 // Delete the message
BOOL wasSentByUser = (interationType == OWSInteractionType_OutgoingMessage); [[SNOpenGroupAPIV2 deleteMessageWithServerID:message.openGroupServerMessageID fromRoom:openGroupV2.room onServer:openGroupV2.server].catch(^(NSError *error) {
if (openGroupV2 != nil) { // Roll back
[[SNOpenGroupAPIV2 deleteMessageWithServerID:message.openGroupServerMessageID fromRoom:openGroupV2.room onServer:openGroupV2.server].catch(^(NSError *error) { [self.interaction save];
// Roll back }) retainUntilComplete];
[self.interaction save];
}) retainUntilComplete];
}
} }
} }

@ -212,7 +212,7 @@ public final class MessageSender : NSObject {
isSuccess = true isSuccess = true
storage.write(with: { transaction in storage.write(with: { transaction in
MessageSender.handleSuccessfulMessageSend(message, to: destination, isSyncMessage: isSyncMessage, using: transaction) 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 { if let closedGroupControlMessage = message as? ClosedGroupControlMessage, case .new = closedGroupControlMessage.kind {
shouldNotify = true shouldNotify = true

Loading…
Cancel
Save