From e8661cf4d74225253b4c5d58f4abf3283bff29a9 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Tue, 1 Dec 2020 15:44:33 +1100 Subject: [PATCH] Debug --- .../OpenGroupMessage+Conversion.swift | 8 +++-- .../Sending & Receiving/MessageSender.swift | 32 +++++++++++-------- .../Pollers/OpenGroupPoller.swift | 4 +-- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/SessionMessagingKit/Open Groups/OpenGroupMessage+Conversion.swift b/SessionMessagingKit/Open Groups/OpenGroupMessage+Conversion.swift index ac0d95138..1c2eac258 100644 --- a/SessionMessagingKit/Open Groups/OpenGroupMessage+Conversion.swift +++ b/SessionMessagingKit/Open Groups/OpenGroupMessage+Conversion.swift @@ -11,7 +11,11 @@ internal extension OpenGroupMessage { let quote: OpenGroupMessage.Quote? = { if let quote = message.quote { guard quote.isValid else { return nil } - let quotedMessageServerID = TSIncomingMessage.find(withAuthorId: quote.publicKey!, timestamp: quote.timestamp!, transaction: transaction)?.openGroupServerMessageID + var quotedMessageServerID: UInt64? + TSDatabaseSecondaryIndexes.enumerateMessages(withTimestamp: quote.timestamp!, with: { _, key, _ in + guard let message = TSInteraction.fetch(uniqueId: key, transaction: transaction) as? TSMessage else { return } + quotedMessageServerID = message.openGroupServerMessageID + }, using: transaction) let quotedMessageBody = quote.text ?? String(quote.timestamp!) // The back-end doesn't accept messages without a body so we use this as a workaround if let quotedAttachmentID = quote.attachmentID, let index = attachmentIDs.firstIndex(of: quotedAttachmentID) { attachmentIDs.remove(at: index) @@ -62,7 +66,7 @@ internal extension OpenGroupMessage { return OpenGroupMessage.Attachment( kind: .attachment, server: server, - serverID: 0, + serverID: attachment.serverId, contentType: attachment.contentType, size: UInt(attachment.byteCount), fileName: fileName, diff --git a/SessionMessagingKit/Sending & Receiving/MessageSender.swift b/SessionMessagingKit/Sending & Receiving/MessageSender.swift index 6c028235b..2813d5a69 100644 --- a/SessionMessagingKit/Sending & Receiving/MessageSender.swift +++ b/SessionMessagingKit/Sending & Receiving/MessageSender.swift @@ -43,31 +43,34 @@ public final class MessageSender : NSObject { public static let shared = MessageSender() // FIXME: Remove once requestSenderKey is static // MARK: Preparation - public static func prep(_ attachments: [SignalAttachment], for message: VisibleMessage, using transaction: YapDatabaseReadWriteTransaction) { + public static func prep(_ signalAttachments: [SignalAttachment], for message: VisibleMessage, using transaction: YapDatabaseReadWriteTransaction) { guard let tsMessage = TSOutgoingMessage.find(withTimestamp: message.sentTimestamp!) else { #if DEBUG preconditionFailure() - #endif + #else return + #endif } - // Anything added to message.attachmentIDs will be uploaded by an UploadAttachmentJob. Any attachment IDs added to tsMessage will - // make it render as an attachment (not what we want in the case of a link preview or quoted attachment). - var streams: [TSAttachmentStream] = [] - attachments.forEach { - let stream = TSAttachmentStream(contentType: $0.mimeType, byteCount: UInt32($0.dataLength), sourceFilename: $0.sourceFilename, + var attachments: [TSAttachmentStream] = [] + signalAttachments.forEach { + let attachment = TSAttachmentStream(contentType: $0.mimeType, byteCount: UInt32($0.dataLength), sourceFilename: $0.sourceFilename, caption: $0.captionText, albumMessageId: tsMessage.uniqueId!) - streams.append(stream) - stream.write($0.dataSource) - stream.save(with: transaction) + attachments.append(attachment) + attachment.write($0.dataSource) + attachment.save(with: transaction) } + // The line below locally generates a thumbnail for the quoted attachment. It just needs to happen at some point during the + // message sending process. tsMessage.quotedMessage?.createThumbnailAttachmentsIfNecessary(with: transaction) var linkPreviewAttachmentID: String? if let id = tsMessage.linkPreview?.imageAttachmentId, - let stream = TSAttachment.fetch(uniqueId: id, transaction: transaction) as? TSAttachmentStream { + let attachment = TSAttachment.fetch(uniqueId: id, transaction: transaction) as? TSAttachmentStream { linkPreviewAttachmentID = id - streams.append(stream) + attachments.append(attachment) } - message.attachmentIDs = streams.map { $0.uniqueId! } + // Anything added to message.attachmentIDs will be uploaded by an UploadAttachmentJob. Any attachment IDs added to tsMessage will + // make it render as an attachment (not what we want in the case of a link preview or quoted attachment). + message.attachmentIDs = attachments.map { $0.uniqueId! } tsMessage.attachmentIds.addObjects(from: message.attachmentIDs) if let id = linkPreviewAttachmentID { tsMessage.attachmentIds.remove(id) } tsMessage.save(with: transaction) @@ -260,9 +263,10 @@ public final class MessageSender : NSObject { guard let message = message as? VisibleMessage else { #if DEBUG preconditionFailure() - #endif + #else seal.reject(Error.invalidMessage) return promise + #endif } guard message.isValid else { seal.reject(Error.invalidMessage); return promise } // Convert the message to an open group message diff --git a/SessionMessagingKit/Sending & Receiving/Pollers/OpenGroupPoller.swift b/SessionMessagingKit/Sending & Receiving/Pollers/OpenGroupPoller.swift index 1fbe8c974..32f382e90 100644 --- a/SessionMessagingKit/Sending & Receiving/Pollers/OpenGroupPoller.swift +++ b/SessionMessagingKit/Sending & Receiving/Pollers/OpenGroupPoller.swift @@ -75,7 +75,7 @@ public final class OpenGroupPoller : NSObject { dataMessageProto.setBody(body) dataMessageProto.setTimestamp(message.timestamp) // Attachments - let attachments: [SNProtoAttachmentPointer] = message.attachments.compactMap { attachment in + let attachmentProtos: [SNProtoAttachmentPointer] = message.attachments.compactMap { attachment in guard attachment.kind == .attachment else { return nil } let attachmentProto = SNProtoAttachmentPointer.builder(id: attachment.serverID) attachmentProto.setContentType(attachment.contentType) @@ -88,7 +88,7 @@ public final class OpenGroupPoller : NSObject { attachmentProto.setUrl(attachment.url) return try! attachmentProto.build() } - dataMessageProto.setAttachments(attachments) + dataMessageProto.setAttachments(attachmentProtos) // Link preview if let linkPreview = message.attachments.first(where: { $0.kind == .linkPreview }) { let linkPreviewProto = SNProtoDataMessagePreview.builder(url: linkPreview.linkPreviewURL!)