mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-09-16 12:43:02 +00:00
fix initial loading and trimming items
This commit is contained in:
@@ -962,6 +962,7 @@ final class ChatModel: ObservableObject {
|
||||
memberIds.insert(m.groupMemberId)
|
||||
}
|
||||
} else {
|
||||
// LALAL getPrevHiddenMember: index >= count of reversed items: 176 vs 50
|
||||
logger.error("getPrevHiddenMember: index >= count of reversed items: \(i) vs \(items.count)")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ func preloadItems(_ mergedItems: MergedItems, _ allowLoadMoreItems: Bool, _ list
|
||||
var lastIndexToLoadFrom: Int? = findLastIndexToLoadFromInSplits(firstVisibleIndex, lastVisibleIndex, remaining, splits)
|
||||
logger.debug("LALAL LASTINDEX TO LOAD FROM \(lastIndexToLoadFrom ?? -1)")
|
||||
let items: [ChatItem] = ItemsModel.shared.reversedChatItems.reversed()
|
||||
if splits.isEmpty && !items.isEmpty && lastVisibleIndex > mergedItems.items.count - remaining && items.count >= ChatPagination.INITIAL_COUNT {
|
||||
if splits.isEmpty && !items.isEmpty && lastVisibleIndex > mergedItems.items.count - remaining {
|
||||
lastIndexToLoadFrom = items.count - 1
|
||||
}
|
||||
logger.debug("LALAL LASTINDEX TO LOAD FROM after \(lastIndexToLoadFrom ?? -1), count \(items.count)")
|
||||
@@ -102,6 +102,7 @@ private func lastFullyVisibleIemInListState(_ mergedItems: MergedItems, _ listSt
|
||||
}
|
||||
|
||||
private func findLastIndexToLoadFromInSplits(_ firstVisibleIndex: Int, _ lastVisibleIndex: Int, _ remaining: Int, _ splits: [SplitRange]) -> Int? {
|
||||
// logger.debug("LALAL SPLITS \(String(describing: splits)) \(firstVisibleIndex) / \(remaining) \(lastVisibleIndex)")
|
||||
for split in splits {
|
||||
// before any split
|
||||
if split.indexRangeInParentItems.lowerBound > firstVisibleIndex {
|
||||
|
||||
@@ -553,16 +553,6 @@ struct ChatView: View {
|
||||
|
||||
func updateOnListChange(_ items: [MergedItem], _ listState: ListState) {
|
||||
let im = ItemsModel.shared
|
||||
// let unreadBelow =
|
||||
// if let id = listState.bottomItemId,
|
||||
// let index = im.reversedChatItems.firstIndex(where: { $0.id == id })
|
||||
// {
|
||||
// im.reversedChatItems[..<index].reduce(into: 0) { unread, chatItem in
|
||||
// if chatItem.isRcvNew { unread += 1 }
|
||||
// }
|
||||
// } else {
|
||||
// 0
|
||||
// }
|
||||
let lastVisibleItem = oldestPartiallyVisibleListItemInListStateOrNull(items, listState)
|
||||
let unreadBelow = if let lastVisibleItem {
|
||||
max(0, totalUnread - lastVisibleItem.unreadBefore)
|
||||
|
||||
@@ -577,6 +577,12 @@ struct ComposeView: View {
|
||||
}
|
||||
}
|
||||
.onAppear {
|
||||
// LALAL
|
||||
// for i in 301 ... 600 {
|
||||
// Task {
|
||||
// await sendMessageAsync("\(i)", live: false, ttl: nil)
|
||||
// }
|
||||
// }
|
||||
if case let .voicePreview(_, duration) = composeState.preview {
|
||||
voiceMessageRecordingTime = TimeInterval(duration)
|
||||
}
|
||||
|
||||
@@ -246,15 +246,12 @@ struct ReverseList<Content: View>: UIViewControllerRepresentable {
|
||||
// in case of listener will not be called
|
||||
await MainActor.run {
|
||||
representer.scrollState = .atDestination
|
||||
logger.debug("LALAL SET DESTINATION0")
|
||||
}
|
||||
} catch {}
|
||||
}
|
||||
runBlockOnEndScrolling = {
|
||||
task.cancel()
|
||||
logger.debug("LALAL ENDED SCROLLING")
|
||||
self.representer.scrollState = .atDestination
|
||||
logger.debug("LALAL SET DESTINATION1")
|
||||
self.runBlockOnEndScrolling = nil
|
||||
}
|
||||
}
|
||||
@@ -283,7 +280,6 @@ struct ReverseList<Content: View>: UIViewControllerRepresentable {
|
||||
let listState = getListState(items)
|
||||
let wasFirstVisibleRow = listState?.firstVisibleItemIndex ?? 0//tableView.indexPathsForVisibleRows?.first?.row ?? 0
|
||||
let wasFirstVisibleOffset = listState?.firstVisibleItemOffset ?? 0
|
||||
let countDiff = max(0, snapshot.numberOfItems - prevSnapshot.numberOfItems)
|
||||
// Sets content offset on initial load
|
||||
if wasCount == 0 {
|
||||
dataSource.apply(
|
||||
@@ -323,12 +319,18 @@ struct ReverseList<Content: View>: UIViewControllerRepresentable {
|
||||
animatingDifferences: false
|
||||
)
|
||||
logger.debug("LALAL WAS LISTSTATE \(listState?.firstVisibleItemIndex ?? -3) now \(self.getListState(items)?.firstVisibleItemIndex ?? -4)")
|
||||
if listState?.firstVisibleItemIndex == getListState(items)?.firstVisibleItemIndex {
|
||||
let newListState = getListState(items)
|
||||
if listState?.firstVisibleItemIndex == newListState?.firstVisibleItemIndex {
|
||||
// added new items to top
|
||||
} else {
|
||||
self.tableView.setContentOffset(self.tableView.contentOffset, animated: false)
|
||||
// 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)")
|
||||
let countDiff = if let listState, let newListState {
|
||||
newListState.firstVisibleItemIndex - listState.firstVisibleItemIndex
|
||||
} else {
|
||||
max(0, snapshot.numberOfItems - prevSnapshot.numberOfItems)
|
||||
}
|
||||
logger.debug("LALAL BEFORE SCROLLTOROW \(snapshot.numberOfItems - 1) \(countDiff) \(wasFirstVisibleRow) \(self.tableView.contentOffset.y) \(wasFirstVisibleOffset)")
|
||||
getListState(items)
|
||||
self.tableView.scrollToRow(
|
||||
|
||||
Reference in New Issue
Block a user