Merge branch 'charlesmchen/unreadIndicatorAssert'

pull/1/head
Matthew Chen 8 years ago
commit 8b93c4aa2c

@ -137,7 +137,7 @@ NS_ASSUME_NONNULL_BEGIN
dbConnection:(YapDatabaseConnection *)dbConnection dbConnection:(YapDatabaseConnection *)dbConnection
hideUnreadMessagesIndicator:(BOOL)hideUnreadMessagesIndicator hideUnreadMessagesIndicator:(BOOL)hideUnreadMessagesIndicator
firstUnseenInteractionTimestamp: firstUnseenInteractionTimestamp:
(nullable NSNumber *)firstUnseenInteractionTimestampParam (nullable NSNumber *)firstUnseenInteractionTimestampParameter
maxRangeSize:(int)maxRangeSize maxRangeSize:(int)maxRangeSize
{ {
OWSAssert(thread); OWSAssert(thread);
@ -232,43 +232,6 @@ NS_ASSUME_NONNULL_BEGIN
// have been marked as read. // have been marked as read.
// //
// IFF this variable is non-null, there are unseen messages in the thread. // IFF this variable is non-null, there are unseen messages in the thread.
//
// Make a local copy of this parameter that we can modify.
NSNumber *_Nullable firstUnseenInteractionTimestampParameter = firstUnseenInteractionTimestampParam;
if (firstUnseenInteractionTimestampParameter) {
// Due to disappearing messages or manual deletion,
// firstUnseenInteractionTimestampParameter may refer to an obsolete
// interaction in which case we want to discard it.
//
// Therefore, we should discard the existing unread indicator
// position if there are no "unreadable" messages after it.
__block TSInteraction *lastCallOrMessage = nil;
[[transaction ext:TSMessageDatabaseViewExtensionName]
enumerateRowsInGroup:thread.uniqueId
withOptions:NSEnumerationReverse
usingBlock:^(NSString *collection,
NSString *key,
id object,
id metadata,
NSUInteger index,
BOOL *stop) {
OWSAssert([object isKindOfClass:[TSInteraction class]]);
if ([object isKindOfClass:[TSIncomingMessage class]] ||
[object isKindOfClass:[TSOutgoingMessage class]] ||
[object isKindOfClass:[TSCall class]]) {
lastCallOrMessage = object;
*stop = YES;
}
if ([object isKindOfClass:[TSUnreadIndicatorInteraction class]]) {
*stop = YES;
}
}];
if (!lastCallOrMessage) {
firstUnseenInteractionTimestampParameter = nil;
}
}
if (firstUnseenInteractionTimestampParameter) { if (firstUnseenInteractionTimestampParameter) {
result.firstUnseenInteractionTimestamp = firstUnseenInteractionTimestampParameter; result.firstUnseenInteractionTimestamp = firstUnseenInteractionTimestampParameter;
} else { } else {
@ -353,9 +316,12 @@ NS_ASSUME_NONNULL_BEGIN
} }
}]; }];
OWSAssert(interactionAfterUnreadIndicator); if (!interactionAfterUnreadIndicator) {
// If we can't find an interaction after the unread indicator,
if (result.hasMoreUnseenMessages) { // remove it. All unread messages may have been deleted or
// expired.
result.firstUnseenInteractionTimestamp = nil;
} else if (result.hasMoreUnseenMessages) {
NSMutableSet<NSData *> *missingUnseenSafetyNumberChanges = [NSMutableSet set]; NSMutableSet<NSData *> *missingUnseenSafetyNumberChanges = [NSMutableSet set];
for (TSInvalidIdentityKeyErrorMessage *safetyNumberChange in blockingSafetyNumberChanges) { for (TSInvalidIdentityKeyErrorMessage *safetyNumberChange in blockingSafetyNumberChanges) {
BOOL isUnseen = safetyNumberChange.timestampForSorting BOOL isUnseen = safetyNumberChange.timestampForSorting

Loading…
Cancel
Save