sending & receiving

pull/638/head
ryanzhao 2 years ago
parent 49706f620f
commit 927f44ac68

@ -852,7 +852,7 @@ extension ConversationVC : InputViewDelegate, MessageCellDelegate, ContextMenuAc
else {
message.addReaction(reactMessage, transaction: transaction)
}
// MessageSender.send(visibleMessage, in: thread, using: transaction)
MessageSender.send(visibleMessage, in: thread, using: transaction)
}
}

@ -75,7 +75,7 @@ public final class MessageSendJob : NSObject, Job, NSCoding { // NSObject/NSCodi
}
let storage = SNMessagingKitConfiguration.shared.storage
if let message = message as? VisibleMessage {
guard TSOutgoingMessage.find(withTimestamp: message.sentTimestamp!) != nil else { return } // The message has been deleted
guard TSOutgoingMessage.find(withTimestamp: message.sentTimestamp!) != nil || message.reaction != nil else { return } // The message has been deleted
let attachments = message.attachmentIDs.compactMap { TSAttachment.fetch(uniqueId: $0) as? TSAttachmentStream }
let attachmentsToUpload = attachments.filter { !$0.isUploaded }
attachmentsToUpload.forEach { attachment in

@ -464,6 +464,9 @@ const NSUInteger kOversizeTextMessageSizeThreshold = 2 * 1024;
changeBlock:^(TSMessage *message) {
if (![message.reactions containsObject:reaction]) {
[message.reactions addObject:reaction];
} else {
NSUInteger index = [message.reactions indexOfObject:reaction];
[message.reactions replaceObjectAtIndex:index withObject:reaction];
}
}];
}

@ -110,7 +110,7 @@ public final class VisibleMessage : Message {
// Open group invitation
if let openGroupInvitation = openGroupInvitation, let openGroupInvitationProto = openGroupInvitation.toProto() { dataMessage.setOpenGroupInvitation(openGroupInvitationProto) }
// Emoji react
if let reaction = reaction, let reactionProto = reaction.toProto() {
if let reaction = reaction, let reactionProto = reaction.toProto(using: transaction) {
dataMessage.setReaction(reactionProto)
}
// Group context

@ -36,4 +36,18 @@ public final class ReactMessage : MTLModel {
public required init(dictionary dictionaryValue: [String: Any]!) throws {
try super.init(dictionary: dictionaryValue)
}
@objc
public func isSelfReact() -> Bool {
return sender == getUserHexEncodedPublicKey()
}
@objc
public override func isEqual(_ object: Any!) -> Bool {
guard let other = object as? ReactMessage else { return false }
return other.sender == self.sender &&
other.emoji == self.emoji &&
other.timestamp == self.timestamp &&
other.authorId == self.authorId
}
}

@ -376,6 +376,28 @@ extension MessageReceiver {
}
// Get or create thread
guard let threadID = storage.getOrCreateThread(for: message.syncTarget ?? message.sender!, groupPublicKey: message.groupPublicKey, openGroupID: openGroupID, using: transaction) else { throw Error.noThread }
// Handle emoji reacts first
if let reaction = message.reaction, proto.dataMessage?.reaction != nil, let author = reaction.publicKey, let timestamp = reaction.timestamp {
var tsMessage: TSMessage?
if author == getUserHexEncodedPublicKey() {
tsMessage = TSOutgoingMessage.find(withTimestamp: timestamp)
} else {
tsMessage = TSIncomingMessage.find(withAuthorId: author, timestamp: timestamp, transaction: transaction)
}
let reactionMessage = ReactMessage(timestamp: timestamp, authorId: author, emoji: reaction.emoji)
reactionMessage.sender = message.sender
if let serverID = message.openGroupServerMessageID { reactionMessage.messageId = "\(serverID)" }
if let serverHash = message.serverHash { reactionMessage.messageId = serverHash }
switch reaction.kind {
case .react:
tsMessage?.addReaction(reactionMessage, transaction: transaction)
case .remove:
tsMessage?.removeReaction(reactionMessage, transaction: transaction)
case .none:
break
}
return ""
}
// Parse quote if needed
var tsQuotedMessage: TSQuotedMessage? = nil
if message.quote != nil && proto.dataMessage?.quote != nil, let thread = TSThread.fetch(uniqueId: threadID, transaction: transaction) {

Loading…
Cancel
Save