Respond to CR.

// FREEBIE
pull/1/head
Matthew Chen 8 years ago
parent 0d07e0222f
commit d01a52758b

@ -332,8 +332,6 @@ typedef enum : NSUInteger {
_composeOnOpen = keyboardOnViewAppearing; _composeOnOpen = keyboardOnViewAppearing;
_callOnOpen = callOnViewAppearing; _callOnOpen = callOnViewAppearing;
[self.uiDatabaseConnection beginLongLivedReadTransaction];
// We need to create the "unread indicator" before we mark // We need to create the "unread indicator" before we mark
// all messages as read. // all messages as read.
[self ensureDynamicInteractions]; [self ensureDynamicInteractions];
@ -540,6 +538,8 @@ typedef enum : NSUInteger {
- (void)viewWillAppear:(BOOL)animated - (void)viewWillAppear:(BOOL)animated
{ {
DDLogDebug(@"%@ viewWillAppear", self.tag);
// We need to update the dynamic interactions before we do any layout. // We need to update the dynamic interactions before we do any layout.
[self ensureDynamicInteractions]; [self ensureDynamicInteractions];
@ -990,6 +990,8 @@ typedef enum : NSUInteger {
- (void)viewWillDisappear:(BOOL)animated - (void)viewWillDisappear:(BOOL)animated
{ {
DDLogDebug(@"%@ viewWillDisappear", self.tag);
[super viewWillDisappear:animated]; [super viewWillDisappear:animated];
[self toggleObservers:NO]; [self toggleObservers:NO];
@ -2221,10 +2223,6 @@ typedef enum : NSUInteger {
// while updating the range and the dynamic interactions. // while updating the range and the dynamic interactions.
[[NSNotificationCenter defaultCenter] removeObserver:self name:YapDatabaseModifiedNotification object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:YapDatabaseModifiedNotification object:nil];
// We need to `beginLongLivedReadTransaction` before we update our
// mapping in order to jump to the most recent commit.
[self.uiDatabaseConnection beginLongLivedReadTransaction];
// We need to update the dynamic interactions after loading earlier messages, // We need to update the dynamic interactions after loading earlier messages,
// since the unseen indicator may need to move or change. // since the unseen indicator may need to move or change.
[self ensureDynamicInteractions]; [self ensureDynamicInteractions];
@ -2702,8 +2700,7 @@ typedef enum : NSUInteger {
[ThreadUtil ensureDynamicInteractionsForThread:self.thread [ThreadUtil ensureDynamicInteractionsForThread:self.thread
contactsManager:self.contactsManager contactsManager:self.contactsManager
blockingManager:self.blockingManager blockingManager:self.blockingManager
readDBConnection:self.uiDatabaseConnection dbConnection:self.editingDatabaseConnection
writeDBConnection:self.editingDatabaseConnection
hideUnreadMessagesIndicator:self.hasClearedUnreadMessagesIndicator hideUnreadMessagesIndicator:self.hasClearedUnreadMessagesIndicator
firstUnseenInteractionTimestamp:self.dynamicInteractions.firstUnseenInteractionTimestamp firstUnseenInteractionTimestamp:self.dynamicInteractions.firstUnseenInteractionTimestamp
maxRangeSize:maxRangeSize]; maxRangeSize:maxRangeSize];

@ -83,8 +83,7 @@ NS_ASSUME_NONNULL_BEGIN
+ (ThreadDynamicInteractions *)ensureDynamicInteractionsForThread:(TSThread *)thread + (ThreadDynamicInteractions *)ensureDynamicInteractionsForThread:(TSThread *)thread
contactsManager:(OWSContactsManager *)contactsManager contactsManager:(OWSContactsManager *)contactsManager
blockingManager:(OWSBlockingManager *)blockingManager blockingManager:(OWSBlockingManager *)blockingManager
readDBConnection:(YapDatabaseConnection *)readDBConnection dbConnection:(YapDatabaseConnection *)dbConnection
writeDBConnection:(YapDatabaseConnection *)writeDBConnection
hideUnreadMessagesIndicator:(BOOL)hideUnreadMessagesIndicator hideUnreadMessagesIndicator:(BOOL)hideUnreadMessagesIndicator
firstUnseenInteractionTimestamp:(nullable NSNumber *)firstUnseenInteractionTimestamp firstUnseenInteractionTimestamp:(nullable NSNumber *)firstUnseenInteractionTimestamp
maxRangeSize:(int)maxRangeSize; maxRangeSize:(int)maxRangeSize;

@ -116,16 +116,14 @@ NS_ASSUME_NONNULL_BEGIN
+ (ThreadDynamicInteractions *)ensureDynamicInteractionsForThread:(TSThread *)thread + (ThreadDynamicInteractions *)ensureDynamicInteractionsForThread:(TSThread *)thread
contactsManager:(OWSContactsManager *)contactsManager contactsManager:(OWSContactsManager *)contactsManager
blockingManager:(OWSBlockingManager *)blockingManager blockingManager:(OWSBlockingManager *)blockingManager
readDBConnection:(YapDatabaseConnection *)readDBConnection dbConnection:(YapDatabaseConnection *)dbConnection
writeDBConnection:(YapDatabaseConnection *)writeDBConnection
hideUnreadMessagesIndicator:(BOOL)hideUnreadMessagesIndicator hideUnreadMessagesIndicator:(BOOL)hideUnreadMessagesIndicator
firstUnseenInteractionTimestamp: firstUnseenInteractionTimestamp:
(nullable NSNumber *)firstUnseenInteractionTimestampParameter (nullable NSNumber *)firstUnseenInteractionTimestampParameter
maxRangeSize:(int)maxRangeSize maxRangeSize:(int)maxRangeSize
{ {
OWSAssert(thread); OWSAssert(thread);
OWSAssert(readDBConnection); OWSAssert(dbConnection);
OWSAssert(writeDBConnection);
OWSAssert(contactsManager); OWSAssert(contactsManager);
OWSAssert(blockingManager); OWSAssert(blockingManager);
OWSAssert(maxRangeSize > 0); OWSAssert(maxRangeSize > 0);
@ -135,23 +133,15 @@ NS_ASSUME_NONNULL_BEGIN
ThreadDynamicInteractions *result = [ThreadDynamicInteractions new]; ThreadDynamicInteractions *result = [ThreadDynamicInteractions new];
const int kMaxBlockOfferOutgoingMessageCount = 10; [dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
const int kMaxBlockOfferOutgoingMessageCount = 10;
__block OWSAddToContactsOfferMessage *existingAddToContactsOffer = nil;
__block OWSUnknownContactBlockOfferMessage *existingBlockOffer = nil;
__block TSUnreadIndicatorInteraction *existingUnreadIndicator = nil;
NSMutableArray<TSInvalidIdentityKeyErrorMessage *> *blockingSafetyNumberChanges = [NSMutableArray new];
NSMutableArray<TSInteraction *> *nonBlockingSafetyNumberChanges = [NSMutableArray new];
__block TSMessage *firstMessage = nil;
__block NSUInteger outgoingMessageCount;
__block NSUInteger threadMessageCount;
__block long visibleUnseenMessageCount = 0;
__block TSInteraction *interactionAfterUnreadIndicator = nil;
__block NSUInteger missingUnseenSafetyNumberChangeCount = 0;
[readDBConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
// Find any "dynamic" interactions and safety number changes. // Find any "dynamic" interactions and safety number changes.
__block OWSAddToContactsOfferMessage *existingAddToContactsOffer = nil;
__block OWSUnknownContactBlockOfferMessage *existingBlockOffer = nil;
__block TSUnreadIndicatorInteraction *existingUnreadIndicator = nil;
NSMutableArray<TSInvalidIdentityKeyErrorMessage *> *blockingSafetyNumberChanges = [NSMutableArray new];
NSMutableArray<TSInteraction *> *nonBlockingSafetyNumberChanges = [NSMutableArray new];
// We use different views for performance reasons. // We use different views for performance reasons.
[[TSDatabaseView threadSpecialMessagesDatabaseView:transaction] [[TSDatabaseView threadSpecialMessagesDatabaseView:transaction]
enumerateRowsInGroup:thread.uniqueId enumerateRowsInGroup:thread.uniqueId
@ -196,6 +186,7 @@ NS_ASSUME_NONNULL_BEGIN
} }
} }
__block TSMessage *firstMessage = nil;
[[transaction ext:TSMessageDatabaseViewExtensionName] [[transaction ext:TSMessageDatabaseViewExtensionName]
enumerateRowsInGroup:thread.uniqueId enumerateRowsInGroup:thread.uniqueId
usingBlock:^( usingBlock:^(
@ -210,9 +201,9 @@ NS_ASSUME_NONNULL_BEGIN
} }
}]; }];
outgoingMessageCount = NSUInteger outgoingMessageCount =
[[TSDatabaseView threadOutgoingMessageDatabaseView:transaction] numberOfItemsInGroup:thread.uniqueId]; [[TSDatabaseView threadOutgoingMessageDatabaseView:transaction] numberOfItemsInGroup:thread.uniqueId];
threadMessageCount = NSUInteger threadMessageCount =
[[transaction ext:TSMessageDatabaseViewExtensionName] numberOfItemsInGroup:thread.uniqueId]; [[transaction ext:TSMessageDatabaseViewExtensionName] numberOfItemsInGroup:thread.uniqueId];
// Enumerate in reverse to count the number of messages // Enumerate in reverse to count the number of messages
@ -221,6 +212,9 @@ NS_ASSUME_NONNULL_BEGIN
// the messages view the position of the unread indicator, // the messages view the position of the unread indicator,
// so that it can widen its "load window" to always show // so that it can widen its "load window" to always show
// the unread indicator. // the unread indicator.
__block long visibleUnseenMessageCount = 0;
__block TSInteraction *interactionAfterUnreadIndicator = nil;
NSUInteger missingUnseenSafetyNumberChangeCount = 0;
if (result.firstUnseenInteractionTimestamp != nil) { if (result.firstUnseenInteractionTimestamp != nil) {
[[transaction ext:TSMessageDatabaseViewExtensionName] [[transaction ext:TSMessageDatabaseViewExtensionName]
enumerateRowsInGroup:thread.uniqueId enumerateRowsInGroup:thread.uniqueId
@ -294,9 +288,7 @@ NS_ASSUME_NONNULL_BEGIN
result.unreadIndicatorPosition = @(visibleUnseenMessageCount); result.unreadIndicatorPosition = @(visibleUnseenMessageCount);
} }
OWSAssert((result.firstUnseenInteractionTimestamp != nil) == (result.unreadIndicatorPosition != nil)); OWSAssert((result.firstUnseenInteractionTimestamp != nil) == (result.unreadIndicatorPosition != nil));
}];
[writeDBConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
BOOL shouldHaveBlockOffer = YES; BOOL shouldHaveBlockOffer = YES;
BOOL shouldHaveAddToContactsOffer = YES; BOOL shouldHaveAddToContactsOffer = YES;

Loading…
Cancel
Save