mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
Merge branch 'charlesmchen/linkPreviews2'
This commit is contained in:
commit
74ccee26a8
49 changed files with 324 additions and 107 deletions
2
Pods
2
Pods
|
@ -1 +1 @@
|
||||||
Subproject commit b46f53105951613fedd8117b83931f43f6ab12f1
|
Subproject commit ea60f60ea01bc51fc2434248890b494e37da98a5
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
@ -452,6 +452,7 @@ private class MockIncomingMessage: TSIncomingMessage {
|
||||||
expiresInSeconds: 0,
|
expiresInSeconds: 0,
|
||||||
quotedMessage: nil,
|
quotedMessage: nil,
|
||||||
contactShare: nil,
|
contactShare: nil,
|
||||||
|
linkPreview: nil,
|
||||||
serverTimestamp: nil,
|
serverTimestamp: nil,
|
||||||
wasReceivedByUD: false)
|
wasReceivedByUD: false)
|
||||||
}
|
}
|
||||||
|
@ -481,7 +482,8 @@ private class MockOutgoingMessage: TSOutgoingMessage {
|
||||||
isVoiceMessage: false,
|
isVoiceMessage: false,
|
||||||
groupMetaMessage: .unspecified,
|
groupMetaMessage: .unspecified,
|
||||||
quotedMessage: nil,
|
quotedMessage: nil,
|
||||||
contactShare: nil)
|
contactShare: nil,
|
||||||
|
linkPreview: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
required init?(coder: NSCoder) {
|
required init?(coder: NSCoder) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "DebugUIMessages.h"
|
#import "DebugUIMessages.h"
|
||||||
|
@ -879,6 +879,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isRead:NO
|
isRead:NO
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil
|
contactShare:nil
|
||||||
|
linkPreview:nil
|
||||||
transaction:transaction];
|
transaction:transaction];
|
||||||
|
|
||||||
// This is a hack to "back-date" the message.
|
// This is a hack to "back-date" the message.
|
||||||
|
@ -1775,6 +1776,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isRead:NO
|
isRead:NO
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil
|
contactShare:nil
|
||||||
|
linkPreview:nil
|
||||||
transaction:transaction];
|
transaction:transaction];
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
@ -1823,6 +1825,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isRead:isRead
|
isRead:isRead
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil
|
contactShare:nil
|
||||||
|
linkPreview:nil
|
||||||
transaction:transaction];
|
transaction:transaction];
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
@ -2006,6 +2009,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isRead:quotedMessageIsRead
|
isRead:quotedMessageIsRead
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil
|
contactShare:nil
|
||||||
|
linkPreview:nil
|
||||||
transaction:transaction];
|
transaction:transaction];
|
||||||
OWSAssertDebug(messageToQuote);
|
OWSAssertDebug(messageToQuote);
|
||||||
|
|
||||||
|
@ -2038,6 +2042,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isRead:replyIsRead
|
isRead:replyIsRead
|
||||||
quotedMessage:quotedMessage
|
quotedMessage:quotedMessage
|
||||||
contactShare:nil
|
contactShare:nil
|
||||||
|
linkPreview:nil
|
||||||
transaction:transaction];
|
transaction:transaction];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2887,6 +2892,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isRead:NO
|
isRead:NO
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil
|
contactShare:nil
|
||||||
|
linkPreview:nil
|
||||||
transaction:transaction];
|
transaction:transaction];
|
||||||
[message setReceivedAtTimestamp:(uint64_t)((int64_t)[NSDate ows_millisecondTimeStamp] + dateOffset)];
|
[message setReceivedAtTimestamp:(uint64_t)((int64_t)[NSDate ows_millisecondTimeStamp] + dateOffset)];
|
||||||
[message saveWithTransaction:transaction];
|
[message saveWithTransaction:transaction];
|
||||||
|
@ -2957,6 +2963,7 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
||||||
isRead:NO
|
isRead:NO
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:contact
|
contactShare:contact
|
||||||
|
linkPreview:nil
|
||||||
transaction:transaction];
|
transaction:transaction];
|
||||||
[message saveWithTransaction:transaction];
|
[message saveWithTransaction:transaction];
|
||||||
}];
|
}];
|
||||||
|
@ -3757,6 +3764,7 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
||||||
expiresInSeconds:0
|
expiresInSeconds:0
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil
|
contactShare:nil
|
||||||
|
linkPreview:nil
|
||||||
serverTimestamp:nil
|
serverTimestamp:nil
|
||||||
wasReceivedByUD:NO];
|
wasReceivedByUD:NO];
|
||||||
[message markAsReadNowWithSendReadReceipt:NO transaction:transaction];
|
[message markAsReadNowWithSendReadReceipt:NO transaction:transaction];
|
||||||
|
@ -3771,6 +3779,7 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
||||||
isRead:NO
|
isRead:NO
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil
|
contactShare:nil
|
||||||
|
linkPreview:nil
|
||||||
transaction:transaction];
|
transaction:transaction];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -3801,6 +3810,7 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
||||||
expiresInSeconds:0
|
expiresInSeconds:0
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil
|
contactShare:nil
|
||||||
|
linkPreview:nil
|
||||||
serverTimestamp:nil
|
serverTimestamp:nil
|
||||||
wasReceivedByUD:NO];
|
wasReceivedByUD:NO];
|
||||||
[message markAsReadNowWithSendReadReceipt:NO transaction:transaction];
|
[message markAsReadNowWithSendReadReceipt:NO transaction:transaction];
|
||||||
|
@ -3831,6 +3841,7 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil
|
contactShare:nil
|
||||||
|
linkPreview:nil
|
||||||
transaction:transaction];
|
transaction:transaction];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -4197,7 +4208,8 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
OWSLogError(@"resurrectNewOutgoingMessages2 timestamp: %llu.", message.timestamp);
|
OWSLogError(@"resurrectNewOutgoingMessages2 timestamp: %llu.", message.timestamp);
|
||||||
[messages addObject:message];
|
[messages addObject:message];
|
||||||
}
|
}
|
||||||
|
@ -4265,6 +4277,7 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
||||||
expiresInSeconds:0
|
expiresInSeconds:0
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil
|
contactShare:nil
|
||||||
|
linkPreview:nil
|
||||||
serverTimestamp:nil
|
serverTimestamp:nil
|
||||||
wasReceivedByUD:NO];
|
wasReceivedByUD:NO];
|
||||||
[message markAsReadNowWithSendReadReceipt:NO transaction:transaction];
|
[message markAsReadNowWithSendReadReceipt:NO transaction:transaction];
|
||||||
|
@ -4281,7 +4294,8 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
[message saveWithTransaction:transaction];
|
[message saveWithTransaction:transaction];
|
||||||
[message updateWithFakeMessageState:TSOutgoingMessageStateSent transaction:transaction];
|
[message updateWithFakeMessageState:TSOutgoingMessageStateSent transaction:transaction];
|
||||||
[message updateWithSentRecipient:recipientId wasSentByUD:NO transaction:transaction];
|
[message updateWithSentRecipient:recipientId wasSentByUD:NO transaction:transaction];
|
||||||
|
@ -4310,6 +4324,7 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
||||||
expiresInSeconds:60
|
expiresInSeconds:60
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil
|
contactShare:nil
|
||||||
|
linkPreview:nil
|
||||||
serverTimestamp:nil
|
serverTimestamp:nil
|
||||||
wasReceivedByUD:NO];
|
wasReceivedByUD:NO];
|
||||||
// private setter to avoid starting expire machinery.
|
// private setter to avoid starting expire machinery.
|
||||||
|
@ -4479,6 +4494,7 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
||||||
isRead:(BOOL)isRead
|
isRead:(BOOL)isRead
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview
|
||||||
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||||
{
|
{
|
||||||
OWSAssertDebug(thread);
|
OWSAssertDebug(thread);
|
||||||
|
@ -4505,6 +4521,7 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
||||||
isVoiceMessage:attachment.isVoiceMessage
|
isVoiceMessage:attachment.isVoiceMessage
|
||||||
quotedMessage:quotedMessage
|
quotedMessage:quotedMessage
|
||||||
contactShare:contactShare
|
contactShare:contactShare
|
||||||
|
linkPreview:linkPreview
|
||||||
transaction:transaction];
|
transaction:transaction];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4518,6 +4535,7 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
||||||
isVoiceMessage:(BOOL)isVoiceMessage
|
isVoiceMessage:(BOOL)isVoiceMessage
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview
|
||||||
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||||
{
|
{
|
||||||
OWSAssertDebug(thread);
|
OWSAssertDebug(thread);
|
||||||
|
@ -4540,7 +4558,8 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
||||||
isVoiceMessage:isVoiceMessage
|
isVoiceMessage:isVoiceMessage
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:quotedMessage
|
quotedMessage:quotedMessage
|
||||||
contactShare:contactShare];
|
contactShare:contactShare
|
||||||
|
linkPreview:linkPreview];
|
||||||
|
|
||||||
if (attachmentId.length > 0 && filename.length > 0) {
|
if (attachmentId.length > 0 && filename.length > 0) {
|
||||||
message.attachmentFilenameMap[attachmentId] = filename;
|
message.attachmentFilenameMap[attachmentId] = filename;
|
||||||
|
@ -4630,6 +4649,7 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
||||||
expiresInSeconds:0
|
expiresInSeconds:0
|
||||||
quotedMessage:quotedMessage
|
quotedMessage:quotedMessage
|
||||||
contactShare:nil
|
contactShare:nil
|
||||||
|
linkPreview:nil
|
||||||
serverTimestamp:nil
|
serverTimestamp:nil
|
||||||
wasReceivedByUD:NO];
|
wasReceivedByUD:NO];
|
||||||
[message markAsReadNowWithSendReadReceipt:NO transaction:transaction];
|
[message markAsReadNowWithSendReadReceipt:NO transaction:transaction];
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSOrphanDataCleaner.h"
|
#import "OWSOrphanDataCleaner.h"
|
||||||
|
@ -81,7 +81,8 @@
|
||||||
attachmentIds:attachmentIds
|
attachmentIds:attachmentIds
|
||||||
expiresInSeconds:0
|
expiresInSeconds:0
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
[incomingMessage save];
|
[incomingMessage save];
|
||||||
|
|
||||||
return incomingMessage;
|
return incomingMessage;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "ThreadUtil.h"
|
#import "ThreadUtil.h"
|
||||||
|
@ -134,7 +134,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:isVoiceMessage
|
isVoiceMessage:isVoiceMessage
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:[quotedReplyModel buildQuotedMessageForSending]
|
quotedMessage:[quotedReplyModel buildQuotedMessageForSending]
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
|
|
||||||
NSMutableArray<OWSOutgoingAttachmentInfo *> *attachmentInfos = [NSMutableArray new];
|
NSMutableArray<OWSOutgoingAttachmentInfo *> *attachmentInfos = [NSMutableArray new];
|
||||||
for (SignalAttachment *attachment in attachments) {
|
for (SignalAttachment *attachment in attachments) {
|
||||||
|
@ -167,7 +168,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:contactShare];
|
contactShare:contactShare
|
||||||
|
linkPreview:nil];
|
||||||
|
|
||||||
[self.dbConnection asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) {
|
[self.dbConnection asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) {
|
||||||
[message saveWithTransaction:transaction];
|
[message saveWithTransaction:transaction];
|
||||||
|
@ -246,7 +248,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:isVoiceMessage
|
isVoiceMessage:isVoiceMessage
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:[quotedReplyModel buildQuotedMessageForSending]
|
quotedMessage:[quotedReplyModel buildQuotedMessageForSending]
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
|
|
||||||
NSMutableArray<OWSOutgoingAttachmentInfo *> *attachmentInfos = [NSMutableArray new];
|
NSMutableArray<OWSOutgoingAttachmentInfo *> *attachmentInfos = [NSMutableArray new];
|
||||||
for (SignalAttachment *attachment in attachments) {
|
for (SignalAttachment *attachment in attachments) {
|
||||||
|
@ -303,7 +306,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:contactShare];
|
contactShare:contactShare
|
||||||
|
linkPreview:nil];
|
||||||
|
|
||||||
[messageSender sendMessage:message
|
[messageSender sendMessage:message
|
||||||
success:^{
|
success:^{
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSOutgoingSyncMessage.h"
|
#import "OWSOutgoingSyncMessage.h"
|
||||||
|
@ -19,7 +19,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:(BOOL)isVoiceMessage
|
isVoiceMessage:(BOOL)isVoiceMessage
|
||||||
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare NS_UNAVAILABLE;
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview NS_UNAVAILABLE;
|
||||||
|
|
||||||
+ (OWSReceiptsForSenderMessage *)deliveryReceiptsForSenderMessageWithThread:(nullable TSThread *)thread
|
+ (OWSReceiptsForSenderMessage *)deliveryReceiptsForSenderMessageWithThread:(nullable TSThread *)thread
|
||||||
messageTimestamps:(NSArray<NSNumber *> *)messageTimestamps;
|
messageTimestamps:(NSArray<NSNumber *> *)messageTimestamps;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSReceiptsForSenderMessage.h"
|
#import "OWSReceiptsForSenderMessage.h"
|
||||||
|
@ -51,7 +51,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
if (!self) {
|
if (!self) {
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSRecordTranscriptJob.h"
|
#import "OWSRecordTranscriptJob.h"
|
||||||
|
@ -109,7 +109,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:transcript.quotedMessage
|
quotedMessage:transcript.quotedMessage
|
||||||
contactShare:transcript.contact];
|
contactShare:transcript.contact
|
||||||
|
linkPreview:transcript.linkPreview];
|
||||||
|
|
||||||
NSArray<TSAttachmentPointer *> *attachmentPointers =
|
NSArray<TSAttachmentPointer *> *attachmentPointers =
|
||||||
[TSAttachmentPointer attachmentPointersFromProtos:transcript.attachmentPointerProtos
|
[TSAttachmentPointer attachmentPointersFromProtos:transcript.attachmentPointerProtos
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
@class OWSContact;
|
@class OWSContact;
|
||||||
|
@class OWSLinkPreview;
|
||||||
@class SSKProtoAttachmentPointer;
|
@class SSKProtoAttachmentPointer;
|
||||||
@class SSKProtoDataMessage;
|
@class SSKProtoDataMessage;
|
||||||
@class SSKProtoSyncMessageSent;
|
@class SSKProtoSyncMessageSent;
|
||||||
|
@ -35,6 +36,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
@property (nonatomic, readonly) TSThread *thread;
|
@property (nonatomic, readonly) TSThread *thread;
|
||||||
@property (nonatomic, readonly, nullable) TSQuotedMessage *quotedMessage;
|
@property (nonatomic, readonly, nullable) TSQuotedMessage *quotedMessage;
|
||||||
@property (nonatomic, readonly, nullable) OWSContact *contact;
|
@property (nonatomic, readonly, nullable) OWSContact *contact;
|
||||||
|
@property (nonatomic, readonly, nullable) OWSLinkPreview *linkPreview;
|
||||||
|
|
||||||
// If either nonUdRecipientIds or udRecipientIds is nil,
|
// If either nonUdRecipientIds or udRecipientIds is nil,
|
||||||
// this is either a legacy transcript or it reflects a legacy sync message.
|
// this is either a legacy transcript or it reflects a legacy sync message.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSIncomingSentMessageTranscript.h"
|
#import "OWSIncomingSentMessageTranscript.h"
|
||||||
|
@ -45,6 +45,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
_quotedMessage = [TSQuotedMessage quotedMessageForDataMessage:_dataMessage thread:_thread transaction:transaction];
|
_quotedMessage = [TSQuotedMessage quotedMessageForDataMessage:_dataMessage thread:_thread transaction:transaction];
|
||||||
_contact = [OWSContacts contactForDataMessage:_dataMessage transaction:transaction];
|
_contact = [OWSContacts contactForDataMessage:_dataMessage transaction:transaction];
|
||||||
|
_linkPreview =
|
||||||
|
[OWSLinkPreview buildValidatedLinkPreviewWithDataMessage:_dataMessage body:_body transaction:transaction];
|
||||||
|
|
||||||
if (sentProto.unidentifiedStatus.count > 0) {
|
if (sentProto.unidentifiedStatus.count > 0) {
|
||||||
NSMutableArray<NSString *> *nonUdRecipientIds = [NSMutableArray new];
|
NSMutableArray<NSString *> *nonUdRecipientIds = [NSMutableArray new];
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "TSOutgoingMessage.h"
|
#import "TSOutgoingMessage.h"
|
||||||
|
@ -22,7 +22,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:(BOOL)isVoiceMessage
|
isVoiceMessage:(BOOL)isVoiceMessage
|
||||||
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare NS_UNAVAILABLE;
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview NS_UNAVAILABLE;
|
||||||
|
|
||||||
- (instancetype)init NS_DESIGNATED_INITIALIZER;
|
- (instancetype)init NS_DESIGNATED_INITIALIZER;
|
||||||
- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
|
- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSOutgoingSyncMessage.h"
|
#import "OWSOutgoingSyncMessage.h"
|
||||||
|
@ -29,7 +29,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
|
|
||||||
if (!self) {
|
if (!self) {
|
||||||
return self;
|
return self;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSOutgoingSyncMessage.h"
|
#import "OWSOutgoingSyncMessage.h"
|
||||||
|
@ -17,7 +17,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:(BOOL)isVoiceMessage
|
isVoiceMessage:(BOOL)isVoiceMessage
|
||||||
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare NS_UNAVAILABLE;
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview NS_UNAVAILABLE;
|
||||||
|
|
||||||
- (instancetype)initWithThread:(nullable TSThread *)thread groupId:(NSData *)groupId;
|
- (instancetype)initWithThread:(nullable TSThread *)thread groupId:(NSData *)groupId;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSSyncGroupsRequestMessage.h"
|
#import "OWSSyncGroupsRequestMessage.h"
|
||||||
|
@ -30,7 +30,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
if (!self) {
|
if (!self) {
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSContact.h"
|
#import "OWSContact.h"
|
||||||
|
@ -509,8 +509,8 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value)
|
||||||
|
|
||||||
- (void)removeAvatarAttachmentWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
- (void)removeAvatarAttachmentWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||||
{
|
{
|
||||||
TSAttachmentStream *_Nullable attachment =
|
TSAttachment *_Nullable attachment =
|
||||||
[TSAttachmentStream fetchObjectWithUniqueID:self.avatarAttachmentId transaction:transaction];
|
[TSAttachment fetchObjectWithUniqueID:self.avatarAttachmentId transaction:transaction];
|
||||||
[attachment removeWithTransaction:transaction];
|
[attachment removeWithTransaction:transaction];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "TSOutgoingMessage.h"
|
#import "TSOutgoingMessage.h"
|
||||||
|
@ -20,7 +20,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:(BOOL)isVoiceMessage
|
isVoiceMessage:(BOOL)isVoiceMessage
|
||||||
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare NS_UNAVAILABLE;
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview NS_UNAVAILABLE;
|
||||||
|
|
||||||
- (instancetype)initWithConfiguration:(OWSDisappearingMessagesConfiguration *)configuration thread:(TSThread *)thread;
|
- (instancetype)initWithConfiguration:(OWSDisappearingMessagesConfiguration *)configuration thread:(TSThread *)thread;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSDisappearingMessagesConfigurationMessage.h"
|
#import "OWSDisappearingMessagesConfigurationMessage.h"
|
||||||
|
@ -36,7 +36,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
if (!self) {
|
if (!self) {
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "TSOutgoingMessage.h"
|
#import "TSOutgoingMessage.h"
|
||||||
|
@ -23,7 +23,8 @@ typedef NSData *_Nonnull (^DynamicOutgoingMessageBlock)(SignalRecipient *);
|
||||||
isVoiceMessage:(BOOL)isVoiceMessage
|
isVoiceMessage:(BOOL)isVoiceMessage
|
||||||
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare NS_UNAVAILABLE;
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview NS_UNAVAILABLE;
|
||||||
|
|
||||||
- (instancetype)initWithPlainTextDataBlock:(DynamicOutgoingMessageBlock)block thread:(nullable TSThread *)thread;
|
- (instancetype)initWithPlainTextDataBlock:(DynamicOutgoingMessageBlock)block thread:(nullable TSThread *)thread;
|
||||||
- (instancetype)initWithPlainTextDataBlock:(DynamicOutgoingMessageBlock)block
|
- (instancetype)initWithPlainTextDataBlock:(DynamicOutgoingMessageBlock)block
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSDynamicOutgoingMessage.h"
|
#import "OWSDynamicOutgoingMessage.h"
|
||||||
|
@ -37,7 +37,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
|
|
||||||
if (self) {
|
if (self) {
|
||||||
_block = block;
|
_block = block;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "TSOutgoingMessage.h"
|
#import "TSOutgoingMessage.h"
|
||||||
|
@ -18,7 +18,8 @@ NS_SWIFT_NAME(EndSessionMessage)
|
||||||
isVoiceMessage:(BOOL)isVoiceMessage
|
isVoiceMessage:(BOOL)isVoiceMessage
|
||||||
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare NS_UNAVAILABLE;
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview NS_UNAVAILABLE;
|
||||||
|
|
||||||
// MJK TODO can we remove the sender timestamp?
|
// MJK TODO can we remove the sender timestamp?
|
||||||
- (instancetype)initWithTimestamp:(uint64_t)timestamp inThread:(nullable TSThread *)thread NS_DESIGNATED_INITIALIZER;
|
- (instancetype)initWithTimestamp:(uint64_t)timestamp inThread:(nullable TSThread *)thread NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSEndSessionMessage.h"
|
#import "OWSEndSessionMessage.h"
|
||||||
|
@ -25,7 +25,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)shouldBeSaved
|
- (BOOL)shouldBeSaved
|
||||||
|
|
100
SignalServiceKit/src/Messages/Interactions/OWSLinkPreview.swift
Normal file
100
SignalServiceKit/src/Messages/Interactions/OWSLinkPreview.swift
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
//
|
||||||
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
@objc(OWSLinkPreview)
|
||||||
|
public class OWSLinkPreview: MTLModel {
|
||||||
|
@objc
|
||||||
|
public var urlString: String?
|
||||||
|
|
||||||
|
@objc
|
||||||
|
public var title: String?
|
||||||
|
|
||||||
|
@objc
|
||||||
|
public var attachmentId: String?
|
||||||
|
|
||||||
|
@objc
|
||||||
|
public init(urlString: String, title: String?, attachmentId: String?) {
|
||||||
|
self.urlString = urlString
|
||||||
|
self.title = title
|
||||||
|
self.attachmentId = attachmentId
|
||||||
|
|
||||||
|
super.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc
|
||||||
|
public required init!(coder: NSCoder) {
|
||||||
|
super.init(coder: coder)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc
|
||||||
|
public required init(dictionary dictionaryValue: [AnyHashable: Any]!) throws {
|
||||||
|
try super.init(dictionary: dictionaryValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc
|
||||||
|
public class func buildValidatedLinkPreview(dataMessage: SSKProtoDataMessage,
|
||||||
|
body: String?,
|
||||||
|
transaction: YapDatabaseReadWriteTransaction) -> OWSLinkPreview? {
|
||||||
|
guard let previewProto = dataMessage.preview else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
let urlString = previewProto.url
|
||||||
|
|
||||||
|
guard URL(string: urlString) != nil else {
|
||||||
|
owsFailDebug("Could not parse preview URL.")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
guard let body = body else {
|
||||||
|
owsFailDebug("Preview for message without body.")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
let bodyComponents = body.components(separatedBy: .whitespacesAndNewlines)
|
||||||
|
guard bodyComponents.contains(urlString) else {
|
||||||
|
owsFailDebug("URL not present in body.")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Verify that url host is in whitelist.
|
||||||
|
|
||||||
|
let title: String? = previewProto.title?.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||||
|
|
||||||
|
var imageAttachmentId: String?
|
||||||
|
if let imageProto = previewProto.image {
|
||||||
|
if let imageAttachmentPointer = TSAttachmentPointer(fromProto: imageProto, albumMessage: nil) {
|
||||||
|
imageAttachmentPointer.save(with: transaction)
|
||||||
|
imageAttachmentId = imageAttachmentPointer.uniqueId
|
||||||
|
} else {
|
||||||
|
owsFailDebug("Could not parse image proto.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var hasTitle = false
|
||||||
|
if let titleValue = title {
|
||||||
|
hasTitle = titleValue.count > 0
|
||||||
|
}
|
||||||
|
let hasImage = imageAttachmentId != nil
|
||||||
|
if !hasTitle && !hasImage {
|
||||||
|
owsFailDebug("Preview has neither title nor image.")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return OWSLinkPreview(urlString: urlString, title: title, attachmentId: imageAttachmentId)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc
|
||||||
|
public func removeAttachment(transaction: YapDatabaseReadWriteTransaction) {
|
||||||
|
guard let attachmentId = attachmentId else {
|
||||||
|
owsFailDebug("No attachment id.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
guard let attachment = TSAttachment.fetch(uniqueId: attachmentId, transaction: transaction) else {
|
||||||
|
owsFailDebug("Could not load attachment.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
attachment.remove(with: transaction)
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSReadTracking.h"
|
#import "OWSReadTracking.h"
|
||||||
|
@ -35,7 +35,8 @@ typedef NS_ENUM(int32_t, TSErrorMessageType) {
|
||||||
expiresInSeconds:(uint32_t)expiresInSeconds
|
expiresInSeconds:(uint32_t)expiresInSeconds
|
||||||
expireStartedAt:(uint64_t)expireStartedAt
|
expireStartedAt:(uint64_t)expireStartedAt
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contact NS_UNAVAILABLE;
|
contactShare:(nullable OWSContact *)contact
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview NS_UNAVAILABLE;
|
||||||
|
|
||||||
- (instancetype)initWithTimestamp:(uint64_t)timestamp
|
- (instancetype)initWithTimestamp:(uint64_t)timestamp
|
||||||
inThread:(nullable TSThread *)thread
|
inThread:(nullable TSThread *)thread
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "TSErrorMessage.h"
|
#import "TSErrorMessage.h"
|
||||||
|
@ -60,7 +60,8 @@ NSUInteger TSErrorMessageSchemaVersion = 1;
|
||||||
expiresInSeconds:0
|
expiresInSeconds:0
|
||||||
expireStartedAt:0
|
expireStartedAt:0
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
|
|
||||||
if (!self) {
|
if (!self) {
|
||||||
return self;
|
return self;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSReadTracking.h"
|
#import "OWSReadTracking.h"
|
||||||
|
@ -23,7 +23,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
expiresInSeconds:(uint32_t)expiresInSeconds
|
expiresInSeconds:(uint32_t)expiresInSeconds
|
||||||
expireStartedAt:(uint64_t)expireStartedAt
|
expireStartedAt:(uint64_t)expireStartedAt
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare NS_UNAVAILABLE;
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview NS_UNAVAILABLE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inits an incoming group message that expires.
|
* Inits an incoming group message that expires.
|
||||||
|
@ -56,6 +57,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
expiresInSeconds:(uint32_t)expiresInSeconds
|
expiresInSeconds:(uint32_t)expiresInSeconds
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview
|
||||||
serverTimestamp:(nullable NSNumber *)serverTimestamp
|
serverTimestamp:(nullable NSNumber *)serverTimestamp
|
||||||
wasReceivedByUD:(BOOL)wasReceivedByUD NS_DESIGNATED_INITIALIZER;
|
wasReceivedByUD:(BOOL)wasReceivedByUD NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "TSIncomingMessage.h"
|
#import "TSIncomingMessage.h"
|
||||||
|
@ -52,8 +52,10 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
expiresInSeconds:(uint32_t)expiresInSeconds
|
expiresInSeconds:(uint32_t)expiresInSeconds
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview
|
||||||
serverTimestamp:(nullable NSNumber *)serverTimestamp
|
serverTimestamp:(nullable NSNumber *)serverTimestamp
|
||||||
wasReceivedByUD:(BOOL)wasReceivedByUD {
|
wasReceivedByUD:(BOOL)wasReceivedByUD
|
||||||
|
{
|
||||||
self = [super initMessageWithTimestamp:timestamp
|
self = [super initMessageWithTimestamp:timestamp
|
||||||
inThread:thread
|
inThread:thread
|
||||||
messageBody:body
|
messageBody:body
|
||||||
|
@ -61,7 +63,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
expiresInSeconds:expiresInSeconds
|
expiresInSeconds:expiresInSeconds
|
||||||
expireStartedAt:0
|
expireStartedAt:0
|
||||||
quotedMessage:quotedMessage
|
quotedMessage:quotedMessage
|
||||||
contactShare:contactShare];
|
contactShare:contactShare
|
||||||
|
linkPreview:linkPreview];
|
||||||
|
|
||||||
if (!self) {
|
if (!self) {
|
||||||
return self;
|
return self;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSReadTracking.h"
|
#import "OWSReadTracking.h"
|
||||||
|
@ -36,7 +36,8 @@ typedef NS_ENUM(NSInteger, TSInfoMessageType) {
|
||||||
expiresInSeconds:(uint32_t)expiresInSeconds
|
expiresInSeconds:(uint32_t)expiresInSeconds
|
||||||
expireStartedAt:(uint64_t)expireStartedAt
|
expireStartedAt:(uint64_t)expireStartedAt
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contact NS_UNAVAILABLE;
|
contactShare:(nullable OWSContact *)contact
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview NS_UNAVAILABLE;
|
||||||
|
|
||||||
- (instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
|
- (instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "TSInfoMessage.h"
|
#import "TSInfoMessage.h"
|
||||||
|
@ -56,7 +56,8 @@ NSUInteger TSInfoMessageSchemaVersion = 1;
|
||||||
expiresInSeconds:0
|
expiresInSeconds:0
|
||||||
expireStartedAt:0
|
expireStartedAt:0
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
|
|
||||||
if (!self) {
|
if (!self) {
|
||||||
return self;
|
return self;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "TSInteraction.h"
|
#import "TSInteraction.h"
|
||||||
|
@ -11,6 +11,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@class OWSContact;
|
@class OWSContact;
|
||||||
|
@class OWSLinkPreview;
|
||||||
@class TSAttachment;
|
@class TSAttachment;
|
||||||
@class TSAttachmentStream;
|
@class TSAttachmentStream;
|
||||||
@class TSQuotedMessage;
|
@class TSQuotedMessage;
|
||||||
|
@ -26,6 +27,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
@property (nonatomic, readonly) BOOL isExpiringMessage;
|
@property (nonatomic, readonly) BOOL isExpiringMessage;
|
||||||
@property (nonatomic, readonly, nullable) TSQuotedMessage *quotedMessage;
|
@property (nonatomic, readonly, nullable) TSQuotedMessage *quotedMessage;
|
||||||
@property (nonatomic, readonly, nullable) OWSContact *contactShare;
|
@property (nonatomic, readonly, nullable) OWSContact *contactShare;
|
||||||
|
@property (nonatomic, readonly, nullable) OWSLinkPreview *linkPreview;
|
||||||
|
|
||||||
- (instancetype)initInteractionWithTimestamp:(uint64_t)timestamp inThread:(TSThread *)thread NS_UNAVAILABLE;
|
- (instancetype)initInteractionWithTimestamp:(uint64_t)timestamp inThread:(TSThread *)thread NS_UNAVAILABLE;
|
||||||
|
|
||||||
|
@ -36,7 +38,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
expiresInSeconds:(uint32_t)expiresInSeconds
|
expiresInSeconds:(uint32_t)expiresInSeconds
|
||||||
expireStartedAt:(uint64_t)expireStartedAt
|
expireStartedAt:(uint64_t)expireStartedAt
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare NS_DESIGNATED_INITIALIZER;
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
|
- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "TSMessage.h"
|
#import "TSMessage.h"
|
||||||
|
@ -13,6 +13,7 @@
|
||||||
#import "TSQuotedMessage.h"
|
#import "TSQuotedMessage.h"
|
||||||
#import "TSThread.h"
|
#import "TSThread.h"
|
||||||
#import <SignalCoreKit/NSDate+OWS.h>
|
#import <SignalCoreKit/NSDate+OWS.h>
|
||||||
|
#import <SignalServiceKit/SignalServiceKit-Swift.h>
|
||||||
#import <YapDatabase/YapDatabase.h>
|
#import <YapDatabase/YapDatabase.h>
|
||||||
#import <YapDatabase/YapDatabaseTransaction.h>
|
#import <YapDatabase/YapDatabaseTransaction.h>
|
||||||
|
|
||||||
|
@ -61,6 +62,7 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
|
||||||
expireStartedAt:(uint64_t)expireStartedAt
|
expireStartedAt:(uint64_t)expireStartedAt
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview
|
||||||
{
|
{
|
||||||
self = [super initInteractionWithTimestamp:timestamp inThread:thread];
|
self = [super initInteractionWithTimestamp:timestamp inThread:thread];
|
||||||
|
|
||||||
|
@ -77,6 +79,7 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
|
||||||
[self updateExpiresAt];
|
[self updateExpiresAt];
|
||||||
_quotedMessage = quotedMessage;
|
_quotedMessage = quotedMessage;
|
||||||
_contactShare = contactShare;
|
_contactShare = contactShare;
|
||||||
|
_linkPreview = linkPreview;
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
@ -348,6 +351,10 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
|
||||||
[self.contactShare removeAvatarAttachmentWithTransaction:transaction];
|
[self.contactShare removeAvatarAttachmentWithTransaction:transaction];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (self.linkPreview.attachmentId) {
|
||||||
|
[self.linkPreview removeAttachmentWithTransaction:transaction];
|
||||||
|
}
|
||||||
|
|
||||||
// Updates inbox thread preview
|
// Updates inbox thread preview
|
||||||
[self touchThreadWithTransaction:transaction];
|
[self touchThreadWithTransaction:transaction];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "TSMessage.h"
|
#import "TSMessage.h"
|
||||||
|
@ -77,7 +77,8 @@ typedef NS_ENUM(NSInteger, TSGroupMetaMessage) {
|
||||||
expiresInSeconds:(uint32_t)expiresInSeconds
|
expiresInSeconds:(uint32_t)expiresInSeconds
|
||||||
expireStartedAt:(uint64_t)expireStartedAt
|
expireStartedAt:(uint64_t)expireStartedAt
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare NS_UNAVAILABLE;
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview NS_UNAVAILABLE;
|
||||||
|
|
||||||
// MJK TODO - Can we remove the sender timestamp param?
|
// MJK TODO - Can we remove the sender timestamp param?
|
||||||
- (instancetype)initOutgoingMessageWithTimestamp:(uint64_t)timestamp
|
- (instancetype)initOutgoingMessageWithTimestamp:(uint64_t)timestamp
|
||||||
|
@ -89,7 +90,8 @@ typedef NS_ENUM(NSInteger, TSGroupMetaMessage) {
|
||||||
isVoiceMessage:(BOOL)isVoiceMessage
|
isVoiceMessage:(BOOL)isVoiceMessage
|
||||||
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare NS_DESIGNATED_INITIALIZER;
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
|
- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "TSOutgoingMessage.h"
|
#import "TSOutgoingMessage.h"
|
||||||
|
@ -267,7 +267,8 @@ NSString *NSStringForOutgoingMessageRecipientState(OWSOutgoingMessageRecipientSt
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:quotedMessage
|
quotedMessage:quotedMessage
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (instancetype)outgoingMessageInThread:(nullable TSThread *)thread
|
+ (instancetype)outgoingMessageInThread:(nullable TSThread *)thread
|
||||||
|
@ -284,7 +285,8 @@ NSString *NSStringForOutgoingMessageRecipientState(OWSOutgoingMessageRecipientSt
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:groupMetaMessage
|
groupMetaMessage:groupMetaMessage
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initOutgoingMessageWithTimestamp:(uint64_t)timestamp
|
- (instancetype)initOutgoingMessageWithTimestamp:(uint64_t)timestamp
|
||||||
|
@ -297,6 +299,7 @@ NSString *NSStringForOutgoingMessageRecipientState(OWSOutgoingMessageRecipientSt
|
||||||
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview
|
||||||
{
|
{
|
||||||
self = [super initMessageWithTimestamp:timestamp
|
self = [super initMessageWithTimestamp:timestamp
|
||||||
inThread:thread
|
inThread:thread
|
||||||
|
@ -305,7 +308,8 @@ NSString *NSStringForOutgoingMessageRecipientState(OWSOutgoingMessageRecipientSt
|
||||||
expiresInSeconds:expiresInSeconds
|
expiresInSeconds:expiresInSeconds
|
||||||
expireStartedAt:expireStartedAt
|
expireStartedAt:expireStartedAt
|
||||||
quotedMessage:quotedMessage
|
quotedMessage:quotedMessage
|
||||||
contactShare:contactShare];
|
contactShare:contactShare
|
||||||
|
linkPreview:linkPreview];
|
||||||
if (!self) {
|
if (!self) {
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1287,6 +1287,11 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
thread:oldGroupThread
|
thread:oldGroupThread
|
||||||
transaction:transaction];
|
transaction:transaction];
|
||||||
|
|
||||||
|
OWSLinkPreview *_Nullable linkPreview =
|
||||||
|
[OWSLinkPreview buildValidatedLinkPreviewWithDataMessage:dataMessage
|
||||||
|
body:body
|
||||||
|
transaction:transaction];
|
||||||
|
|
||||||
OWSLogDebug(@"incoming message from: %@ for group: %@ with timestamp: %lu",
|
OWSLogDebug(@"incoming message from: %@ for group: %@ with timestamp: %lu",
|
||||||
envelopeAddress(envelope),
|
envelopeAddress(envelope),
|
||||||
groupId,
|
groupId,
|
||||||
|
@ -1303,6 +1308,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
expiresInSeconds:dataMessage.expireTimer
|
expiresInSeconds:dataMessage.expireTimer
|
||||||
quotedMessage:quotedMessage
|
quotedMessage:quotedMessage
|
||||||
contactShare:contact
|
contactShare:contact
|
||||||
|
linkPreview:linkPreview
|
||||||
serverTimestamp:serverTimestamp
|
serverTimestamp:serverTimestamp
|
||||||
wasReceivedByUD:wasReceivedByUD];
|
wasReceivedByUD:wasReceivedByUD];
|
||||||
|
|
||||||
|
@ -1349,6 +1355,9 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
thread:thread
|
thread:thread
|
||||||
transaction:transaction];
|
transaction:transaction];
|
||||||
|
|
||||||
|
OWSLinkPreview *_Nullable linkPreview =
|
||||||
|
[OWSLinkPreview buildValidatedLinkPreviewWithDataMessage:dataMessage body:body transaction:transaction];
|
||||||
|
|
||||||
// Legit usage of senderTimestamp when creating incoming message from received envelope
|
// Legit usage of senderTimestamp when creating incoming message from received envelope
|
||||||
TSIncomingMessage *incomingMessage =
|
TSIncomingMessage *incomingMessage =
|
||||||
[[TSIncomingMessage alloc] initIncomingMessageWithTimestamp:timestamp
|
[[TSIncomingMessage alloc] initIncomingMessageWithTimestamp:timestamp
|
||||||
|
@ -1360,6 +1369,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
expiresInSeconds:dataMessage.expireTimer
|
expiresInSeconds:dataMessage.expireTimer
|
||||||
quotedMessage:quotedMessage
|
quotedMessage:quotedMessage
|
||||||
contactShare:contact
|
contactShare:contact
|
||||||
|
linkPreview:linkPreview
|
||||||
serverTimestamp:serverTimestamp
|
serverTimestamp:serverTimestamp
|
||||||
wasReceivedByUD:wasReceivedByUD];
|
wasReceivedByUD:wasReceivedByUD];
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "TSOutgoingMessage.h"
|
#import "TSOutgoingMessage.h"
|
||||||
|
@ -27,7 +27,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:(BOOL)isVoiceMessage
|
isVoiceMessage:(BOOL)isVoiceMessage
|
||||||
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare NS_UNAVAILABLE;
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview NS_UNAVAILABLE;
|
||||||
|
|
||||||
- (instancetype)initWithThread:(TSThread *)thread offerMessage:(SSKProtoCallMessageOffer *)offerMessage;
|
- (instancetype)initWithThread:(TSThread *)thread offerMessage:(SSKProtoCallMessageOffer *)offerMessage;
|
||||||
- (instancetype)initWithThread:(TSThread *)thread answerMessage:(SSKProtoCallMessageAnswer *)answerMessage;
|
- (instancetype)initWithThread:(TSThread *)thread answerMessage:(SSKProtoCallMessageAnswer *)answerMessage;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSOutgoingCallMessage.h"
|
#import "OWSOutgoingCallMessage.h"
|
||||||
|
@ -25,7 +25,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
if (!self) {
|
if (!self) {
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "TSOutgoingMessage.h"
|
#import "TSOutgoingMessage.h"
|
||||||
|
@ -20,7 +20,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:(BOOL)isVoiceMessage
|
isVoiceMessage:(BOOL)isVoiceMessage
|
||||||
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare NS_UNAVAILABLE;
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview NS_UNAVAILABLE;
|
||||||
|
|
||||||
- (instancetype)initWithContactThread:(TSContactThread *)contactThread
|
- (instancetype)initWithContactThread:(TSContactThread *)contactThread
|
||||||
verificationStateSyncMessage:(OWSVerificationStateSyncMessage *)verificationStateSyncMessage;
|
verificationStateSyncMessage:(OWSVerificationStateSyncMessage *)verificationStateSyncMessage;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSOutgoingNullMessage.h"
|
#import "OWSOutgoingNullMessage.h"
|
||||||
|
@ -34,7 +34,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
if (!self) {
|
if (!self) {
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "TSOutgoingMessage.h"
|
#import "TSOutgoingMessage.h"
|
||||||
|
@ -17,7 +17,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:(BOOL)isVoiceMessage
|
isVoiceMessage:(BOOL)isVoiceMessage
|
||||||
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage
|
||||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||||
contactShare:(nullable OWSContact *)contactShare NS_UNAVAILABLE;
|
contactShare:(nullable OWSContact *)contactShare
|
||||||
|
linkPreview:(nullable OWSLinkPreview *)linkPreview NS_UNAVAILABLE;
|
||||||
|
|
||||||
- (instancetype)initWithTimestamp:(uint64_t)timestamp inThread:(nullable TSThread *)thread NS_DESIGNATED_INITIALIZER;
|
- (instancetype)initWithTimestamp:(uint64_t)timestamp inThread:(nullable TSThread *)thread NS_DESIGNATED_INITIALIZER;
|
||||||
- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
|
- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSProfileKeyMessage.h"
|
#import "OWSProfileKeyMessage.h"
|
||||||
|
@ -23,7 +23,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (nullable instancetype)initWithCoder:(NSCoder *)coder
|
- (nullable instancetype)initWithCoder:(NSCoder *)coder
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
@ -30,7 +30,8 @@ public class TypingIndicatorMessage: TSOutgoingMessage {
|
||||||
isVoiceMessage: false,
|
isVoiceMessage: false,
|
||||||
groupMetaMessage: .unspecified,
|
groupMetaMessage: .unspecified,
|
||||||
quotedMessage: nil,
|
quotedMessage: nil,
|
||||||
contactShare: nil)
|
contactShare: nil,
|
||||||
|
linkPreview: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
|
|
|
@ -137,7 +137,8 @@ public class OutgoingMessageFactory: NSObject, Factory {
|
||||||
isVoiceMessage: isVoiceMessageBuilder(),
|
isVoiceMessage: isVoiceMessageBuilder(),
|
||||||
groupMetaMessage: groupMetaMessageBuilder(),
|
groupMetaMessage: groupMetaMessageBuilder(),
|
||||||
quotedMessage: quotedMessageBuilder(),
|
quotedMessage: quotedMessageBuilder(),
|
||||||
contactShare: contactShareBuilder())
|
contactShare: contactShareBuilder(),
|
||||||
|
linkPreview: linkPreviewBuilder())
|
||||||
|
|
||||||
return item
|
return item
|
||||||
}
|
}
|
||||||
|
@ -204,6 +205,11 @@ public class OutgoingMessageFactory: NSObject, Factory {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc
|
||||||
|
public var linkPreviewBuilder: () -> OWSLinkPreview? = {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: Delivery Receipts
|
// MARK: Delivery Receipts
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
|
@ -244,6 +250,7 @@ class IncomingMessageFactory: NSObject, Factory {
|
||||||
expiresInSeconds: expiresInSecondsBuilder(),
|
expiresInSeconds: expiresInSecondsBuilder(),
|
||||||
quotedMessage: quotedMessageBuilder(),
|
quotedMessage: quotedMessageBuilder(),
|
||||||
contactShare: contactShareBuilder(),
|
contactShare: contactShareBuilder(),
|
||||||
|
linkPreview: linkPreviewBuilder(),
|
||||||
serverTimestamp: serverTimestampBuilder(),
|
serverTimestamp: serverTimestampBuilder(),
|
||||||
wasReceivedByUD: wasReceivedByUDBuilder())
|
wasReceivedByUD: wasReceivedByUDBuilder())
|
||||||
|
|
||||||
|
@ -301,6 +308,11 @@ class IncomingMessageFactory: NSObject, Factory {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc
|
||||||
|
public var linkPreviewBuilder: () -> OWSLinkPreview? = {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
public var serverTimestampBuilder: () -> NSNumber? = {
|
public var serverTimestampBuilder: () -> NSNumber? = {
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSDevice.h"
|
#import "OWSDevice.h"
|
||||||
|
@ -49,6 +49,7 @@
|
||||||
expiresInSeconds:0
|
expiresInSeconds:0
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil
|
contactShare:nil
|
||||||
|
linkPreview:nil
|
||||||
serverTimestamp:nil
|
serverTimestamp:nil
|
||||||
wasReceivedByUD:NO];
|
wasReceivedByUD:NO];
|
||||||
[incomingMessage save];
|
[incomingMessage save];
|
||||||
|
@ -63,7 +64,8 @@
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
[outgoingMessage save];
|
[outgoingMessage save];
|
||||||
|
|
||||||
XCTAssertEqual(2, [thread numberOfInteractions]);
|
XCTAssertEqual(2, [thread numberOfInteractions]);
|
||||||
|
@ -100,6 +102,7 @@
|
||||||
expiresInSeconds:0
|
expiresInSeconds:0
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil
|
contactShare:nil
|
||||||
|
linkPreview:nil
|
||||||
serverTimestamp:nil
|
serverTimestamp:nil
|
||||||
wasReceivedByUD:NO];
|
wasReceivedByUD:NO];
|
||||||
[incomingMessage save];
|
[incomingMessage save];
|
||||||
|
@ -122,7 +125,8 @@
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
[outgoingMessage save];
|
[outgoingMessage save];
|
||||||
|
|
||||||
// Sanity check
|
// Sanity check
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "TSMessage.h"
|
#import "TSMessage.h"
|
||||||
|
@ -37,7 +37,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
expiresInSeconds:100
|
expiresInSeconds:100
|
||||||
expireStartedAt:0
|
expireStartedAt:0
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
|
|
||||||
XCTAssertEqual(0, message.expiresAt);
|
XCTAssertEqual(0, message.expiresAt);
|
||||||
}
|
}
|
||||||
|
@ -54,7 +55,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
expiresInSeconds:expirationSeconds
|
expiresInSeconds:expirationSeconds
|
||||||
expireStartedAt:now
|
expireStartedAt:now
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
XCTAssertEqual(now + expirationMs, message.expiresAt);
|
XCTAssertEqual(now + expirationMs, message.expiresAt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "TSOutgoingMessage.h"
|
#import "TSOutgoingMessage.h"
|
||||||
|
@ -42,7 +42,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
[self readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
[self readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
||||||
XCTAssertFalse([message shouldStartExpireTimerWithTransaction:transaction]);
|
XCTAssertFalse([message shouldStartExpireTimerWithTransaction:transaction]);
|
||||||
}];
|
}];
|
||||||
|
@ -60,7 +61,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
[self readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
[self readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
||||||
[message updateWithSentRecipient:self.contactId wasSentByUD:NO transaction:transaction];
|
[message updateWithSentRecipient:self.contactId wasSentByUD:NO transaction:transaction];
|
||||||
XCTAssertTrue([message shouldStartExpireTimerWithTransaction:transaction]);
|
XCTAssertTrue([message shouldStartExpireTimerWithTransaction:transaction]);
|
||||||
|
@ -79,7 +81,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
[self readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
[self readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
||||||
XCTAssertFalse([message shouldStartExpireTimerWithTransaction:transaction]);
|
XCTAssertFalse([message shouldStartExpireTimerWithTransaction:transaction]);
|
||||||
}];
|
}];
|
||||||
|
@ -97,7 +100,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
[self readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
[self readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
||||||
[message updateWithMarkingAllUnsentRecipientsAsSendingWithTransaction:transaction];
|
[message updateWithMarkingAllUnsentRecipientsAsSendingWithTransaction:transaction];
|
||||||
XCTAssertFalse([message shouldStartExpireTimerWithTransaction:transaction]);
|
XCTAssertFalse([message shouldStartExpireTimerWithTransaction:transaction]);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "MockSSKEnvironment.h"
|
#import "MockSSKEnvironment.h"
|
||||||
|
@ -70,7 +70,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
expiresInSeconds:expiresInSeconds
|
expiresInSeconds:expiresInSeconds
|
||||||
expireStartedAt:expireStartedAt
|
expireStartedAt:expireStartedAt
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)testExpiredMessages
|
- (void)testExpiredMessages
|
||||||
|
@ -82,7 +83,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
expiresInSeconds:1
|
expiresInSeconds:1
|
||||||
expireStartedAt:self.now - 20000
|
expireStartedAt:self.now - 20000
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
[expiredMessage1 save];
|
[expiredMessage1 save];
|
||||||
|
|
||||||
TSMessage *expiredMessage2 =
|
TSMessage *expiredMessage2 =
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSDisappearingMessagesJob.h"
|
#import "OWSDisappearingMessagesJob.h"
|
||||||
|
@ -49,7 +49,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
expiresInSeconds:expiresInSeconds
|
expiresInSeconds:expiresInSeconds
|
||||||
expireStartedAt:expireStartedAt
|
expireStartedAt:expireStartedAt
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef BROKEN_TESTS
|
#ifdef BROKEN_TESTS
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSDevice.h"
|
#import "OWSDevice.h"
|
||||||
|
@ -55,6 +55,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
expiresInSeconds:0
|
expiresInSeconds:0
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil
|
contactShare:nil
|
||||||
|
linkPreview:nil
|
||||||
serverTimestamp:nil
|
serverTimestamp:nil
|
||||||
wasReceivedByUD:NO];
|
wasReceivedByUD:NO];
|
||||||
[incomingMessage save];
|
[incomingMessage save];
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSMessageSender.h"
|
#import "OWSMessageSender.h"
|
||||||
|
@ -239,7 +239,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
[self.unexpiringMessage save];
|
[self.unexpiringMessage save];
|
||||||
|
|
||||||
self.expiringMessage = [[TSOutgoingMessage alloc] initOutgoingMessageWithTimestamp:1
|
self.expiringMessage = [[TSOutgoingMessage alloc] initOutgoingMessageWithTimestamp:1
|
||||||
|
@ -251,7 +252,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
isVoiceMessage:NO
|
isVoiceMessage:NO
|
||||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
[self.expiringMessage save];
|
[self.expiringMessage save];
|
||||||
|
|
||||||
OWSPrimaryStorage *storageManager = [OWSPrimaryStorage sharedManager];
|
OWSPrimaryStorage *storageManager = [OWSPrimaryStorage sharedManager];
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OWSPrimaryStorage.h"
|
#import "OWSPrimaryStorage.h"
|
||||||
|
@ -59,7 +59,8 @@
|
||||||
attachmentIds:@[]
|
attachmentIds:@[]
|
||||||
expiresInSeconds:0
|
expiresInSeconds:0
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
|
|
||||||
[self readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
[self readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
||||||
[newMessage saveWithTransaction:transaction];
|
[newMessage saveWithTransaction:transaction];
|
||||||
|
@ -93,7 +94,8 @@
|
||||||
attachmentIds:@[]
|
attachmentIds:@[]
|
||||||
expiresInSeconds:0
|
expiresInSeconds:0
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
|
|
||||||
[messages addObject:newMessage];
|
[messages addObject:newMessage];
|
||||||
[newMessage save];
|
[newMessage save];
|
||||||
|
@ -147,7 +149,8 @@
|
||||||
attachmentIds:@[]
|
attachmentIds:@[]
|
||||||
expiresInSeconds:0
|
expiresInSeconds:0
|
||||||
quotedMessage:nil
|
quotedMessage:nil
|
||||||
contactShare:nil];
|
contactShare:nil
|
||||||
|
linkPreview:nil];
|
||||||
[newMessage save];
|
[newMessage save];
|
||||||
[messages addObject:newMessage];
|
[messages addObject:newMessage];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue