Fix public chat message deletion
This commit is contained in:
parent
29b0ea9b04
commit
8b3c2cc32f
|
@ -116,6 +116,8 @@ class ConversationViewItemActions: NSObject {
|
|||
class func mediaActions(conversationViewItem: ConversationViewItem, shouldAllowReply: Bool, delegate: MessageActionsDelegate) -> [MenuAction] {
|
||||
var actions: [MenuAction] = []
|
||||
|
||||
let isGroup = conversationViewItem.isGroupThread;
|
||||
|
||||
if shouldAllowReply {
|
||||
let replyAction = MessageActionBuilder.reply(conversationViewItem: conversationViewItem, delegate: delegate)
|
||||
actions.append(replyAction)
|
||||
|
@ -132,8 +134,10 @@ class ConversationViewItemActions: NSObject {
|
|||
}
|
||||
}
|
||||
|
||||
let deleteAction = MessageActionBuilder.deleteMessage(conversationViewItem: conversationViewItem, delegate: delegate)
|
||||
actions.append(deleteAction)
|
||||
if !isGroup || conversationViewItem.userCanDeleteGroupMessage {
|
||||
let deleteAction = MessageActionBuilder.deleteMessage(conversationViewItem: conversationViewItem, delegate: delegate)
|
||||
actions.append(deleteAction)
|
||||
}
|
||||
|
||||
let showDetailsAction = MessageActionBuilder.showDetails(conversationViewItem: conversationViewItem, delegate: delegate)
|
||||
actions.append(showDetailsAction)
|
||||
|
|
|
@ -1269,13 +1269,13 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType)
|
|||
}];
|
||||
if (publicChat == nil) return false;
|
||||
|
||||
// Only allow deletion on incoming messages if the user has moderation permission
|
||||
if (interationType == OWSInteractionType_IncomingMessage) {
|
||||
BOOL isModerator = [LKPublicChatAPI isUserModerator:self.userHexEncodedPublicKey forGroup:publicChat.channel onServer:publicChat.server];
|
||||
if (!isModerator) return false;
|
||||
// Only allow deletion on incoming messages if the user has moderation permission
|
||||
return [LKPublicChatAPI isUserModerator:self.userHexEncodedPublicKey forGroup:publicChat.channel onServer:publicChat.server];
|
||||
} else {
|
||||
// Only allow deletion on outgoing messages if the user was the sender (i.e. it was not sent from another linked device)
|
||||
return [self.interaction.actualSenderHexEncodedPublicKey isEqual:self.userHexEncodedPublicKey];
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -147,17 +147,18 @@ public final class LokiPublicChatPoller : NSObject {
|
|||
signalLinkPreview = nil
|
||||
}
|
||||
let body = (message.body == message.timestamp.description) ? "" : message.body // Workaround for the fact that the back-end doesn't accept messages without a body
|
||||
let message = TSOutgoingMessage(outgoingMessageWithTimestamp: message.timestamp, in: thread, messageBody: body, attachmentIds: NSMutableArray(array: attachmentIDs), expiresInSeconds: 0,
|
||||
let signalMessage = TSOutgoingMessage(outgoingMessageWithTimestamp: message.timestamp, in: thread, messageBody: body, attachmentIds: NSMutableArray(array: attachmentIDs), expiresInSeconds: 0,
|
||||
expireStartedAt: 0, isVoiceMessage: false, groupMetaMessage: .deliver, quotedMessage: signalQuote, contactShare: nil, linkPreview: signalLinkPreview)
|
||||
signalMessage.actualSenderHexEncodedPublicKey = message.hexEncodedPublicKey
|
||||
storage.dbReadWriteConnection.readWrite { transaction in
|
||||
message.update(withSentRecipient: publicChat.server, wasSentByUD: false, transaction: transaction)
|
||||
message.saveGroupChatServerID(messageServerID, in: transaction)
|
||||
guard let messageID = message.uniqueId else { return print("[Loki] Failed to save public chat message.") }
|
||||
signalMessage.update(withSentRecipient: publicChat.server, wasSentByUD: false, transaction: transaction)
|
||||
signalMessage.saveGroupChatServerID(messageServerID, in: transaction)
|
||||
guard let messageID = signalMessage.uniqueId else { return print("[Loki] Failed to save public chat message.") }
|
||||
storage.setIDForMessageWithServerID(UInt(messageServerID), to: messageID, in: transaction)
|
||||
}
|
||||
DispatchQueue.main.async {
|
||||
if let linkPreviewURL = OWSLinkPreview.previewUrl(forMessageBodyText: message.body, selectedRange: nil) {
|
||||
message.generateLinkPreviewIfNeeded(fromURL: linkPreviewURL)
|
||||
signalMessage.generateLinkPreviewIfNeeded(fromURL: linkPreviewURL)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,6 +39,9 @@ NSString *NSStringFromOWSInteractionType(OWSInteractionType value);
|
|||
@property (nonatomic, readonly) uint64_t timestamp;
|
||||
@property (nonatomic, readonly) uint64_t sortId;
|
||||
@property (nonatomic, readonly) uint64_t receivedAtTimestamp;
|
||||
/// Used for public chats where a message sent from a slave device is interpreted as having been sent from the master device.
|
||||
@property (nonatomic) NSString *actualSenderHexEncodedPublicKey;
|
||||
|
||||
- (NSDate *)receivedAtDate;
|
||||
|
||||
- (OWSInteractionType)interactionType;
|
||||
|
|
Loading…
Reference in New Issue