diff --git a/Sources/Navigator/EPUB/EPUBNavigatorViewController.swift b/Sources/Navigator/EPUB/EPUBNavigatorViewController.swift index f8204376a..238b704fc 100644 --- a/Sources/Navigator/EPUB/EPUBNavigatorViewController.swift +++ b/Sources/Navigator/EPUB/EPUBNavigatorViewController.swift @@ -228,7 +228,7 @@ open class EPUBNavigatorViewController: UIViewController, } private let initialLocation: Locator? - private let readingOrder: [Link] + private let readingOrder: [Link]? private let viewModel: EPUBNavigatorViewModel private var publication: Publication { viewModel.publication } @@ -238,7 +238,7 @@ open class EPUBNavigatorViewController: UIViewController, public convenience init( publication: Publication, initialLocation: Locator?, - readingOrder: [Link]? = nil, + readingOrder: [Link]?, config: Configuration = .init(), httpServer: HTTPServer ) throws { @@ -277,10 +277,10 @@ open class EPUBNavigatorViewController: UIViewController, userSettings = config.userSettings } - private init(viewModel: EPUBNavigatorViewModel, initialLocation: Locator?, readingOrder: [Link]? = nil) { + private init(viewModel: EPUBNavigatorViewModel, initialLocation: Locator?, readingOrder: [Link]?) { self.viewModel = viewModel self.initialLocation = initialLocation - self.readingOrder = readingOrder ?? viewModel.publication.readingOrder + self.readingOrder = readingOrder super.init(nibName: nil, bundle: nil) @@ -532,7 +532,7 @@ open class EPUBNavigatorViewController: UIViewController, return nil } - return readingOrder.firstIndex(withHREF: spreads[currentSpreadIndex].left.href) + return (readingOrder ?? viewModel.publication.readingOrder).firstIndex(withHREF: spreads[currentSpreadIndex].left.href) } private let reloadSpreadsCompletions = CompletionList() @@ -643,8 +643,7 @@ open class EPUBNavigatorViewController: UIViewController, // The positions are not always available, for example a Readium WebPub doesn't have any // unless a Publication Positions Web Service is provided. if - let index = readingOrder.firstIndex(withHREF: href), - // FIXME: If readingOrder is provided we might need to do something different here: + let index = (readingOrder ?? viewModel.publication.readingOrder).firstIndex(withHREF: href), let positionList = Optional(publication.positionsByReadingOrder[index]), positionList.count > 0 { diff --git a/Sources/Navigator/EPUB/EPUBSpread.swift b/Sources/Navigator/EPUB/EPUBSpread.swift index df3034275..bab1133c8 100644 --- a/Sources/Navigator/EPUB/EPUBSpread.swift +++ b/Sources/Navigator/EPUB/EPUBSpread.swift @@ -117,15 +117,15 @@ struct EPUBSpread: Loggable { /// - publication: The Publication to build the spreads for. /// - readingProgression: Reading progression direction used to layout the pages. /// - spread: Indicates whether two pages are displayed side-by-side. - static func makeSpreads(for publication: Publication, readingOrder: [Link], readingProgression: ReadingProgression, spread: Bool) -> [EPUBSpread] { + static func makeSpreads(for publication: Publication, readingOrder: [Link]?, readingProgression: ReadingProgression, spread: Bool) -> [EPUBSpread] { spread ? makeTwoPagesSpreads(for: publication, readingOrder: readingOrder, readingProgression: readingProgression) : makeOnePageSpreads(for: publication, readingOrder: readingOrder, readingProgression: readingProgression) } /// Builds a list of one-page spreads for the given Publication. - private static func makeOnePageSpreads(for publication: Publication, readingOrder: [Link], readingProgression: ReadingProgression) -> [EPUBSpread] { - readingOrder.map { + private static func makeOnePageSpreads(for publication: Publication, readingOrder: [Link]?, readingProgression: ReadingProgression) -> [EPUBSpread] { + (readingOrder ?? publication.readingOrder).map { EPUBSpread( spread: false, links: [$0], @@ -136,7 +136,7 @@ struct EPUBSpread: Loggable { } /// Builds a list of two-page spreads for the given Publication. - private static func makeTwoPagesSpreads(for publication: Publication, readingOrder: [Link], readingProgression: ReadingProgression) -> [EPUBSpread] { + private static func makeTwoPagesSpreads(for publication: Publication, readingOrder: [Link]?, readingProgression: ReadingProgression) -> [EPUBSpread] { /// Builds two-pages spreads from a list of links and a spread accumulator. func makeSpreads(for links: [Link], in spreads: [EPUBSpread] = []) -> [EPUBSpread] { var links = links @@ -185,7 +185,7 @@ struct EPUBSpread: Loggable { } } - return makeSpreads(for: readingOrder) + return makeSpreads(for: readingOrder ?? publication.readingOrder) } }