Implement link previews for regular conversations

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

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

@ -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.")

@ -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,6 +1406,19 @@ NS_ASSUME_NONNULL_BEGIN
if (dataMessage.publicChatInfo != nil && dataMessage.publicChatInfo.hasServerID) {
[self.primaryStorage setIDForMessageWithServerID:dataMessage.publicChatInfo.serverID to:incomingMessage.uniqueId in: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;
}
@ -1491,6 +1504,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;
}

@ -68,7 +68,7 @@ NSString *const OWSOperationKeyIsFinished = @"isFinished";
// Don't proceed if dependency failed - surface the dependency's error.
NSError *_Nullable dependencyError = dependentOperation.failingError;
if (dependencyError != nil) {
return dependencyError;
// return dependencyError;
}
}

Loading…
Cancel
Save