|
|
@ -117,7 +117,6 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
__block long outgoingMessageCount = 0;
|
|
|
|
__block long outgoingMessageCount = 0;
|
|
|
|
__block BOOL hasUnknownContactBlockOffer = NO;
|
|
|
|
__block BOOL hasUnknownContactBlockOffer = NO;
|
|
|
|
|
|
|
|
|
|
|
|
NSMutableArray *blockOffers = [NSMutableArray new];
|
|
|
|
|
|
|
|
[[transaction ext:TSMessageDatabaseViewExtensionName]
|
|
|
|
[[transaction ext:TSMessageDatabaseViewExtensionName]
|
|
|
|
enumerateRowsInGroup:contactThread.uniqueId
|
|
|
|
enumerateRowsInGroup:contactThread.uniqueId
|
|
|
|
usingBlock:^(
|
|
|
|
usingBlock:^(
|
|
|
@ -125,22 +124,25 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
|
|
|
|
|
|
|
if ([object isKindOfClass:[OWSUnknownContactBlockOfferMessage class]]) {
|
|
|
|
if ([object isKindOfClass:[OWSUnknownContactBlockOfferMessage class]]) {
|
|
|
|
hasUnknownContactBlockOffer = YES;
|
|
|
|
hasUnknownContactBlockOffer = YES;
|
|
|
|
[blockOffers addObject:object];
|
|
|
|
// If there already is a block offer, abort.
|
|
|
|
|
|
|
|
*stop = YES;
|
|
|
|
} else if ([object isKindOfClass:[TSIncomingMessage class]]) {
|
|
|
|
} else if ([object isKindOfClass:[TSIncomingMessage class]]) {
|
|
|
|
TSIncomingMessage *incomingMessage = (TSIncomingMessage *)object;
|
|
|
|
TSIncomingMessage *incomingMessage = (TSIncomingMessage *)object;
|
|
|
|
if (!firstIncomingMessage ||
|
|
|
|
if (!firstIncomingMessage) {
|
|
|
|
[[firstIncomingMessage receiptDateForSorting]
|
|
|
|
|
|
|
|
compare:[incomingMessage receiptDateForSorting]]
|
|
|
|
|
|
|
|
== NSOrderedDescending) {
|
|
|
|
|
|
|
|
firstIncomingMessage = incomingMessage;
|
|
|
|
firstIncomingMessage = incomingMessage;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
OWSAssert([[firstIncomingMessage receiptDateForSorting]
|
|
|
|
|
|
|
|
compare:[incomingMessage receiptDateForSorting]]
|
|
|
|
|
|
|
|
== NSOrderedAscending);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if ([object isKindOfClass:[TSOutgoingMessage class]]) {
|
|
|
|
} else if ([object isKindOfClass:[TSOutgoingMessage class]]) {
|
|
|
|
TSOutgoingMessage *outgoingMessage = (TSOutgoingMessage *)object;
|
|
|
|
TSOutgoingMessage *outgoingMessage = (TSOutgoingMessage *)object;
|
|
|
|
if (!firstOutgoingMessage ||
|
|
|
|
if (!firstOutgoingMessage) {
|
|
|
|
[[firstOutgoingMessage receiptDateForSorting]
|
|
|
|
|
|
|
|
compare:[outgoingMessage receiptDateForSorting]]
|
|
|
|
|
|
|
|
== NSOrderedDescending) {
|
|
|
|
|
|
|
|
firstOutgoingMessage = outgoingMessage;
|
|
|
|
firstOutgoingMessage = outgoingMessage;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
OWSAssert([[firstOutgoingMessage receiptDateForSorting]
|
|
|
|
|
|
|
|
compare:[outgoingMessage receiptDateForSorting]]
|
|
|
|
|
|
|
|
== NSOrderedAscending);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
outgoingMessageCount++;
|
|
|
|
outgoingMessageCount++;
|
|
|
|
if (outgoingMessageCount > kMaxOutgoingMessageCount) {
|
|
|
|
if (outgoingMessageCount > kMaxOutgoingMessageCount) {
|
|
|
@ -183,9 +185,6 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
TSIncomingMessage *firstMessage = firstIncomingMessage;
|
|
|
|
TSIncomingMessage *firstMessage = firstIncomingMessage;
|
|
|
|
uint64_t blockOfferTimestamp = firstMessage.timestamp - 1;
|
|
|
|
uint64_t blockOfferTimestamp = firstMessage.timestamp - 1;
|
|
|
|
|
|
|
|
|
|
|
|
// Create an error message we may or may not user.
|
|
|
|
|
|
|
|
// We create it eagerly to ensure that it's timestamps make it the
|
|
|
|
|
|
|
|
// first message in the thread.
|
|
|
|
|
|
|
|
TSErrorMessage *errorMessage =
|
|
|
|
TSErrorMessage *errorMessage =
|
|
|
|
[OWSUnknownContactBlockOfferMessage unknownContactBlockOfferMessage:blockOfferTimestamp
|
|
|
|
[OWSUnknownContactBlockOfferMessage unknownContactBlockOfferMessage:blockOfferTimestamp
|
|
|
|
thread:contactThread
|
|
|
|
thread:contactThread
|
|
|
|