Merge pull request #47 from loki-project/link-previews

Link Previews
pull/49/head
gmbnt 6 years ago committed by GitHub
commit a92db64cd0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -6,14 +6,10 @@
<dict>
<key>CarthageVersion</key>
<string>0.33.0</string>
<key>DateTime</key>
<string>Thu Sep 5 00:37:14 UTC 2019</string>
<key>OSXVersion</key>
<string>10.14.6</string>
<key>WebRTCCommit</key>
<string>1445d719bf05280270e9f77576f80f973fd847f8 M73</string>
<key>XCodeVersion</key>
<string>1000.1030</string>
</dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>

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

@ -6,6 +6,7 @@ final class QRCodeViewController : OWSViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.lokiDarkestGray()
let stackView = UIStackView(arrangedSubviews: [])
stackView.axis = .vertical
stackView.spacing = 32

@ -819,17 +819,16 @@ public class LinkPreviewView: UIStackView {
public func addBorderViews(bubbleView: OWSBubbleView) {
if let heroImageView = self.heroImageView {
let borderView = OWSBubbleShapeView(draw: ())
borderView.strokeColor = Theme.primaryColor
borderView.strokeThickness = CGHairlineWidth()
borderView.strokeColor = UIColor.clear
borderView.strokeThickness = 0
heroImageView.addSubview(borderView)
bubbleView.addPartnerView(borderView)
borderView.ows_autoPinToSuperviewEdges()
}
if let sentBodyView = self.sentBodyView {
let borderView = OWSBubbleShapeView(draw: ())
let borderColor = UIColor(rgbHex: Theme.isDarkThemeEnabled ? 0x0F1012 : 0xD5D6D6)
borderView.strokeColor = borderColor
borderView.strokeThickness = CGHairlineWidth()
borderView.strokeColor = UIColor.clear
borderView.strokeThickness = 0
sentBodyView.addSubview(borderView)
bubbleView.addPartnerView(borderView)
borderView.ows_autoPinToSuperviewEdges()

@ -138,7 +138,6 @@ typedef void (^BuildOutgoingMessageCompletionBlock)(TSOutgoingMessage *savedMess
}];
}
// Loki: TODO Disable attachment and link preview for now
+ (TSOutgoingMessage *)buildOutgoingMessageWithText:(nullable NSString *)fullMessageText
mediaAttachments:(NSArray<SignalAttachment *> *)mediaAttachments
thread:(TSThread *)thread

@ -158,7 +158,8 @@ public class OWSLinkPreview: MTLModel {
title = normalizedTitle
}
}
/*
var imageAttachmentId: String?
if let imageProto = previewProto.image {
if let imageAttachmentPointer = TSAttachmentPointer(fromProto: imageProto, albumMessage: nil) {
@ -169,8 +170,9 @@ public class OWSLinkPreview: MTLModel {
throw LinkPreviewError.invalidInput
}
}
*/
let linkPreview = OWSLinkPreview(urlString: urlString, title: title, imageAttachmentId: imageAttachmentId)
let linkPreview = OWSLinkPreview(urlString: urlString, title: title, imageAttachmentId: nil)
guard linkPreview.isValid() else {
Logger.error("Preview has neither title nor image.")
@ -433,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()

@ -37,7 +37,7 @@ typedef NS_ENUM(NSInteger, LKMessageFriendRequestStatus) {
@property (nonatomic, readonly) BOOL isExpiringMessage;
@property (nonatomic, readonly, nullable) TSQuotedMessage *quotedMessage;
@property (nonatomic, readonly, nullable) OWSContact *contactShare;
@property (nonatomic, readonly, nullable) OWSLinkPreview *linkPreview;
@property (nonatomic, nullable) OWSLinkPreview *linkPreview;
// Loki friend request handling
@property (nonatomic) LKMessageFriendRequestStatus friendRequestStatus;
@property (nonatomic, readonly) NSString *friendRequestStatusDescription;

@ -48,8 +48,6 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
*/
@property (nonatomic, readonly) NSUInteger schemaVersion;
@property (nonatomic, nullable) OWSLinkPreview *linkPreview;
@end
#pragma mark -

@ -1406,7 +1406,19 @@ NS_ASSUME_NONNULL_BEGIN
if (dataMessage.publicChatInfo != nil && dataMessage.publicChatInfo.hasServerID) {
[self.primaryStorage setIDForMessageWithServerID:dataMessage.publicChatInfo.serverID to:incomingMessage.uniqueId in:transaction];
}
NSString *url = [OWSLinkPreview previewURLForRawBodyText:incomingMessage.body];
if (url != nil) {
[OWSLinkPreview tryToBuildPreviewInfoObjcWithPreviewUrl:url]
.thenOn(dispatch_get_main_queue(), ^(OWSLinkPreviewDraft *linkPreviewDraft) {
[OWSPrimaryStorage.sharedManager.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
OWSLinkPreview *linkPreview = [OWSLinkPreview buildValidatedLinkPreviewFromInfo:linkPreviewDraft transaction:transaction error:nil];
incomingMessage.linkPreview = linkPreview;
[incomingMessage saveWithTransaction:transaction];
}];
});
}
return incomingMessage;
}
default: {
@ -1491,6 +1503,19 @@ NS_ASSUME_NONNULL_BEGIN
thread:thread
envelope:envelope
transaction:transaction];
if (linkPreview != nil) {
[OWSLinkPreview tryToBuildPreviewInfoObjcWithPreviewUrl:linkPreview.urlString]
.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;
incomingMessage.linkPreview = linkPreview;
[incomingMessage saveWithTransaction:transaction];
}];
});
};
return incomingMessage;
}

@ -1978,6 +1978,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
}
}
/*
if (message.linkPreview.imageAttachmentId != nil) {
TSAttachment *attachment =
[TSAttachment fetchObjectWithUniqueID:message.linkPreview.imageAttachmentId transaction:transaction];
@ -1987,6 +1988,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
OWSFailDebug(@"unexpected attachment: %@", attachment);
}
}
*/
// All outgoing messages should be saved at the time they are enqueued.
[message saveWithTransaction:transaction];

Loading…
Cancel
Save