@@ -91,6 +91,7 @@ class EpubNavigatorFragment internal constructor(
91
91
override val publication : Publication ,
92
92
private val baseUrl : String? ,
93
93
private val initialLocator : Locator ? ,
94
+ readingOrder : List <Link >? ,
94
95
private val initialPreferences : EpubPreferences ,
95
96
internal val listener : Listener ? ,
96
97
internal val paginationListener : PaginationListener ? ,
@@ -274,7 +275,12 @@ class EpubNavigatorFragment internal constructor(
274
275
)
275
276
}
276
277
277
- internal lateinit var positionsByReadingOrder: List <List <Locator >>
278
+ private val readingOrder: List <Link > = readingOrder ? : publication.readingOrder
279
+
280
+ private val positionsByReadingOrder: List <List <Locator >> =
281
+ if (readingOrder != null ) emptyList()
282
+ else runBlocking { publication.positionsByReadingOrder() }
283
+
278
284
internal lateinit var positions: List <Locator >
279
285
lateinit var resourcePager: R2ViewPager
280
286
@@ -306,13 +312,12 @@ class EpubNavigatorFragment internal constructor(
306
312
_binding = ActivityR2ViewpagerBinding .inflate(inflater, container, false )
307
313
val view = binding.root
308
314
309
- positionsByReadingOrder = runBlocking { publication.positionsByReadingOrder() }
310
315
positions = positionsByReadingOrder.flatten()
311
316
publicationIdentifier = publication.metadata.identifier ? : publication.metadata.title
312
317
313
318
when (viewModel.layout) {
314
319
EpubLayout .REFLOWABLE -> {
315
- resourcesSingle = publication. readingOrder.mapIndexed { index, link ->
320
+ resourcesSingle = readingOrder.mapIndexed { index, link ->
316
321
PageResource .EpubReflowable (
317
322
link = link,
318
323
url = viewModel.urlTo(link),
@@ -329,7 +334,7 @@ class EpubNavigatorFragment internal constructor(
329
334
var doublePageLeft: Link ? = null
330
335
var doublePageRight: Link ? = null
331
336
332
- for ((index, link) in publication. readingOrder.withIndex()) {
337
+ for ((index, link) in readingOrder.withIndex()) {
333
338
val url = viewModel.urlTo(link)
334
339
resourcesSingle.add(PageResource .EpubFxl (leftLink = link, leftUrl = url))
335
340
@@ -881,7 +886,7 @@ class EpubNavigatorFragment internal constructor(
881
886
locatorToResourceAtIndex(resourcePager.currentItem + 1 )
882
887
883
888
private fun locatorToResourceAtIndex (index : Int ): Locator ? =
884
- publication. readingOrder.getOrNull(index)
889
+ readingOrder.getOrNull(index)
885
890
?.let { publication.locatorFromLink(it) }
886
891
887
892
private val r2PagerAdapter: R2PagerAdapter ?
@@ -919,7 +924,7 @@ class EpubNavigatorFragment internal constructor(
919
924
override val currentLocator: StateFlow <Locator > get() = _currentLocator
920
925
private val _currentLocator = MutableStateFlow (
921
926
initialLocator
922
- ? : requireNotNull(publication.locatorFromLink(publication .readingOrder.first()))
927
+ ? : requireNotNull(publication.locatorFromLink(this .readingOrder.first()))
923
928
)
924
929
925
930
/* *
@@ -930,7 +935,7 @@ class EpubNavigatorFragment internal constructor(
930
935
override suspend fun firstVisibleElementLocator (): Locator ? {
931
936
if (! ::resourcePager.isInitialized) return null
932
937
933
- val resource = publication. readingOrder[resourcePager.currentItem]
938
+ val resource = readingOrder[resourcePager.currentItem]
934
939
return currentReflowablePageFragment?.webView?.findFirstVisibleLocator()
935
940
?.copy(
936
941
href = resource.href,
@@ -1035,21 +1040,23 @@ class EpubNavigatorFragment internal constructor(
1035
1040
* if you use a local HTTP server.
1036
1041
* @param initialLocator The first location which should be visible when rendering the
1037
1042
* publication. Can be used to restore the last reading location.
1043
+ * @param readingOrder custom reading order
1038
1044
* @param listener Optional listener to implement to observe events, such as user taps.
1039
1045
* @param config Additional configuration.
1040
1046
*/
1041
1047
fun createFactory (
1042
1048
publication : Publication ,
1043
1049
baseUrl : String? = null,
1044
1050
initialLocator : Locator ? = null,
1051
+ readingOrder : List <Link >? = null,
1045
1052
listener : Listener ? = null,
1046
1053
paginationListener : PaginationListener ? = null,
1047
1054
config : Configuration = Configuration (),
1048
1055
initialPreferences : EpubPreferences = EpubPreferences ()
1049
1056
): FragmentFactory =
1050
1057
createFragmentFactory {
1051
1058
EpubNavigatorFragment (
1052
- publication, baseUrl, initialLocator, initialPreferences,
1059
+ publication, baseUrl, initialLocator, readingOrder, initialPreferences,
1053
1060
listener, paginationListener,
1054
1061
epubLayout = publication.metadata.presentation.layout ? : EpubLayout .REFLOWABLE ,
1055
1062
defaults = EpubDefaults (),
0 commit comments