This commit is contained in:
Ali 2023-07-14 16:55:42 +04:00
parent 5386d0675d
commit b0cbdacca7
2 changed files with 31 additions and 56 deletions

View File

@ -966,8 +966,13 @@ public final class ChatListContainerNode: ASDisplayNode, UIGestureRecognizerDele
guard let self, !self.isInlineMode else { guard let self, !self.isInlineMode else {
return return
} }
guard let validLayout = self.validLayout else {
return
}
let tempTopInset: CGFloat let tempTopInset: CGFloat
if self.currentItemNode.startedScrollingAtUpperBound && !self.isInlineMode { if validLayout.inlineNavigationLocation != nil {
tempTopInset = 0.0
} else if self.currentItemNode.startedScrollingAtUpperBound && !self.isInlineMode {
if let controller = self.controller, let storySubscriptions = controller.orderedStorySubscriptions, shouldDisplayStoriesInChatListHeader(storySubscriptions: storySubscriptions, isHidden: controller.location == .chatList(groupId: .archive)) { if let controller = self.controller, let storySubscriptions = controller.orderedStorySubscriptions, shouldDisplayStoriesInChatListHeader(storySubscriptions: storySubscriptions, isHidden: controller.location == .chatList(groupId: .archive)) {
tempTopInset = ChatListNavigationBar.storiesScrollHeight tempTopInset = ChatListNavigationBar.storiesScrollHeight
} else { } else {
@ -2029,33 +2034,31 @@ final class ChatListControllerNode: ASDisplayNode, UIGestureRecognizerDelegate {
} }
} }
private func getEffectiveNavigationScrollingOffset() -> CGFloat { private func updateNavigationScrolling(navigationHeight: CGFloat, transition: ContainedViewLayoutTransition) {
let mainOffset: CGFloat var mainOffset: CGFloat
if let contentOffset = self.mainContainerNode.contentOffset, case let .known(value) = contentOffset { if let contentOffset = self.mainContainerNode.contentOffset, case let .known(value) = contentOffset {
mainOffset = value mainOffset = value
} else { } else {
mainOffset = 1000.0 mainOffset = navigationHeight
} }
mainOffset = min(mainOffset, ChatListNavigationBar.searchScrollHeight)
let resultingOffset: CGFloat let resultingOffset: CGFloat
if let inlineStackContainerNode = self.inlineStackContainerNode { if let inlineStackContainerNode = self.inlineStackContainerNode {
let inlineOffset: CGFloat var inlineOffset: CGFloat
if let contentOffset = inlineStackContainerNode.contentOffset, case let .known(value) = contentOffset { if let contentOffset = inlineStackContainerNode.contentOffset, case let .known(value) = contentOffset {
inlineOffset = value inlineOffset = value
} else { } else {
inlineOffset = 1000.0 inlineOffset = navigationHeight
} }
inlineOffset = min(inlineOffset, ChatListNavigationBar.searchScrollHeight)
resultingOffset = mainOffset * (1.0 - self.inlineStackContainerTransitionFraction) + inlineOffset * self.inlineStackContainerTransitionFraction resultingOffset = mainOffset * (1.0 - self.inlineStackContainerTransitionFraction) + inlineOffset * self.inlineStackContainerTransitionFraction
} else { } else {
resultingOffset = mainOffset resultingOffset = mainOffset
} }
return resultingOffset var offset = resultingOffset
}
private func updateNavigationScrolling(transition: ContainedViewLayoutTransition) {
var offset = self.getEffectiveNavigationScrollingOffset()
if self.isSearchDisplayControllerActive { if self.isSearchDisplayControllerActive {
offset = 0.0 offset = 0.0
} }
@ -2075,6 +2078,9 @@ final class ChatListControllerNode: ASDisplayNode, UIGestureRecognizerDelegate {
crossfadeStoryPeers: false crossfadeStoryPeers: false
))) )))
} }
let mainDelta = resultingOffset - mainOffset
transition.updateSublayerTransformOffset(layer: self.mainContainerNode.layer, offset: CGPoint(x: 0.0, y: -mainDelta))
} }
func requestNavigationBarLayout(transition: Transition) { func requestNavigationBarLayout(transition: Transition) {
@ -2226,7 +2232,7 @@ final class ChatListControllerNode: ASDisplayNode, UIGestureRecognizerDelegate {
} }
} }
self.updateNavigationScrolling(transition: transition) self.updateNavigationScrolling(navigationHeight: navigationBarLayout.navigationHeight, transition: transition)
if let navigationBarComponentView = self.navigationBarView.view as? ChatListNavigationBar.View { if let navigationBarComponentView = self.navigationBarView.view as? ChatListNavigationBar.View {
navigationBarComponentView.deferScrollApplication = false navigationBarComponentView.deferScrollApplication = false
@ -2342,50 +2348,7 @@ final class ChatListControllerNode: ASDisplayNode, UIGestureRecognizerDelegate {
let _ = inlineStackContainerNode let _ = inlineStackContainerNode
} }
self.updateNavigationScrolling(transition: self.tempNavigationScrollingTransition ?? .immediate) self.updateNavigationScrolling(navigationHeight: containerLayout.navigationBarHeight, transition: self.tempNavigationScrollingTransition ?? .immediate)
/*if !isPrimary {
self.contentOffsetChanged?(offset)
if "".isEmpty {
return
}
} else {
if "".isEmpty {
return
}
}
let targetNode: ChatListContainerNode
if isPrimary {
targetNode = inlineStackContainerNode
} else {
targetNode = self.mainContainerNode
}
switch offset {
case let .known(value) where (value <= containerLayout.navigationBarHeight - 76.0 - 46.0 - 8.0 + UIScreenPixel || self.contentOffsetSyncLockedIn):
if case let .known(otherValue) = targetNode.currentItemNode.visibleContentOffset(), abs(otherValue - value) <= UIScreenPixel {
self.contentOffsetSyncLockedIn = true
}
default:
break
}
switch offset {
case let .known(value) where self.contentOffsetSyncLockedIn:
var targetValue = value
if targetValue > containerLayout.navigationBarHeight - 76.0 - 46.0 - 8.0 {
targetValue = containerLayout.navigationBarHeight - 76.0 - 46.0 - 8.0
}
targetNode.fixContentOffset(offset: targetValue)
self.contentOffsetChanged?(offset)
default:
if !isPrimary {
self.contentOffsetChanged?(offset)
}
}*/
} }
private func shouldStopScrolling(listView: ListView, velocity: CGFloat, isPrimary: Bool) -> Bool { private func shouldStopScrolling(listView: ListView, velocity: CGFloat, isPrimary: Bool) -> Bool {
@ -2538,8 +2501,10 @@ final class ChatListControllerNode: ASDisplayNode, UIGestureRecognizerDelegate {
}) })
self.temporaryContentOffsetChangeTransition = transition self.temporaryContentOffsetChangeTransition = transition
self.tempNavigationScrollingTransition = transition
self.controller?.requestLayout(transition: transition) self.controller?.requestLayout(transition: transition)
self.temporaryContentOffsetChangeTransition = nil self.temporaryContentOffsetChangeTransition = nil
self.tempNavigationScrollingTransition = nil
} else { } else {
inlineStackContainerNode.removeFromSupernode() inlineStackContainerNode.removeFromSupernode()
} }

View File

@ -2155,6 +2155,16 @@ class ChatListItemNode: ItemListRevealOptionsItemNode {
} }
} }
} }
if textString.length == 0, case let .groupReference(data) = item.content, let storyState = data.storyState, storyState.stats.totalCount != 0 {
//TODO:localize
let storyText: String
if storyState.stats.totalCount == 1 {
storyText = "1 story"
} else {
storyText = "\(storyState.stats.totalCount) stories"
}
textString.append(NSAttributedString(string: storyText, font: textFont, textColor: theme.messageTextColor))
}
attributedText = textString attributedText = textString
} }