Implement link previews for group conversations

pull/47/head
Niels Andriesse 6 years ago
parent a3a64218f9
commit da00c04a2c

@ -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

@ -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()

@ -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: {

Loading…
Cancel
Save