|
|
@ -464,7 +464,6 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
|
|
|
|
[self createScrollButtons];
|
|
|
|
[self createScrollButtons];
|
|
|
|
[self createHeaderViews];
|
|
|
|
[self createHeaderViews];
|
|
|
|
[self addNotificationListeners];
|
|
|
|
[self addNotificationListeners];
|
|
|
|
[self updateShowLoadMoreHeader];
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
- (void)createContents
|
|
|
|
- (void)createContents
|
|
|
@ -1421,6 +1420,22 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
|
|
|
|
[self showConversationSettings];
|
|
|
|
[self showConversationSettings];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#pragma mark - Load More
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (void)autoLoadMoreIfNecessary
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (self.isUserScrolling || !self.isViewVisible || self.isAppInBackground) {
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!self.showLoadMoreHeader) {
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
static const CGFloat kThreshold = 50.f;
|
|
|
|
|
|
|
|
if (self.collectionView.contentOffset.y < kThreshold) {
|
|
|
|
|
|
|
|
[self loadMoreMessages];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
- (void)loadMoreHeaderTapped:(id)sender
|
|
|
|
- (void)loadMoreHeaderTapped:(id)sender
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (self.isUserScrolling) {
|
|
|
|
if (self.isUserScrolling) {
|
|
|
@ -1428,6 +1443,11 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[self loadMoreMessages];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (void)loadMoreMessages
|
|
|
|
|
|
|
|
{
|
|
|
|
BOOL hasEarlierUnseenMessages = self.dynamicInteractions.hasMoreUnseenMessages;
|
|
|
|
BOOL hasEarlierUnseenMessages = self.dynamicInteractions.hasMoreUnseenMessages;
|
|
|
|
|
|
|
|
|
|
|
|
// We want to restore the current scroll state after we update the range, update
|
|
|
|
// We want to restore the current scroll state after we update the range, update
|
|
|
@ -1448,29 +1468,22 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
|
|
|
|
if (hasEarlierUnseenMessages) {
|
|
|
|
if (hasEarlierUnseenMessages) {
|
|
|
|
[self scrollToUnreadIndicatorAnimated];
|
|
|
|
[self scrollToUnreadIndicatorAnimated];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[self updateShowLoadMoreHeader];
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
- (BOOL)shouldShowLoadEarlierMessages
|
|
|
|
- (void)updateShowLoadMoreHeader
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (self.page == kYapDatabaseMaxPageCount - 1) {
|
|
|
|
if (self.page == kYapDatabaseMaxPageCount - 1) {
|
|
|
|
return NO;
|
|
|
|
self.showLoadMoreHeader = NO;
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
__block BOOL show = YES;
|
|
|
|
NSUInteger loadWindowSize = [self.messageMappings numberOfItemsInGroup:self.thread.uniqueId];
|
|
|
|
|
|
|
|
__block NSUInteger totalMessageCount;
|
|
|
|
[self.uiDatabaseConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
|
|
|
|
[self.uiDatabaseConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
|
|
|
|
show = [self.messageMappings numberOfItemsInGroup:self.thread.uniqueId] <
|
|
|
|
totalMessageCount =
|
|
|
|
[[transaction ext:TSMessageDatabaseViewExtensionName] numberOfItemsInGroup:self.thread.uniqueId];
|
|
|
|
[[transaction ext:TSMessageDatabaseViewExtensionName] numberOfItemsInGroup:self.thread.uniqueId];
|
|
|
|
}];
|
|
|
|
}];
|
|
|
|
|
|
|
|
self.showLoadMoreHeader = loadWindowSize < totalMessageCount;
|
|
|
|
return show;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (void)updateShowLoadMoreHeader
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
[self setShowLoadMoreHeader:[self shouldShowLoadEarlierMessages]];
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
- (void)setShowLoadMoreHeader:(BOOL)showLoadMoreHeader
|
|
|
|
- (void)setShowLoadMoreHeader:(BOOL)showLoadMoreHeader
|
|
|
@ -1534,6 +1547,7 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
|
|
|
|
rangeOptions.minLength = kYapDatabaseRangeMinLength;
|
|
|
|
rangeOptions.minLength = kYapDatabaseRangeMinLength;
|
|
|
|
|
|
|
|
|
|
|
|
[self.messageMappings setRangeOptions:rangeOptions forGroup:self.thread.uniqueId];
|
|
|
|
[self.messageMappings setRangeOptions:rangeOptions forGroup:self.thread.uniqueId];
|
|
|
|
|
|
|
|
[self updateShowLoadMoreHeader];
|
|
|
|
[self reloadViewItems];
|
|
|
|
[self reloadViewItems];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -3524,6 +3538,7 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
|
|
|
|
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
|
|
|
|
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
|
|
|
|
{
|
|
|
|
{
|
|
|
|
[self updateLastVisibleTimestamp];
|
|
|
|
[self updateLastVisibleTimestamp];
|
|
|
|
|
|
|
|
[self autoLoadMoreIfNecessary];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
|
|
|
|
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
|
|
|
@ -3734,6 +3749,13 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
|
|
|
|
|
|
|
|
|
|
|
|
#pragma mark - Database Observation
|
|
|
|
#pragma mark - Database Observation
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (void)setIsUserScrolling:(BOOL)isUserScrolling
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
_isUserScrolling = isUserScrolling;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[self autoLoadMoreIfNecessary];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
- (void)setIsViewVisible:(BOOL)isViewVisible
|
|
|
|
- (void)setIsViewVisible:(BOOL)isViewVisible
|
|
|
|
{
|
|
|
|
{
|
|
|
|
_isViewVisible = isViewVisible;
|
|
|
|
_isViewVisible = isViewVisible;
|
|
|
@ -3815,7 +3837,6 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
|
|
|
|
[self reloadViewItems];
|
|
|
|
[self reloadViewItems];
|
|
|
|
|
|
|
|
|
|
|
|
[self resetContentAndLayout];
|
|
|
|
[self resetContentAndLayout];
|
|
|
|
[self updateShowLoadMoreHeader];
|
|
|
|
|
|
|
|
[self ensureDynamicInteractions];
|
|
|
|
[self ensureDynamicInteractions];
|
|
|
|
[self updateBackButtonUnreadCount];
|
|
|
|
[self updateBackButtonUnreadCount];
|
|
|
|
[self updateNavigationBarSubtitleLabel];
|
|
|
|
[self updateNavigationBarSubtitleLabel];
|
|
|
|