diff --git a/submodules/BrowserUI/Sources/BrowserPdfContent.swift b/submodules/BrowserUI/Sources/BrowserPdfContent.swift index 4b67b6849a..27b2f34a9a 100644 --- a/submodules/BrowserUI/Sources/BrowserPdfContent.swift +++ b/submodules/BrowserUI/Sources/BrowserPdfContent.swift @@ -55,7 +55,8 @@ final class BrowserPdfContent: UIView, BrowserContent, UIScrollViewDelegate, PDF self.file = file self.pdfView = PDFView() - + self.pdfView.clipsToBounds = false + var scrollView: UIScrollView? for view in self.pdfView.subviews { if let view = view as? UIScrollView { @@ -69,6 +70,7 @@ final class BrowserPdfContent: UIView, BrowserContent, UIScrollViewDelegate, PDF } } self.scrollView = scrollView + scrollView?.clipsToBounds = false self.pdfView.displayDirection = .vertical self.pdfView.autoScales = true @@ -296,7 +298,14 @@ final class BrowserPdfContent: UIView, BrowserContent, UIScrollViewDelegate, PDF self.previousScrollingOffset = ScrollingOffsetState(value: self.scrollView.contentOffset.y, isDraggingOrDecelerating: self.scrollView.isDragging || self.scrollView.isDecelerating) - let pdfViewFrame = CGRect(origin: CGPoint(x: insets.left, y: insets.top), size: CGSize(width: size.width - insets.left - insets.right, height: size.height - insets.top - insets.bottom)) + let currentBounds = self.scrollView.bounds + let offsetToBottomEdge = max(0.0, self.scrollView.contentSize.height - currentBounds.maxY) + var bottomInset = insets.bottom + if offsetToBottomEdge < 128.0 { + bottomInset = fullInsets.bottom + } + + let pdfViewFrame = CGRect(origin: CGPoint(x: insets.left, y: insets.top), size: CGSize(width: size.width - insets.left - insets.right, height: size.height - insets.top - bottomInset)) transition.setFrame(view: self.pdfView, frame: pdfViewFrame) if isFirstTime { @@ -370,6 +379,10 @@ final class BrowserPdfContent: UIView, BrowserContent, UIScrollViewDelegate, PDF } if !decelerate { self.snapScrollingOffsetToInsets() + + if self.ignoreUpdatesUntilScrollingStopped { + self.ignoreUpdatesUntilScrollingStopped = false + } } } @@ -378,9 +391,16 @@ final class BrowserPdfContent: UIView, BrowserContent, UIScrollViewDelegate, PDF scrollViewDelegate.scrollViewDidEndDecelerating?(scrollView) } self.snapScrollingOffsetToInsets() + + if self.ignoreUpdatesUntilScrollingStopped { + self.ignoreUpdatesUntilScrollingStopped = false + } } private func updateScrollingOffset(isReset: Bool, transition: ComponentTransition) { + guard !self.ignoreUpdatesUntilScrollingStopped else { + return + } guard let scrollView = self.scrollView else { return } @@ -412,8 +432,12 @@ final class BrowserPdfContent: UIView, BrowserContent, UIScrollViewDelegate, PDF } } + private var ignoreUpdatesUntilScrollingStopped = false func resetScrolling() { self.updateScrollingOffset(isReset: true, transition: .spring(duration: 0.4)) + if self.scrollView.isDecelerating { + self.ignoreUpdatesUntilScrollingStopped = true + } } private func open(url: String, new: Bool) { diff --git a/submodules/TelegramCore/Sources/State/StickerManagement.swift b/submodules/TelegramCore/Sources/State/StickerManagement.swift index 2812f370f3..42c8bf5adb 100644 --- a/submodules/TelegramCore/Sources/State/StickerManagement.swift +++ b/submodules/TelegramCore/Sources/State/StickerManagement.swift @@ -65,7 +65,7 @@ func resolveMissingStickerSets(network: Network, postbox: Postbox, stickerSets: var missingSignals: [Signal<(Int, Api.StickerSetCovered)?, NoError>] = [] for i in 0 ..< stickerSets.count { switch stickerSets[i] { - case let .stickerSetNoCovered(value): + case let .stickerSetNoCovered(value), let .stickerSetCovered(value, _): switch value { case let .stickerSet(_, _, id, accessHash, _, _, _, _, _, _, _, hash): if ignorePacksWithHashes[id] == hash { @@ -143,7 +143,7 @@ func updatedFeaturedStickerPacks(network: Network, postbox: Postbox, category: F case .featuredStickersNotModified: return .single(.notModified) case let .featuredStickers(flags, _, _, sets, unread): - return resolveMissingStickerSets(network: network, postbox: postbox, stickerSets: sets, ignorePacksWithHashes: initialPackMap.mapValues({ item in + return resolveMissingStickerSets(network: network, postbox: postbox, stickerSets: sets, ignorePacksWithHashes: initialPackMap.filter { $0.value.topItems.count > 1 }.mapValues({ item in item.info.hash })) |> castError(MTRpcError.self) @@ -153,8 +153,10 @@ func updatedFeaturedStickerPacks(network: Network, postbox: Postbox, category: F for set in sets { var (info, items) = parsePreviewStickerSet(set, namespace: category.collectionIdNamespace) if let previousPack = initialPackMap[info.id.id] { - if previousPack.info.hash == info.hash { + if previousPack.info.hash == info.hash, previousPack.topItems.count > 1 { items = previousPack.topItems + } else { + items = Array(items.prefix(5)) } } updatedPacks.append(FeaturedStickerPackItem(info: info, topItems: items, unread: unreadIds.contains(info.id.id)))