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 backwardPadding: Int
private var forwardPadding: 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. /// The gallery attachments to include, so that a gallery only contributes the media being browsed.
private let allowedGalleryItemTypes: [TimelineAllowedGalleryItemType]? private let allowedGalleryItemTypes: [TimelineAllowedGalleryItemType]?
@@ -243,13 +243,15 @@ class TimelineMediaPreviewController: QLPreviewController {
} }
private func handleUpdatedItems() { private func handleUpdatedItems() {
if currentPreviewItem is TimelineMediaPreviewItem.Loading { 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 let dataSource = context.viewState.dataSource
if dataSource.previewController(self, previewItemAt: currentPreviewItemIndex) is TimelineMediaPreviewItem.Media { if dataSource.previewController(self, previewItemAt: currentPreviewItemIndex) as AnyObject !== displayedItem {
refreshCurrentPreviewItem() // This will trigger loadCurrentItem automatically. refreshCurrentPreviewItem() // This will trigger loadCurrentItem automatically.
} }
} }
}
private func handleFileLoaded(itemID: MediaPreviewItemID) { private func handleFileLoaded(itemID: MediaPreviewItemID) {
guard (currentPreviewItem as? TimelineMediaPreviewItem.Media)?.id == itemID else { return } guard (currentPreviewItem as? TimelineMediaPreviewItem.Media)?.id == itemID else { return }