diff --git a/apps/ios/Shared/Views/Chat/ChatItemsMerger.swift b/apps/ios/Shared/Views/Chat/ChatItemsMerger.swift index d1876c5380..173ed1cac9 100644 --- a/apps/ios/Shared/Views/Chat/ChatItemsMerger.swift +++ b/apps/ios/Shared/Views/Chat/ChatItemsMerger.swift @@ -98,19 +98,18 @@ struct MergedItems { // found item that is considered as a split if let unclosedSplitIndex, let unclosedSplitIndexInParent { // it was at least second split in the list - splitRanges.append(SplitRange(itemId: items[unclosedSplitIndex].id, indexRangeInReversed: unclosedSplitIndex ... index - 1, indexRangeInParentItems: unclosedSplitIndexInParent ... visibleItemIndexInParent - 1)) + splitRanges.append(SplitRange(indexRangeInReversed: unclosedSplitIndex ... index - 1, indexRangeInParentItems: unclosedSplitIndexInParent ... visibleItemIndexInParent - 1)) } unclosedSplitIndex = index unclosedSplitIndexInParent = visibleItemIndexInParent } else if index + 1 == items.count, let unclosedSplitIndex, let unclosedSplitIndexInParent { // just one split for the whole list, there will be no more, it's the end - splitRanges.append(SplitRange(itemId: items[unclosedSplitIndex].id, indexRangeInReversed: unclosedSplitIndex ... index, indexRangeInParentItems: unclosedSplitIndexInParent ... visibleItemIndexInParent)) + splitRanges.append(SplitRange(indexRangeInReversed: unclosedSplitIndex ... index, indexRangeInParentItems: unclosedSplitIndexInParent ... visibleItemIndexInParent)) } indexInParentItems[item.id] = visibleItemIndexInParent index += 1 } logger.debug("LALAL STEP 7") - logger.debug("LALAL SPLITs IN MERGED \(String(describing: splitRanges)) in state \(chatState.splits)") var snapshot = NSDiffableDataSourceSnapshot() snapshot.appendSections([ReverseListSection.main]) snapshot.appendItems(mergedItems) @@ -225,9 +224,6 @@ enum MergedItem: Hashable, Equatable { } struct SplitRange { - // added in iOS only to check whether the state is synchronized. - // TODO: find a better way to synchronize MergedItems with ActiveChatState && reversedChatItems - let itemId: Int64 /** range of indexes inside reversedChatItems where the first element is the split (it's index is [indexRangeInReversed.first]) * so [0, 1, 2, -100-, 101] if the 3 is a split, SplitRange(indexRange = 3 .. 4) will be this SplitRange instance * (3, 4 indexes of the splitRange with the split itself at index 3) diff --git a/apps/ios/Shared/Views/Chat/ChatScrollHelpers.swift b/apps/ios/Shared/Views/Chat/ChatScrollHelpers.swift index 8dcae5ddf9..e2c295f9ec 100644 --- a/apps/ios/Shared/Views/Chat/ChatScrollHelpers.swift +++ b/apps/ios/Shared/Views/Chat/ChatScrollHelpers.swift @@ -80,7 +80,6 @@ func preloadItems(_ mergedItems: MergedItems, _ allowLoadMoreItems: Bool, _ list if let split, split.indexRangeInParentItems.lowerBound + remaining > firstVisibleIndex { let index = items.count - 1 - split.indexRangeInReversed.lowerBound if index >= 0 { - logger.debug("LALAL SPLITS \(String(describing: splits)) \(index) \(split.indexRangeInParentItems.debugDescription) \(items.firstIndex(where: { item in item.id == ItemsModel.shared.chatState.splits.first! }) ?? -1) \(ItemsModel.shared.chatState.splits.first!) \(items[index].id) \(String(describing: items.map({ item in item.id })))") let loadFromItemId = items[index].id _ = await loadItems(ChatPagination.after(chatItemId: loadFromItemId, count: ChatPagination.PRELOAD_COUNT)) } diff --git a/apps/ios/Shared/Views/Chat/ReverseList.swift b/apps/ios/Shared/Views/Chat/ReverseList.swift index b469987d44..22d2c47853 100644 --- a/apps/ios/Shared/Views/Chat/ReverseList.swift +++ b/apps/ios/Shared/Views/Chat/ReverseList.swift @@ -371,45 +371,25 @@ struct ReverseList: UIViewControllerRepresentable { nil } let nowFirstIndex: Int? = if let wasFirstId { indexInParentItems[wasFirstId] } else { nil } -// let countDiff = if let wasFirstIndex, let nowFirstIndex { -// nowFirstIndex - wasFirstIndex -// } else { -// 0 -// } - //if countDiff > 0 { - //self.stopScrolling() - //} self.prevSnapshot = snapshot self.prevMergedItems = mergedItems dataSource.apply( snapshot, animatingDifferences: false ) -// logger.debug("LALAL WAS0 \(self.prevSnapshot.itemIdentifiers.map({ item in item.newest().item.id}))") - // logger.debug("LALAL WAS1 \(snapshot.itemIdentifiers.map({ item in item.newest().item.id}))") - - // sometimes it moved position but there is no reason for it - dataset has same item indexes - let tableViewProducedDiff = if let wasFirst = listState?.firstVisibleItemIndex, let nowFirst = self.getListState()?.firstVisibleItemIndex { - 0//wasFirst - nowFirst - } else { - 0 - } - let countDiff = if let wasFirstIndex, let nowFirstIndex { - nowFirstIndex - wasFirstIndex - tableViewProducedDiff + nowFirstIndex - wasFirstIndex } else { 0 } - logger.debug("LALAL NEARSPLIT split lower WAS LISTSTATE \(listState?.firstVisibleItemIndex ?? -3) now \(self.getListState()?.firstVisibleItemIndex ?? -4) countDiff \(countDiff) (tableDiff \(tableViewProducedDiff)) wasFirstIndex \(wasFirstIndex ?? -5) nowIndex \(nowFirstIndex ?? -1) wasFirstId \(wasFirstId ?? -1) count \(self.prevSnapshot.itemIdentifiers.count)") + //logger.debug("LALAL NEARSPLIT split lower WAS LISTSTATE \(listState?.firstVisibleItemIndex ?? -3) now \(self.getListState()?.firstVisibleItemIndex ?? -4) countDiff \(countDiff) wasFirstIndex \(wasFirstIndex ?? -5) nowIndex \(nowFirstIndex ?? -1) wasFirstId \(wasFirstId ?? -1) count \(self.prevSnapshot.itemIdentifiers.count)") - if countDiff <= 0 && tableViewProducedDiff == 0 { + if countDiff <= 0 { // added new items to top, nothing to do, scrolling position is correct } else { - logger.debug("LALAL NEARSPLIT split lower added on BOTTOM") self.stopScrolling() // added new items to bottom - // logger.debug("LALAL WAS HEIGHT \(wasContentHeight) now \(self.tableView.contentSize.height), offset was \(wasOffset), now \(self.tableView.contentOffset.y), will be \(self.tableView.contentOffset.y + (self.tableView.contentSize.height - wasContentHeight)), countDiff \(countDiff), wasVisibleRow \(wasFirstVisibleRow), wasFirstVisibleOffset \(wasFirstVisibleOffset)") - logger.debug("LALAL BEFORE SCROLLTOROW \(snapshot.numberOfItems - 1) \(countDiff) \(wasFirstIndex ?? -5) \(self.tableView.contentOffset.y) \(wasFirstVisibleOffset) \(String(describing: self.representer.mergedItems.splits))") - self.getListState() + //logger.debug("LALAL BEFORE SCROLLTOROW \(snapshot.numberOfItems - 1) \(countDiff) \(wasFirstIndex ?? -5) \(self.tableView.contentOffset.y) \(wasFirstVisibleOffset) \(String(describing: self.representer.mergedItems.splits))") + //self.getListState() self.tableView.scrollToRow( at: IndexPath(row: max(0, min(snapshot.numberOfItems - 1, countDiff + (wasFirstIndex ?? 0))), section: 0), at: .top, @@ -419,9 +399,9 @@ struct ReverseList: UIViewControllerRepresentable { CGPoint(x: 0, y: self.tableView.contentOffset.y - wasFirstVisibleOffset), animated: false ) - logger.debug("LALAL AFTER SCROLLTOROW") - let state = self.getListState()! - logger.debug("LALAL NOW FIRST VISIBLE \(state.firstVisibleItemIndex) \(state.firstVisibleItemOffset)") + //logger.debug("LALAL AFTER SCROLLTOROW") + //let state = self.getListState()! + //logger.debug("LALAL NOW FIRST VISIBLE \(state.firstVisibleItemIndex) \(state.firstVisibleItemOffset)") if let t = translationToApply { // self.tableView.panGestureRecognizer.setTranslation(CGPointMake(t.x, t.y), in: self.tableView.superview!) @@ -444,7 +424,7 @@ struct ReverseList: UIViewControllerRepresentable { ) prevSnapshot = snapshot prevMergedItems = mergedItems - self.getListState() + //self.getListState() logger.debug("LALAL STEP 5 3") updatingInProgress = false tableView.panGestureRecognizer.isEnabled = true @@ -458,10 +438,10 @@ struct ReverseList: UIViewControllerRepresentable { if representer.scrollState == .atDestination, let listState = self.getListState() { if nearSplit(remaining: 30, ignoreTopOfTopSplit: true, listState, prevMergedItems) { - logger.debug("LALAL IN SPLIT OR NO YESSSSSS \(listState.firstVisibleItemIndex)..\(listState.lastVisibleItemIndex) \(String(describing: self.prevMergedItems.splits))") + //logger.debug("LALAL IN SPLIT OR NO YESSSSSS \(listState.firstVisibleItemIndex)..\(listState.lastVisibleItemIndex) \(String(describing: self.prevMergedItems.splits))") stopScrolling(disable: false) } - logger.debug("LALAL IN SPLIT OR NO \(self.nearSplit(remaining: 40, ignoreTopOfTopSplit: false, listState, self.prevMergedItems)) \(listState.firstVisibleItemIndex)..\(listState.lastVisibleItemIndex) \(String(describing: self.prevMergedItems.splits))") + //logger.debug("LALAL IN SPLIT OR NO \(self.nearSplit(remaining: 40, ignoreTopOfTopSplit: false, listState, self.prevMergedItems)) \(listState.firstVisibleItemIndex)..\(listState.lastVisibleItemIndex) \(String(describing: self.prevMergedItems.splits))") if let block = runBlockOnEndDecelerating, nearSplit(remaining: 40, ignoreTopOfTopSplit: false, listState, prevMergedItems) { if !updatingInProgress { runBlockOnEndDecelerating = nil @@ -499,7 +479,7 @@ struct ReverseList: UIViewControllerRepresentable { let lastVisibleIndex = listState.lastVisibleItemIndex for split in prevMergedItems.splits { // before any split - logger.debug("LALAL NEARSPLIT split lower \(split.indexRangeInParentItems.lowerBound) last \(lastVisibleIndex) first \(firstVisibleIndex) remaining \(remaining)") + //logger.debug("LALAL NEARSPLIT split lower \(split.indexRangeInParentItems.lowerBound) last \(lastVisibleIndex) first \(firstVisibleIndex) remaining \(remaining)") if split.indexRangeInParentItems.lowerBound > lastVisibleIndex { if lastVisibleIndex > (split.indexRangeInParentItems.lowerBound - remaining) { return true