Build link previews.

pull/1/head
Matthew Chen 6 years ago
parent 31ea64bdaf
commit d775a70a89

@ -66,97 +66,6 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Durable Message Enqueue
// TODO: Move this elsewhere.
+ (void)ensureLinkPreviewForMessage:(TSOutgoingMessage *)message completion:(dispatch_block_t)completion
{
OWSAssert(message);
OWSAssert(completion);
if (message.linkPreview != nil) {
// Message already has link preview.
completion();
return;
}
[OWSLinkPreview
tryToBuildPreviewInfoForMessageBodyText:message.body
completion:^(OWSLinkPreviewInfo *_Nullable linkPreviewInfo) {
if (!linkPreviewInfo) {
completion();
return;
}
[self.dbConnection
asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
NSError *linkPreviewError;
OWSLinkPreview *_Nullable linkPreview = [OWSLinkPreview
buildValidatedLinkPreviewFromInfo:linkPreviewInfo
transaction:transaction
error:&linkPreviewError];
if (linkPreviewError
&& ![OWSLinkPreview isNoPreviewError:linkPreviewError]) {
OWSFailDebug(@"linkPreviewError: %@", linkPreviewError);
completion();
return;
}
if (!linkPreview) {
OWSFailDebug(@"Missing linkPreview.");
completion();
return;
}
[message updateWithLinkPreview:linkPreview transaction:transaction];
completion();
}];
}];
}
//+ (TSOutgoingMessage *)enqueueMessageWithText:(NSString *)text
// inThread:(TSThread *)thread
// quotedReplyModel:(nullable OWSQuotedReplyModel *)quotedReplyModel
// linkPreview:(nullable OWSLinkPreview *)linkPreview
// transaction:(YapDatabaseReadTransaction *)transaction
//{
// OWSDisappearingMessagesConfiguration *configuration =
// [OWSDisappearingMessagesConfiguration fetchObjectWithUniqueID:thread.uniqueId transaction:transaction];
//
// uint32_t expiresInSeconds = (configuration.isEnabled ? configuration.durationSeconds : 0);
//
// TSOutgoingMessage *message =
// [TSOutgoingMessage outgoingMessageInThread:thread
// messageBody:text
// attachmentId:nil
// expiresInSeconds:expiresInSeconds
// quotedMessage:[quotedReplyModel buildQuotedMessageForSending]
// linkPreview:linkPreview];
//
// [BenchManager benchAsyncWithTitle:@"Saving outgoing message" block:^(void (^benchmarkCompletion)(void)) {
// // To avoid blocking the send flow, we dispatch an async write from within this read transaction
// AnyPromise *promise = [[AnyPromise promiseWithResolverBlock:^(PMKResolver resolve) {
// [self.dbConnection asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction *writeTransaction) {
// [message saveWithTransaction:writeTransaction];
// }
// completionBlock:^{
// resolve(@(1));
// }];
// }].thenInBackground(^{
// return [AnyPromise promiseWithResolverBlock:^(PMKResolver resolve) {
// [ThreadUtil ensureLinkPreviewForMessage:message
// completion:^{
// resolve(@(1));
// }];
// }];
// }].thenInBackground(^{
// [self.messageSenderJobQueue addMessage:message
// transaction:writeTransaction];
// }].thenInBackground(^{
// benchmarkCompletion();
// }) retainUntilComplete];
// }];
//
// return message;
//}
+ (TSOutgoingMessage *)enqueueMessageWithText:(NSString *)text
inThread:(TSThread *)thread
quotedReplyModel:(nullable OWSQuotedReplyModel *)quotedReplyModel

@ -217,13 +217,17 @@ public class OWSLinkPreview: MTLModel {
// MARK: - Domain Whitelist
// TODO: Finalize
private static let linkDomainWhitelist = [
"youtube.com",
"reddit.com",
"imgur.com",
"instagram.com",
"giphy.com",
"instagram.com"
]
// TODO: Finalize
private static let mediaDomainWhitelist = [
"ytimg.com",
"cdninstagram.com"
@ -233,16 +237,6 @@ public class OWSLinkPreview: MTLModel {
"https"
]
// *.giphy.com
// *.youtube.com
// *.youtu.be
// *.ytimg.com
// *.reddit.com
// *.reddi.it
// *.imgur.com
// *.instagram.com
// *.cdninstagram.com
@objc
public class func isValidLinkUrl(_ urlString: String) -> Bool {
guard let url = URL(string: urlString) else {

@ -61,8 +61,6 @@ NS_ASSUME_NONNULL_BEGIN
- (void)updateWithExpireStartedAt:(uint64_t)expireStartedAt transaction:(YapDatabaseReadWriteTransaction *)transaction;
- (void)updateWithLinkPreview:(OWSLinkPreview *)linkPreview transaction:(YapDatabaseReadWriteTransaction *)transaction;
@end
NS_ASSUME_NONNULL_END

@ -48,8 +48,6 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
*/
@property (nonatomic, readonly) NSUInteger schemaVersion;
@property (nonatomic, nullable) OWSLinkPreview *linkPreview;
@end
#pragma mark -
@ -421,17 +419,6 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
}];
}
- (void)updateWithLinkPreview:(OWSLinkPreview *)linkPreview transaction:(YapDatabaseReadWriteTransaction *)transaction
{
OWSAssertDebug(linkPreview);
OWSAssertDebug(transaction);
[self applyChangeToSelfAndLatestCopy:transaction
changeBlock:^(TSOutgoingMessage *message) {
message.linkPreview = linkPreview;
}];
}
@end
NS_ASSUME_NONNULL_END

@ -354,66 +354,6 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
OWSAssertDebug([message.body lengthOfBytesUsingEncoding:NSUTF8StringEncoding] <= kOversizeTextMessageSizeThreshold);
}
[self ensureLinkPreviewForMessage:message
completion:^{
[self prepareMessageAndEnqueue:message success:successHandler failure:failureHandler];
}];
}
- (void)ensureLinkPreviewForMessage:(TSOutgoingMessage *)message completion:(dispatch_block_t)completion
{
OWSAssert(message);
OWSAssert(completion);
if (message.linkPreview != nil) {
// Message already has link preview.
completion();
return;
}
[OWSLinkPreview
tryToBuildPreviewInfoForMessageBodyText:message.body
completion:^(OWSLinkPreviewInfo *_Nullable linkPreviewInfo) {
if (!linkPreviewInfo) {
completion();
return;
}
[self.dbConnection
asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
NSError *linkPreviewError;
OWSLinkPreview *_Nullable linkPreview = [OWSLinkPreview
buildValidatedLinkPreviewFromInfo:linkPreviewInfo
transaction:transaction
error:&linkPreviewError];
if (linkPreviewError
&& ![OWSLinkPreview isNoPreviewError:linkPreviewError]) {
OWSFailDebug(@"linkPreviewError: %@", linkPreviewError);
completion();
return;
}
if (!linkPreview) {
OWSFailDebug(@"Missing linkPreview.");
completion();
return;
}
[message updateWithLinkPreview:linkPreview transaction:transaction];
completion();
}];
}];
}
- (void)prepareMessageAndEnqueue:(TSOutgoingMessage *)message
success:(void (^)(void))successHandler
failure:(void (^)(NSError *error))failureHandler
{
OWSAssertDebug(message);
if (message.body.length > 0) {
OWSAssertDebug(
[message.body lengthOfBytesUsingEncoding:NSUTF8StringEncoding] <= kOversizeTextMessageSizeThreshold);
}
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
__block NSArray<TSAttachmentStream *> *quotedThumbnailAttachments = @[];

Loading…
Cancel
Save