diff --git a/Sources/RDReaderView/EPUBUI/ReaderController/RDEPUBPageMapReconciliationCoordinator.swift b/Sources/RDReaderView/EPUBUI/ReaderController/RDEPUBPageMapReconciliationCoordinator.swift index 03b85e8..c601bfe 100644 --- a/Sources/RDReaderView/EPUBUI/ReaderController/RDEPUBPageMapReconciliationCoordinator.swift +++ b/Sources/RDReaderView/EPUBUI/ReaderController/RDEPUBPageMapReconciliationCoordinator.swift @@ -164,6 +164,7 @@ final class RDEPUBPageMapReconciliationCoordinator { lastBuildableSpineIndex: Int ) -> RDEPUBPageMapTakeoverDecision { let candidateIndices = Set(candidatePageMap.entries.map { $0.spineIndex }) + let currentIndices = Set(currentWindow.entries.map { $0.spineIndex }) let currentEntries = currentWindow.entries.count if let currentSpineIndex { @@ -189,8 +190,8 @@ final class RDEPUBPageMapReconciliationCoordinator { } } - let isComplete = candidateIndices.count >= currentEntries - if isComplete { + let coversCurrentWindow = currentIndices.isSubset(of: candidateIndices) + if coversCurrentWindow { RDEPUBBackgroundTrace.log( "Reconciliation", "evaluateFullPageMapTakeover: fullReplace — candidateChapters=\(candidateIndices.count) currentChapters=\(currentEntries) candidatePages=\(candidatePageMap.totalPages) currentPages=\(currentWindow.totalPages)" @@ -198,6 +199,10 @@ final class RDEPUBPageMapReconciliationCoordinator { return .fullReplace(candidatePageMap) } + RDEPUBBackgroundTrace.log( + "Reconciliation", + "evaluateFullPageMapTakeover: keepCurrentWindow — candidate does not cover currentWindow candidateChapters=\(candidateIndices.count) currentChapters=\(currentEntries)" + ) return .keepCurrentWindow }