diff --git a/mreader/ReaderView.swift b/mreader/ReaderView.swift index 1b2da9c..e2b986a 100644 --- a/mreader/ReaderView.swift +++ b/mreader/ReaderView.swift @@ -171,6 +171,18 @@ nonisolated private struct InitialReadingPreset { ) } +nonisolated enum ReadingPresetSamplePagePolicy { + static func pageIndices(totalPages: Int) -> [Int] { + guard totalPages > 0 else { return [] } + + let preferredEnd = min(totalPages, 5) + guard 2 < preferredEnd else { + return Array(0.. [Int] { - guard totalPages > 0 else { return [] } - let preferred = (2.. CGFloat? { guard !ratios.isEmpty else { return nil } let sortedRatios = ratios.sorted() @@ -1594,7 +1600,7 @@ struct ReaderView: View { reason: "pdf" ) } - let sampleIndices = readingPresetSamplePageIndices(totalPages: manager.pages.count) + let sampleIndices = ReadingPresetSamplePagePolicy.pageIndices(totalPages: manager.pages.count) guard !sampleIndices.isEmpty else { print("MReader initial preset fallback: no sample pages for comic=\(comic.id)") return InitialReadingPreset.normalPage @@ -1628,15 +1634,6 @@ struct ReaderView: View { ) } - private func readingPresetSamplePageIndices(totalPages: Int) -> [Int] { - guard totalPages > 0 else { return [] } - let preferred = (2.. CGFloat? { guard !ratios.isEmpty else { return nil } let sortedRatios = ratios.sorted() diff --git a/mreaderTests/ReaderReadingPresetTests.swift b/mreaderTests/ReaderReadingPresetTests.swift new file mode 100644 index 0000000..509c99d --- /dev/null +++ b/mreaderTests/ReaderReadingPresetTests.swift @@ -0,0 +1,14 @@ +import Testing +@testable import mreader + +struct ReaderReadingPresetTests { + @Test + func samplePageIndicesHandleShortBooksWithoutCreatingAnInvalidRange() { + #expect(ReadingPresetSamplePagePolicy.pageIndices(totalPages: 0) == []) + #expect(ReadingPresetSamplePagePolicy.pageIndices(totalPages: 1) == [0]) + #expect(ReadingPresetSamplePagePolicy.pageIndices(totalPages: 2) == [0, 1]) + #expect(ReadingPresetSamplePagePolicy.pageIndices(totalPages: 3) == [2]) + #expect(ReadingPresetSamplePagePolicy.pageIndices(totalPages: 5) == [2, 3, 4]) + #expect(ReadingPresetSamplePagePolicy.pageIndices(totalPages: 8) == [2, 3, 4]) + } +}