diff --git a/Signal/src/Loki/LokiGroupChatPoller.swift b/Signal/src/Loki/LokiGroupChatPoller.swift index 56f43e51f..40a42708e 100644 --- a/Signal/src/Loki/LokiGroupChatPoller.swift +++ b/Signal/src/Loki/LokiGroupChatPoller.swift @@ -93,6 +93,15 @@ public final class LokiGroupChatPoller : NSObject { guard let messageID = message.uniqueId else { return print("[Loki] Failed to save group message.") } storage.setIDForMessageWithServerID(UInt(messageServerID), to: messageID, in: transaction) } + if let url = OWSLinkPreview.previewUrl(forMessageBodyText: message.body, selectedRange: nil) { + let _ = OWSLinkPreview.tryToBuildPreviewInfo(previewUrl: url).done { linkPreviewDraft in + OWSPrimaryStorage.shared().dbReadWriteConnection.readWrite { transaction in + guard let linkPreview = try? OWSLinkPreview.buildValidatedLinkPreview(fromInfo: linkPreviewDraft, transaction: transaction) else { return } + message.linkPreview = linkPreview + message.save(with: transaction) + } + } + } } // Poll let _ = LokiGroupChatAPI.getMessages(for: group.serverID, on: group.server).done { messages in diff --git a/SignalServiceKit/src/Messages/Interactions/OWSLinkPreview.swift b/SignalServiceKit/src/Messages/Interactions/OWSLinkPreview.swift index d7a5bbf8d..5c639d05a 100644 --- a/SignalServiceKit/src/Messages/Interactions/OWSLinkPreview.swift +++ b/SignalServiceKit/src/Messages/Interactions/OWSLinkPreview.swift @@ -435,6 +435,11 @@ public class OWSLinkPreview: MTLModel { return previewUrl(forMessageBodyText: body, selectedRange: selectedRange) } + @objc + public class func previewURL(forRawBodyText body: String?) -> String? { + return previewUrl(forMessageBodyText: body, selectedRange: nil) + } + public class func previewUrl(forMessageBodyText body: String?, selectedRange: NSRange?) -> String? { AssertIsOnMainThread() diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index 58b149cd2..8694623aa 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -1407,19 +1407,18 @@ NS_ASSUME_NONNULL_BEGIN [self.primaryStorage setIDForMessageWithServerID:dataMessage.publicChatInfo.serverID to:incomingMessage.uniqueId in:transaction]; } - if (linkPreview != nil) { - [OWSLinkPreview tryToBuildPreviewInfoObjcWithPreviewUrl:linkPreview.urlString] + NSString *url = [OWSLinkPreview previewURLForRawBodyText:incomingMessage.body]; + if (url != nil) { + [OWSLinkPreview tryToBuildPreviewInfoObjcWithPreviewUrl:url] .thenOn(dispatch_get_main_queue(), ^(OWSLinkPreviewDraft *linkPreviewDraft) { - if (linkPreviewDraft.jpegImageData == nil) { return; } [OWSPrimaryStorage.sharedManager.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { - NSString *attachmentID = [OWSLinkPreview buildValidatedLinkPreviewFromInfo:linkPreviewDraft transaction:transaction error:nil].imageAttachmentId; - linkPreview.imageAttachmentId = attachmentID; + OWSLinkPreview *linkPreview = [OWSLinkPreview buildValidatedLinkPreviewFromInfo:linkPreviewDraft transaction:transaction error:nil]; incomingMessage.linkPreview = linkPreview; [incomingMessage saveWithTransaction:transaction]; }]; }); - }; - + } + return incomingMessage; } default: {