Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file. Take a look

* Support for displaying Divina (image-based publications like CBZ) in the fixed-layout EPUB navigator.
* Bitmap images in the EPUB reading order are now supported as a fixed layout resource.
* Added `offsetFirstPage` preference for fixed-layout EPUBs to control whether the first page is displayed alone or alongside the second page when spreads are enabled.

#### Streamer

Expand Down
4 changes: 2 additions & 2 deletions Sources/Navigator/EPUB/EPUBFixedSpreadView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ final class EPUBFixedSpreadView: EPUBSpreadView {
scrollView.backgroundColor = UIColor.clear

// Loads the wrapper page into the web view.
let spreadFile = "fxl-spread-\(spread.spread ? "two" : "one")"
let spreadFile = "fxl-spread-\(viewModel.spreadEnabled ? "two" : "one")"
if
let wrapperPageURL = Bundle.module.url(forResource: spreadFile, withExtension: "html", subdirectory: "Assets"),
var wrapperPage = try? String(contentsOf: wrapperPageURL, encoding: .utf8)
Expand Down Expand Up @@ -107,7 +107,7 @@ final class EPUBFixedSpreadView: EPUBSpreadView {
// to be executed before the spread is loaded.
let spreadJSON = spread.jsonString(
forBaseURL: viewModel.publicationBaseURL,
readingOrder: viewModel.readingOrder
readingProgression: viewModel.readingProgression
)
webView.evaluateJavaScript("spread.load(\(spreadJSON));")
}
Expand Down
19 changes: 9 additions & 10 deletions Sources/Navigator/EPUB/EPUBNavigatorViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,7 @@ open class EPUBNavigatorViewController: InputObservableViewController,

if needsReloadSpreadsOnActive {
needsReloadSpreadsOnActive = false
reloadSpreads(force: true)
reloadSpreads()
}
}

Expand All @@ -420,7 +420,7 @@ open class EPUBNavigatorViewController: InputObservableViewController,

applySettings()

_reloadSpreads(force: true)
_reloadSpreads()

onInitializedCallbacks.complete()
}
Expand Down Expand Up @@ -556,7 +556,7 @@ open class EPUBNavigatorViewController: InputObservableViewController,
}

paginationView.isScrollEnabled = isPaginationViewScrollingEnabled
reloadSpreads(force: true)
reloadSpreads()
}

private var spreads: [EPUBSpread] = []
Expand All @@ -568,7 +568,7 @@ open class EPUBNavigatorViewController: InputObservableViewController,

private var needsReloadSpreadsOnActive = false

private func reloadSpreads(force: Bool) {
private func reloadSpreads() {
guard
state != .initializing,
isViewLoaded
Expand All @@ -585,16 +585,14 @@ open class EPUBNavigatorViewController: InputObservableViewController,
return
}

_reloadSpreads(force: force)
_reloadSpreads()
}

private func _reloadSpreads(force: Bool) {
private func _reloadSpreads() {
let locator = currentLocation

guard
let paginationView = paginationView,
// Already loaded with the expected amount of spreads?
force || spreads.first?.spread != viewModel.spreadEnabled,
on(.load(locator))
else {
return
Expand All @@ -604,7 +602,8 @@ open class EPUBNavigatorViewController: InputObservableViewController,
for: publication,
readingOrder: readingOrder,
readingProgression: viewModel.readingProgression,
spread: viewModel.spreadEnabled
spread: viewModel.spreadEnabled,
offsetFirstPage: viewModel.offsetFirstPage
)

let initialIndex: ReadingOrder.Index = {
Expand Down Expand Up @@ -1256,7 +1255,7 @@ extension EPUBNavigatorViewController: EPUBSpreadViewDelegate {
}

func spreadViewDidTerminate() {
reloadSpreads(force: true)
reloadSpreads()
}
}

Expand Down
2 changes: 2 additions & 0 deletions Sources/Navigator/EPUB/EPUBNavigatorViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@ final class EPUBNavigatorViewModel: Loggable {
|| oldSettings.scroll != newSettings.scroll
|| oldSettings.spread != newSettings.spread
|| oldSettings.fit != newSettings.fit
|| oldSettings.offsetFirstPage != newSettings.offsetFirstPage

// We don't commit the CSS changes if we invalidate the pagination, as
// the resources will be reloaded anyway.
Expand All @@ -248,6 +249,7 @@ final class EPUBNavigatorViewModel: Loggable {
var scroll: Bool { settings.scroll }
var verticalText: Bool { settings.verticalText }
var spread: Spread { settings.spread }
var offsetFirstPage: Bool? { settings.offsetFirstPage }

// MARK: Spread

Expand Down
11 changes: 4 additions & 7 deletions Sources/Navigator/EPUB/EPUBReflowableSpreadView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,7 @@ final class EPUBReflowableSpreadView: EPUBSpreadView {
log(.error, "Only one document at a time can be displayed in a reflowable spread")
return
}
let link = viewModel.readingOrder[spread.leading]
let url = viewModel.url(to: link)
let url = viewModel.url(to: spread.first.link)
webView.load(URLRequest(url: url.url))
}

Expand Down Expand Up @@ -135,7 +134,7 @@ final class EPUBReflowableSpreadView: EPUBSpreadView {

override func progression(in index: ReadingOrder.Index) -> ClosedRange<Double> {
guard
spread.leading == index,
spread.first.index == index,
let progression = progression
else {
return 0 ... 0
Expand All @@ -144,10 +143,8 @@ final class EPUBReflowableSpreadView: EPUBSpreadView {
}

override func spreadDidLoad() async {
if
let link = viewModel.readingOrder.getOrNil(spread.leading),
let linkJSON = serializeJSONString(link.json)
{
let link = spread.first.link
if let linkJSON = serializeJSONString(link.json) {
await evaluateScript("readium.link = \(linkJSON);")
}

Expand Down
Loading