|
|
|
@ -238,35 +238,18 @@ NSString *const kTSOutgoingMessageSentRecipientAll = @"kTSOutgoingMessageSentRec
|
|
|
|
|
return OWSInteractionType_OutgoingMessage;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#pragma mark - Update Methods
|
|
|
|
|
|
|
|
|
|
// This method does the work for the "updateWith..." methods. Please see
|
|
|
|
|
// the header for a discussion of those methods.
|
|
|
|
|
- (void)applyChangeToSelfAndLatestOutgoingMessage:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
|
changeBlock:(void (^)(TSOutgoingMessage *))changeBlock
|
|
|
|
|
{
|
|
|
|
|
OWSAssert(transaction);
|
|
|
|
|
|
|
|
|
|
changeBlock(self);
|
|
|
|
|
|
|
|
|
|
NSString *collection = [[self class] collection];
|
|
|
|
|
TSOutgoingMessage *latestMessage = [transaction objectForKey:self.uniqueId inCollection:collection];
|
|
|
|
|
if (latestMessage) {
|
|
|
|
|
changeBlock(latestMessage);
|
|
|
|
|
[latestMessage saveWithTransaction:transaction];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#pragma mark - Update With... Methods
|
|
|
|
|
|
|
|
|
|
- (void)updateWithSendingError:(NSError *)error
|
|
|
|
|
{
|
|
|
|
|
OWSAssert(error);
|
|
|
|
|
|
|
|
|
|
[self.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
|
|
|
|
[self applyChangeToSelfAndLatestOutgoingMessage:transaction
|
|
|
|
|
changeBlock:^(TSOutgoingMessage *message) {
|
|
|
|
|
[message setMessageState:TSOutgoingMessageStateUnsent];
|
|
|
|
|
[message setMostRecentFailureText:error.localizedDescription];
|
|
|
|
|
}];
|
|
|
|
|
[self applyChangeToSelfAndLatestCopy:transaction
|
|
|
|
|
changeBlock:^(TSOutgoingMessage *message) {
|
|
|
|
|
[message setMessageState:TSOutgoingMessageStateUnsent];
|
|
|
|
|
[message setMostRecentFailureText:error.localizedDescription];
|
|
|
|
|
}];
|
|
|
|
|
}];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -282,19 +265,19 @@ NSString *const kTSOutgoingMessageSentRecipientAll = @"kTSOutgoingMessageSentRec
|
|
|
|
|
{
|
|
|
|
|
OWSAssert(transaction);
|
|
|
|
|
|
|
|
|
|
[self applyChangeToSelfAndLatestOutgoingMessage:transaction
|
|
|
|
|
changeBlock:^(TSOutgoingMessage *message) {
|
|
|
|
|
[message setMessageState:messageState];
|
|
|
|
|
}];
|
|
|
|
|
[self applyChangeToSelfAndLatestCopy:transaction
|
|
|
|
|
changeBlock:^(TSOutgoingMessage *message) {
|
|
|
|
|
[message setMessageState:messageState];
|
|
|
|
|
}];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)updateWithHasSyncedTranscript:(BOOL)hasSyncedTranscript
|
|
|
|
|
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
|
{
|
|
|
|
|
[self applyChangeToSelfAndLatestOutgoingMessage:transaction
|
|
|
|
|
changeBlock:^(TSOutgoingMessage *message) {
|
|
|
|
|
[message setHasSyncedTranscript:hasSyncedTranscript];
|
|
|
|
|
}];
|
|
|
|
|
[self applyChangeToSelfAndLatestCopy:transaction
|
|
|
|
|
changeBlock:^(TSOutgoingMessage *message) {
|
|
|
|
|
[message setHasSyncedTranscript:hasSyncedTranscript];
|
|
|
|
|
}];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)updateWithCustomMessage:(NSString *)customMessage transaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
@ -302,10 +285,10 @@ NSString *const kTSOutgoingMessageSentRecipientAll = @"kTSOutgoingMessageSentRec
|
|
|
|
|
OWSAssert(customMessage);
|
|
|
|
|
OWSAssert(transaction);
|
|
|
|
|
|
|
|
|
|
[self applyChangeToSelfAndLatestOutgoingMessage:transaction
|
|
|
|
|
changeBlock:^(TSOutgoingMessage *message) {
|
|
|
|
|
[message setCustomMessage:customMessage];
|
|
|
|
|
}];
|
|
|
|
|
[self applyChangeToSelfAndLatestCopy:transaction
|
|
|
|
|
changeBlock:^(TSOutgoingMessage *message) {
|
|
|
|
|
[message setCustomMessage:customMessage];
|
|
|
|
|
}];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)updateWithCustomMessage:(NSString *)customMessage
|
|
|
|
@ -322,32 +305,31 @@ NSString *const kTSOutgoingMessageSentRecipientAll = @"kTSOutgoingMessageSentRec
|
|
|
|
|
OWSAssert(recipientId.length > 0);
|
|
|
|
|
OWSAssert(transaction);
|
|
|
|
|
|
|
|
|
|
[self applyChangeToSelfAndLatestOutgoingMessage:transaction
|
|
|
|
|
changeBlock:^(TSOutgoingMessage *message) {
|
|
|
|
|
[self applyChangeToSelfAndLatestCopy:transaction
|
|
|
|
|
changeBlock:^(TSOutgoingMessage *message) {
|
|
|
|
|
|
|
|
|
|
if (deliveryTimestamp) {
|
|
|
|
|
NSMutableDictionary<NSString *, NSNumber *> *recipientDeliveryMap
|
|
|
|
|
= (message.recipientDeliveryMap
|
|
|
|
|
? [message.recipientDeliveryMap mutableCopy]
|
|
|
|
|
: [NSMutableDictionary new]);
|
|
|
|
|
recipientDeliveryMap[recipientId] = deliveryTimestamp;
|
|
|
|
|
message.recipientDeliveryMap = [recipientDeliveryMap copy];
|
|
|
|
|
}
|
|
|
|
|
if (deliveryTimestamp) {
|
|
|
|
|
NSMutableDictionary<NSString *, NSNumber *> *recipientDeliveryMap
|
|
|
|
|
= (message.recipientDeliveryMap ? [message.recipientDeliveryMap mutableCopy]
|
|
|
|
|
: [NSMutableDictionary new]);
|
|
|
|
|
recipientDeliveryMap[recipientId] = deliveryTimestamp;
|
|
|
|
|
message.recipientDeliveryMap = [recipientDeliveryMap copy];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[message setWasDelivered:YES];
|
|
|
|
|
}];
|
|
|
|
|
[message setWasDelivered:YES];
|
|
|
|
|
}];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)updateWithWasSentFromLinkedDeviceWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
|
{
|
|
|
|
|
OWSAssert(transaction);
|
|
|
|
|
|
|
|
|
|
[self applyChangeToSelfAndLatestOutgoingMessage:transaction
|
|
|
|
|
changeBlock:^(TSOutgoingMessage *message) {
|
|
|
|
|
[message setMessageState:TSOutgoingMessageStateSentToService];
|
|
|
|
|
[message setWasDelivered:YES];
|
|
|
|
|
[message setIsFromLinkedDevice:YES];
|
|
|
|
|
}];
|
|
|
|
|
[self applyChangeToSelfAndLatestCopy:transaction
|
|
|
|
|
changeBlock:^(TSOutgoingMessage *message) {
|
|
|
|
|
[message setMessageState:TSOutgoingMessageStateSentToService];
|
|
|
|
|
[message setWasDelivered:YES];
|
|
|
|
|
[message setIsFromLinkedDevice:YES];
|
|
|
|
|
}];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)updateWithSingleGroupRecipient:(NSString *)singleGroupRecipient
|
|
|
|
@ -356,10 +338,10 @@ NSString *const kTSOutgoingMessageSentRecipientAll = @"kTSOutgoingMessageSentRec
|
|
|
|
|
OWSAssert(transaction);
|
|
|
|
|
OWSAssert(singleGroupRecipient.length > 0);
|
|
|
|
|
|
|
|
|
|
[self applyChangeToSelfAndLatestOutgoingMessage:transaction
|
|
|
|
|
changeBlock:^(TSOutgoingMessage *message) {
|
|
|
|
|
[message setSingleGroupRecipient:singleGroupRecipient];
|
|
|
|
|
}];
|
|
|
|
|
[self applyChangeToSelfAndLatestCopy:transaction
|
|
|
|
|
changeBlock:^(TSOutgoingMessage *message) {
|
|
|
|
|
[message setSingleGroupRecipient:singleGroupRecipient];
|
|
|
|
|
}];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#pragma mark - Sent Recipients
|
|
|
|
@ -411,10 +393,10 @@ NSString *const kTSOutgoingMessageSentRecipientAll = @"kTSOutgoingMessageSentRec
|
|
|
|
|
- (void)updateWithSentRecipient:(NSString *)contactId transaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
|
{
|
|
|
|
|
OWSAssert(transaction);
|
|
|
|
|
[self applyChangeToSelfAndLatestOutgoingMessage:transaction
|
|
|
|
|
changeBlock:^(TSOutgoingMessage *message) {
|
|
|
|
|
[message addSentRecipient:contactId];
|
|
|
|
|
}];
|
|
|
|
|
[self applyChangeToSelfAndLatestCopy:transaction
|
|
|
|
|
changeBlock:^(TSOutgoingMessage *message) {
|
|
|
|
|
[message addSentRecipient:contactId];
|
|
|
|
|
}];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)updateWithReadRecipientId:(NSString *)recipientId
|
|
|
|
@ -424,14 +406,14 @@ NSString *const kTSOutgoingMessageSentRecipientAll = @"kTSOutgoingMessageSentRec
|
|
|
|
|
OWSAssert(recipientId.length > 0);
|
|
|
|
|
OWSAssert(transaction);
|
|
|
|
|
|
|
|
|
|
[self applyChangeToSelfAndLatestOutgoingMessage:transaction
|
|
|
|
|
changeBlock:^(TSOutgoingMessage *message) {
|
|
|
|
|
NSMutableDictionary<NSString *, NSNumber *> *recipientReadMap
|
|
|
|
|
= (message.recipientReadMap ? [message.recipientReadMap mutableCopy]
|
|
|
|
|
: [NSMutableDictionary new]);
|
|
|
|
|
recipientReadMap[recipientId] = @(readTimestamp);
|
|
|
|
|
message.recipientReadMap = [recipientReadMap copy];
|
|
|
|
|
}];
|
|
|
|
|
[self applyChangeToSelfAndLatestCopy:transaction
|
|
|
|
|
changeBlock:^(TSOutgoingMessage *message) {
|
|
|
|
|
NSMutableDictionary<NSString *, NSNumber *> *recipientReadMap
|
|
|
|
|
= (message.recipientReadMap ? [message.recipientReadMap mutableCopy]
|
|
|
|
|
: [NSMutableDictionary new]);
|
|
|
|
|
recipientReadMap[recipientId] = @(readTimestamp);
|
|
|
|
|
message.recipientReadMap = [recipientReadMap copy];
|
|
|
|
|
}];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (nullable NSNumber *)firstRecipientReadTimestamp
|
|
|
|
|