mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-25 19:10:49 +02:00
Reduce the number of unnecessary home page reloads
This commit is contained in:
@@ -363,6 +363,7 @@ NSString *const RecentsViewControllerDataReadyNotification = @"RecentsViewContro
|
||||
|
||||
- (void)refreshRecentsTable
|
||||
{
|
||||
MXLogDebug(@"[RecentsViewController]: Refreshing recents table view")
|
||||
// Refresh the tabBar icon badges
|
||||
[[AppDelegate theDelegate].masterTabBarController refreshTabBarBadges];
|
||||
|
||||
@@ -1031,49 +1032,44 @@ NSString *const RecentsViewControllerDataReadyNotification = @"RecentsViewContro
|
||||
|
||||
- (void)dataSource:(MXKDataSource *)dataSource didCellChange:(id)changes
|
||||
{
|
||||
BOOL cellReloaded = NO;
|
||||
if ([changes isKindOfClass:RecentsSectionUpdate.class])
|
||||
if ([changes isKindOfClass:NSIndexPath.class])
|
||||
{
|
||||
RecentsSectionUpdate *update = (RecentsSectionUpdate*)changes;
|
||||
if (update.isValid && !update.totalCountsChanged)
|
||||
NSIndexPath *indexPath = (NSIndexPath *)changes;
|
||||
UITableViewCell *cell = [self.recentsTableView cellForRowAtIndexPath:indexPath];
|
||||
if ([cell isKindOfClass:TableViewCellWithCollectionView.class])
|
||||
{
|
||||
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:update.sectionIndex];
|
||||
UITableViewCell *cell = [self.recentsTableView cellForRowAtIndexPath:indexPath];
|
||||
if ([cell isKindOfClass:TableViewCellWithCollectionView.class])
|
||||
{
|
||||
TableViewCellWithCollectionView *collectionViewCell = (TableViewCellWithCollectionView *)cell;
|
||||
[collectionViewCell.collectionView reloadData];
|
||||
cellReloaded = YES;
|
||||
MXLogDebug(@"[RecentsViewController]: Reloading nested collection view cell in section %ld", indexPath.section);
|
||||
|
||||
TableViewCellWithCollectionView *collectionViewCell = (TableViewCellWithCollectionView *)cell;
|
||||
[collectionViewCell.collectionView reloadData];
|
||||
|
||||
CGRect headerFrame = [self.recentsTableView rectForHeaderInSection:update.sectionIndex];
|
||||
UIView *headerView = [self.recentsTableView headerViewForSection:update.sectionIndex];
|
||||
UIView *updatedHeaderView = [self.dataSource viewForHeaderInSection:update.sectionIndex withFrame:headerFrame inTableView:self.recentsTableView];
|
||||
if ([headerView isKindOfClass:SectionHeaderView.class]
|
||||
&& [updatedHeaderView isKindOfClass:SectionHeaderView.class])
|
||||
{
|
||||
SectionHeaderView *sectionHeaderView = (SectionHeaderView *)headerView;
|
||||
SectionHeaderView *updatedSectionHeaderView = (SectionHeaderView *)updatedHeaderView;
|
||||
sectionHeaderView.headerLabel = updatedSectionHeaderView.headerLabel;
|
||||
sectionHeaderView.accessoryView = updatedSectionHeaderView.accessoryView;
|
||||
sectionHeaderView.rightAccessoryView = updatedSectionHeaderView.rightAccessoryView;
|
||||
}
|
||||
CGRect headerFrame = [self.recentsTableView rectForHeaderInSection:indexPath.section];
|
||||
UIView *headerView = [self.recentsTableView headerViewForSection:indexPath.section];
|
||||
UIView *updatedHeaderView = [self.dataSource viewForHeaderInSection:indexPath.section withFrame:headerFrame inTableView:self.recentsTableView];
|
||||
if ([headerView isKindOfClass:SectionHeaderView.class]
|
||||
&& [updatedHeaderView isKindOfClass:SectionHeaderView.class])
|
||||
{
|
||||
SectionHeaderView *sectionHeaderView = (SectionHeaderView *)headerView;
|
||||
SectionHeaderView *updatedSectionHeaderView = (SectionHeaderView *)updatedHeaderView;
|
||||
sectionHeaderView.headerLabel = updatedSectionHeaderView.headerLabel;
|
||||
sectionHeaderView.accessoryView = updatedSectionHeaderView.accessoryView;
|
||||
sectionHeaderView.rightAccessoryView = updatedSectionHeaderView.rightAccessoryView;
|
||||
}
|
||||
} else {
|
||||
MXLogDebug(@"[RecentsViewController]: Reloading table view section %ld", indexPath.section);
|
||||
[self.recentsTableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationNone];
|
||||
}
|
||||
} else if (!changes) {
|
||||
MXLogDebug(@"[RecentsViewController]: Reloading the entire table view");
|
||||
[self refreshRecentsTable];
|
||||
}
|
||||
|
||||
if (!cellReloaded)
|
||||
{
|
||||
[super dataSource:dataSource didCellChange:changes];
|
||||
}
|
||||
else
|
||||
{
|
||||
// Since we've enabled room list pagination, `refreshRecentsTable` not called in this case.
|
||||
// Refresh tab bar badges separately.
|
||||
[[AppDelegate theDelegate].masterTabBarController refreshTabBarBadges];
|
||||
}
|
||||
// Since we've enabled room list pagination, `refreshRecentsTable` not called in this case.
|
||||
// Refresh tab bar badges separately.
|
||||
[[AppDelegate theDelegate].masterTabBarController refreshTabBarBadges];
|
||||
|
||||
[self showEmptyViewIfNeeded];
|
||||
|
||||
|
||||
if (dataSource.state == MXKDataSourceStateReady)
|
||||
{
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:RecentsViewControllerDataReadyNotification
|
||||
|
||||
Reference in New Issue
Block a user