diff --git a/Signal/src/Loki/LokiGroupChatPoller.swift b/Signal/src/Loki/LokiGroupChatPoller.swift index 78fb92019..d35baa966 100644 --- a/Signal/src/Loki/LokiGroupChatPoller.swift +++ b/Signal/src/Loki/LokiGroupChatPoller.swift @@ -105,14 +105,8 @@ 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) - } - } + if let linkPreviewURL = OWSLinkPreview.previewUrl(forMessageBodyText: message.body, selectedRange: nil) { + message.generateLinkPreviewIfNeeded(fromURL: linkPreviewURL) } } // Poll diff --git a/SignalServiceKit/src/Messages/Interactions/OWSLinkPreview.swift b/SignalServiceKit/src/Messages/Interactions/OWSLinkPreview.swift index c98a26d74..4306b14b2 100644 --- a/SignalServiceKit/src/Messages/Interactions/OWSLinkPreview.swift +++ b/SignalServiceKit/src/Messages/Interactions/OWSLinkPreview.swift @@ -338,6 +338,9 @@ public class OWSLinkPreview: MTLModel { // Giphy "giphy.com", "media.giphy.com", + "media1.giphy.com", + "media2.giphy.com", + "media3.giphy.com", "gph.is" ] @@ -724,7 +727,7 @@ public class OWSLinkPreview: MTLModel { } } - @objc(getImagePreviewFromUrl:transaction:) + @objc(getImagePreviewWithURL:transaction:) public class func objc_getImagePreview(url: String, in transaction: YapDatabaseReadWriteTransaction) -> AnyPromise { return AnyPromise.from(getImagePreview(from: url, in: transaction)) } diff --git a/SignalServiceKit/src/Messages/Interactions/TSMessage.m b/SignalServiceKit/src/Messages/Interactions/TSMessage.m index 033d5a80d..984b965f1 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSMessage.m +++ b/SignalServiceKit/src/Messages/Interactions/TSMessage.m @@ -516,8 +516,6 @@ static const NSUInteger OWSMessageSchemaVersion = 4; - (void)generateLinkPreviewIfNeededFromURL:(NSString *)url { - // If we already have a link preview or attachment then don't bother - if (self.linkPreview != nil || self.hasAttachments) { return; } [OWSLinkPreview tryToBuildPreviewInfoObjcWithPreviewUrl:url] .thenOn(dispatch_get_main_queue(), ^(OWSLinkPreviewDraft *linkPreviewDraft) { [self.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { @@ -531,28 +529,25 @@ static const NSUInteger OWSMessageSchemaVersion = 4; if ([OWSLinkPreview isInvalidContentError:error]) { __block AnyPromise *promise; [self.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { - promise = [OWSLinkPreview getImagePreviewFromUrl:url transaction:transaction]; + promise = [OWSLinkPreview getImagePreviewWithURL:url transaction:transaction] + .thenOn(dispatch_get_main_queue(), ^(OWSLinkPreview *linkPreview) { + // If we managed to get a direct image preview then render it + [self.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + if (linkPreview.isDirectAttachment) { + [self addAttachmentWithID:linkPreview.imageAttachmentId in:transaction]; + TSAttachmentStream *attachment = [TSAttachmentStream fetchObjectWithUniqueID:linkPreview.imageAttachmentId transaction:transaction]; + attachment.albumMessageId = self.uniqueId; + attachment.isUploaded = true; + [attachment saveWithTransaction:transaction]; + } else { + // Do nothing + } + }]; + }); }]; return promise; } - return [AnyPromise promiseWithValue:error]; - }) - .thenOn(dispatch_get_main_queue(), ^(OWSLinkPreview *linkPreview) { - // If we managed to get a direct image preview then render it - [self.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { - if (linkPreview.isDirectAttachment) { - if (!self.hasAttachments) { - [self addAttachmentWithID:linkPreview.imageAttachmentId in:transaction]; - TSAttachmentStream *linkPreviewAttachment = [TSAttachmentStream fetchObjectWithUniqueID:linkPreview.imageAttachmentId transaction:transaction]; - linkPreviewAttachment.albumMessageId = self.uniqueId; - linkPreviewAttachment.isUploaded = true; - [linkPreviewAttachment saveWithTransaction:transaction]; - } - } else { - self.linkPreview = linkPreview; - [self saveWithTransaction:transaction]; - } - }]; + @throw error; }); } diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index dea615411..15add31f4 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -1407,9 +1407,9 @@ NS_ASSUME_NONNULL_BEGIN } dispatch_async(dispatch_get_main_queue(), ^{ - NSString *url = [OWSLinkPreview previewURLForRawBodyText:incomingMessage.body]; - if (url != nil) { - [incomingMessage generateLinkPreviewIfNeededFromURL:url]; + NSString *linkPreviewURL = [OWSLinkPreview previewURLForRawBodyText:incomingMessage.body]; + if (linkPreviewURL != nil) { + [incomingMessage generateLinkPreviewIfNeededFromURL:linkPreviewURL]; } }); diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index 3795aa8b2..c6ab8afdd 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -1244,8 +1244,8 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; TSMessage *message = messageSend.message; if (message.linkPreview == nil && !message.hasAttachments) { dispatch_async(dispatch_get_main_queue(), ^{ - NSString *url = [OWSLinkPreview previewURLForRawBodyText:message.body]; - if (url) { [message generateLinkPreviewIfNeededFromURL:url]; } + NSString *linkPreviewURL = [OWSLinkPreview previewURLForRawBodyText:message.body]; + if (linkPreviewURL) { [message generateLinkPreviewIfNeededFromURL:linkPreviewURL]; } }); }