fix epub reader playback and trial navigation

This commit is contained in:
shen
2026-07-11 08:16:56 +08:00
parent d7fcda345d
commit 063a493b18
231 changed files with 435 additions and 36060 deletions
@@ -12,6 +12,12 @@ protocol RDEpubReaderPageResourceReleasing {
func releaseResources()
}
///
///
protocol RDEpubReaderPageVisibilityHandling: AnyObject {
func readerPageVisibilityDidChange(isVisible: Bool)
}
final class RDEpubReaderPreloadController {
var radius: Int = 2
@@ -121,6 +127,17 @@ final class RDEpubReaderPreloadController {
return preloaded
}
func updatePageVisibility(visiblePageNumbers: Set<Int>) {
var notifiedViews = Set<ObjectIdentifier>()
let cachedViews = pageCurlCachedViews.merging(preloadedPageViews) { current, _ in current }
for (pageNumber, view) in cachedViews {
let identifier = ObjectIdentifier(view)
guard notifiedViews.insert(identifier).inserted else { continue }
(view as? RDEpubReaderPageVisibilityHandling)?
.readerPageVisibilityDidChange(isVisible: visiblePageNumbers.contains(pageNumber))
}
}
func prime(
around pageNum: Int,
preferredForward: Bool? = nil,
@@ -164,7 +181,14 @@ final class RDEpubReaderPreloadController {
"cache HIT(pageCurl) page=\(targetPage) view=\(RDEpubReaderTapDebug.describe(cached))"
)
} else {
contentView = contentViewProvider(targetPage, nil) ?? UIView()
guard let providedView = contentViewProvider(targetPage, nil) else {
//
//
preloadedPageViews.removeValue(forKey: targetPage)
pageCurlCachedViews.removeValue(forKey: targetPage)
continue
}
contentView = providedView
RDEpubReaderTapDebug.log(
"PreloadController.prime",
"cache MISS page=\(targetPage) created=\(RDEpubReaderTapDebug.describe(contentView))"