Fix for pagination getting stuck when swiping preview items

This commit is contained in:
Mauro Romito
2026-07-31 17:39:54 +02:00
committed by Mauro
parent 94cd9590b5
commit bbc995e2c9
2 changed files with 15 additions and 6 deletions
@@ -33,7 +33,14 @@ class TimelineMediaPreviewDataSource: NSObject, QLPreviewControllerDataSource {
private var backwardPadding: Int
private var forwardPadding: Int
var paginationState: TimelinePaginationState
/// Reaching the end of the timeline changes which placeholder an index shows, so a change
/// needs to be published too, not only the arrival of new items.
var paginationState: TimelinePaginationState {
didSet {
guard paginationState != oldValue else { return }
previewItemsPaginationPublisher.send()
}
}
/// The gallery attachments to include, so that a gallery only contributes the media being browsed.
private let allowedGalleryItemTypes: [TimelineAllowedGalleryItemType]?
@@ -243,11 +243,13 @@ class TimelineMediaPreviewController: QLPreviewController {
}
private func handleUpdatedItems() {
if currentPreviewItem is TimelineMediaPreviewItem.Loading {
let dataSource = context.viewState.dataSource
if dataSource.previewController(self, previewItemAt: currentPreviewItemIndex) is TimelineMediaPreviewItem.Media {
refreshCurrentPreviewItem() // This will trigger loadCurrentItem automatically.
}
guard let displayedItem = currentPreviewItem as? TimelineMediaPreviewItem.Loading else { return }
// The index may now hold a media, or a different placeholder having reached the end of
// the timeline, in which case what's on display is stale.
let dataSource = context.viewState.dataSource
if dataSource.previewController(self, previewItemAt: currentPreviewItemIndex) as AnyObject !== displayedItem {
refreshCurrentPreviewItem() // This will trigger loadCurrentItem automatically.
}
}