Page preview jump to page in Reader
This commit is contained in:
@@ -124,6 +124,7 @@ fun MangaScreen(
|
||||
onMergedSettingsClicked: () -> Unit,
|
||||
onMergeClicked: () -> Unit,
|
||||
onMergeWithAnotherClicked: () -> Unit,
|
||||
onOpenPagePreview: (Int) -> Unit,
|
||||
onMorePreviewsClicked: () -> Unit,
|
||||
// SY <--
|
||||
|
||||
@@ -165,6 +166,7 @@ fun MangaScreen(
|
||||
onMergedSettingsClicked = onMergedSettingsClicked,
|
||||
onMergeClicked = onMergeClicked,
|
||||
onMergeWithAnotherClicked = onMergeWithAnotherClicked,
|
||||
onOpenPagePreview = onOpenPagePreview,
|
||||
onMorePreviewsClicked = onMorePreviewsClicked,
|
||||
// SY <--
|
||||
onMultiBookmarkClicked = onMultiBookmarkClicked,
|
||||
@@ -202,6 +204,7 @@ fun MangaScreen(
|
||||
onMergedSettingsClicked = onMergedSettingsClicked,
|
||||
onMergeClicked = onMergeClicked,
|
||||
onMergeWithAnotherClicked = onMergeWithAnotherClicked,
|
||||
onOpenPagePreview = onOpenPagePreview,
|
||||
onMorePreviewsClicked = onMorePreviewsClicked,
|
||||
// SY <--
|
||||
onMultiBookmarkClicked = onMultiBookmarkClicked,
|
||||
@@ -246,6 +249,7 @@ private fun MangaScreenSmallImpl(
|
||||
onMergedSettingsClicked: () -> Unit,
|
||||
onMergeClicked: () -> Unit,
|
||||
onMergeWithAnotherClicked: () -> Unit,
|
||||
onOpenPagePreview: (Int) -> Unit,
|
||||
onMorePreviewsClicked: () -> Unit,
|
||||
// SY <--
|
||||
|
||||
@@ -460,7 +464,11 @@ private fun MangaScreenSmallImpl(
|
||||
key = MangaScreenItem.CHAPTER_PREVIEW,
|
||||
contentType = MangaScreenItem.CHAPTER_PREVIEW,
|
||||
) {
|
||||
PagePreviews(state.pagePreviewsState, onMorePreviewsClicked)
|
||||
PagePreviews(
|
||||
pagePreviewState = state.pagePreviewsState,
|
||||
onOpenPage = onOpenPagePreview,
|
||||
onMorePreviewsClicked = onMorePreviewsClicked,
|
||||
)
|
||||
}
|
||||
}
|
||||
// SY <--
|
||||
@@ -519,6 +527,7 @@ fun MangaScreenLargeImpl(
|
||||
onMergedSettingsClicked: () -> Unit,
|
||||
onMergeClicked: () -> Unit,
|
||||
onMergeWithAnotherClicked: () -> Unit,
|
||||
onOpenPagePreview: (Int) -> Unit,
|
||||
onMorePreviewsClicked: () -> Unit,
|
||||
// SY <--
|
||||
|
||||
@@ -695,7 +704,11 @@ fun MangaScreenLargeImpl(
|
||||
)
|
||||
}
|
||||
if (state.pagePreviewsState !is PagePreviewState.Unused) {
|
||||
PagePreviews(state.pagePreviewsState, onMorePreviewsClicked)
|
||||
PagePreviews(
|
||||
pagePreviewState = state.pagePreviewsState,
|
||||
onOpenPage = onOpenPagePreview,
|
||||
onMorePreviewsClicked = onMorePreviewsClicked,
|
||||
)
|
||||
}
|
||||
// SY <--
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package eu.kanade.presentation.manga.components
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.BoxWithConstraints
|
||||
@@ -29,7 +30,11 @@ import eu.kanade.tachiyomi.ui.manga.PagePreviewState
|
||||
import exh.util.floor
|
||||
|
||||
@Composable
|
||||
fun PagePreviews(pagePreviewState: PagePreviewState, onMorePreviewsClicked: () -> Unit) {
|
||||
fun PagePreviews(
|
||||
pagePreviewState: PagePreviewState,
|
||||
onOpenPage: (Int) -> Unit,
|
||||
onMorePreviewsClicked: () -> Unit,
|
||||
) {
|
||||
when (pagePreviewState) {
|
||||
PagePreviewState.Loading -> {
|
||||
Box(modifier = Modifier.height(60.dp).fillMaxWidth(), contentAlignment = Alignment.Center) {
|
||||
@@ -52,6 +57,7 @@ fun PagePreviews(pagePreviewState: PagePreviewState, onMorePreviewsClicked: () -
|
||||
PagePreview(
|
||||
modifier = Modifier.weight(1F),
|
||||
page = page,
|
||||
onOpenPage = onOpenPage,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -70,9 +76,11 @@ fun PagePreviews(pagePreviewState: PagePreviewState, onMorePreviewsClicked: () -
|
||||
fun PagePreview(
|
||||
modifier: Modifier,
|
||||
page: PagePreview,
|
||||
onOpenPage: (Int) -> Unit,
|
||||
) {
|
||||
Column(
|
||||
modifier
|
||||
.clickable { onOpenPage(page.index - 1) }
|
||||
.padding(horizontal = 8.dp, vertical = 4.dp),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
verticalArrangement = Arrangement.SpaceBetween,
|
||||
|
||||
@@ -192,6 +192,7 @@ class MangaController : FullComposeController<MangaPresenter> {
|
||||
onMergedSettingsClicked = this::openMergedSettingsDialog,
|
||||
onMergeClicked = this::openSmartSearch,
|
||||
onMergeWithAnotherClicked = this::mergeWithAnother,
|
||||
onOpenPagePreview = this::openPagePreview,
|
||||
onMorePreviewsClicked = this::openMorePagePreviews,
|
||||
// SY <--
|
||||
onMultiBookmarkClicked = presenter::bookmarkChapters,
|
||||
@@ -369,6 +370,13 @@ class MangaController : FullComposeController<MangaPresenter> {
|
||||
val manga = presenter.manga ?: return
|
||||
router.pushController(PagePreviewController(manga.id))
|
||||
}
|
||||
|
||||
private fun openPagePreview(page: Int) {
|
||||
val chapter = presenter.getNextUnreadChapter() ?: return
|
||||
activity?.run {
|
||||
startActivity(ReaderActivity.newIntent(this, chapter.mangaId, chapter.id, page))
|
||||
}
|
||||
}
|
||||
// SY <--
|
||||
|
||||
// EXH -->
|
||||
|
||||
@@ -127,10 +127,13 @@ class ReaderActivity : BaseRxActivity<ReaderPresenter>() {
|
||||
|
||||
companion object {
|
||||
|
||||
fun newIntent(context: Context, mangaId: Long?, chapterId: Long?): Intent {
|
||||
fun newIntent(context: Context, mangaId: Long?, chapterId: Long?/* SY --> */, page: Int? = null/* SY <-- */): Intent {
|
||||
return Intent(context, ReaderActivity::class.java).apply {
|
||||
putExtra("manga", mangaId)
|
||||
putExtra("chapter", chapterId)
|
||||
// SY -->
|
||||
putExtra("page", page)
|
||||
// SY <--
|
||||
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
||||
}
|
||||
}
|
||||
@@ -224,12 +227,15 @@ class ReaderActivity : BaseRxActivity<ReaderPresenter>() {
|
||||
if (presenter.needsInit()) {
|
||||
val manga = intent.extras!!.getLong("manga", -1)
|
||||
val chapter = intent.extras!!.getLong("chapter", -1)
|
||||
// SY -->
|
||||
val page = intent.extras!!.getInt("page", -1).takeUnless { it == -1 }
|
||||
// SY <--
|
||||
if (manga == -1L || chapter == -1L) {
|
||||
finish()
|
||||
return
|
||||
}
|
||||
NotificationReceiver.dismissNotification(this, manga.hashCode(), Notifications.ID_NEW_CHAPTERS)
|
||||
presenter.init(manga, chapter)
|
||||
presenter.init(manga, chapter /* SY --> */, page/* SY <-- */)
|
||||
}
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
|
||||
@@ -307,7 +307,7 @@ class ReaderPresenter(
|
||||
* Initializes this presenter with the given [mangaId] and [initialChapterId]. This method will
|
||||
* fetch the manga from the database and initialize the initial chapter.
|
||||
*/
|
||||
fun init(mangaId: Long, initialChapterId: Long) {
|
||||
fun init(mangaId: Long, initialChapterId: Long /* SY --> */, page: Int?/* SY <-- */) {
|
||||
if (!needsInit()) return
|
||||
|
||||
presenterScope.launchIO {
|
||||
@@ -321,7 +321,7 @@ class ReaderPresenter(
|
||||
null
|
||||
}
|
||||
withUIContext {
|
||||
init(manga.toDbManga(), initialChapterId, metadata)
|
||||
init(manga.toDbManga(), initialChapterId, metadata, page)
|
||||
}
|
||||
// SY <--
|
||||
} catch (e: Throwable) {
|
||||
@@ -334,7 +334,7 @@ class ReaderPresenter(
|
||||
* Initializes this presenter with the given [manga] and [initialChapterId]. This method will
|
||||
* set the chapter loader, view subscriptions and trigger an initial load.
|
||||
*/
|
||||
private fun init(manga: Manga, initialChapterId: Long /* SY --> */, metadata: RaisedSearchMetadata?/* SY <-- */) {
|
||||
private fun init(manga: Manga, initialChapterId: Long /* SY --> */, metadata: RaisedSearchMetadata?, page: Int?/* SY <-- */) {
|
||||
if (!needsInit()) return
|
||||
|
||||
this.manga = manga
|
||||
@@ -359,7 +359,7 @@ class ReaderPresenter(
|
||||
activeChapterSubscription?.unsubscribe()
|
||||
activeChapterSubscription = Observable
|
||||
.fromCallable { chapterList.first { chapterId == it.chapter.id } }
|
||||
.flatMap { getLoadObservable(loader!!, it) }
|
||||
.flatMap { getLoadObservable(loader!!, it /* SY --> */, page/* SY <-- */) }
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribeFirst(
|
||||
@@ -402,8 +402,11 @@ class ReaderPresenter(
|
||||
private fun getLoadObservable(
|
||||
loader: ChapterLoader,
|
||||
chapter: ReaderChapter,
|
||||
// SY -->
|
||||
page: Int? = null,
|
||||
// SY <--
|
||||
): Observable<ViewerChapters> {
|
||||
return loader.loadChapter(chapter)
|
||||
return loader.loadChapter(chapter /* SY --> */, page/* SY <-- */)
|
||||
.andThen(
|
||||
Observable.fromCallable {
|
||||
val chapterPos = chapterList.indexOf(chapter)
|
||||
@@ -535,7 +538,7 @@ class ReaderPresenter(
|
||||
selectedChapter.chapter.read = true
|
||||
// SY -->
|
||||
if (manga?.isEhBasedManga() == true) {
|
||||
launchIO {
|
||||
presenterScope.launchNonCancellable {
|
||||
chapterList
|
||||
.filter { it.chapter.source_order > selectedChapter.chapter.source_order }
|
||||
.onEach {
|
||||
@@ -733,7 +736,7 @@ class ReaderPresenter(
|
||||
fun toggleBookmark(chapterId: Long, bookmarked: Boolean) {
|
||||
val chapter = chapterList.find { it.chapter.id == chapterId }?.chapter ?: return
|
||||
chapter.bookmark = bookmarked
|
||||
launchIO {
|
||||
presenterScope.launchNonCancellable {
|
||||
updateChapter.await(
|
||||
ChapterUpdate(
|
||||
id = chapter.id!!.toLong(),
|
||||
|
||||
@@ -33,14 +33,14 @@ class ChapterLoader(
|
||||
private val sourceManager: SourceManager,
|
||||
private val mergedReferences: List<MergedMangaReference>,
|
||||
private val mergedManga: Map<Long, Manga>,
|
||||
// SY <--
|
||||
// SY <--
|
||||
) {
|
||||
|
||||
/**
|
||||
* Returns a completable that assigns the page loader and loads the its pages. It just
|
||||
* completes if the chapter is already loaded.
|
||||
*/
|
||||
fun loadChapter(chapter: ReaderChapter): Completable {
|
||||
fun loadChapter(chapter: ReaderChapter /* SY --> */, page: Int? = null/* SY <-- */): Completable {
|
||||
if (chapterIsReady(chapter)) {
|
||||
return Completable.complete()
|
||||
}
|
||||
@@ -71,9 +71,9 @@ class ChapterLoader(
|
||||
// otherwise use the requested page.
|
||||
if (!chapter.chapter.read /* --> EH */ || readerPrefs
|
||||
.preserveReadingPosition()
|
||||
.get() // <-- EH
|
||||
.get() || page != null // <-- EH
|
||||
) {
|
||||
chapter.requestedPage = chapter.chapter.last_page_read
|
||||
chapter.requestedPage = /* SY --> */ page ?: /* SY <-- */ chapter.chapter.last_page_read
|
||||
}
|
||||
}
|
||||
.toCompletable()
|
||||
|
||||
Reference in New Issue
Block a user