diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/reader/BaseReaderFragment.kt b/app/src/main/java/org/koitharu/kotatsu/ui/reader/BaseReaderFragment.kt index b013aa424..d2da10e6d 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/reader/BaseReaderFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/reader/BaseReaderFragment.kt @@ -69,7 +69,6 @@ abstract class BaseReaderFragment(@LayoutRes contentLayoutId: Int) : BaseFragmen } fun findCurrentPageIndex(chapterId: Long): Int { - val pages = this.pages var offset = 0 for ((id, count) in chaptersMap) { if (id == chapterId) { @@ -80,6 +79,17 @@ abstract class BaseReaderFragment(@LayoutRes contentLayoutId: Int) : BaseFragmen return -1 } + fun findChapterOffset(chapterId: Long): Int { + var offset = 0 + for ((id, count) in chaptersMap) { + if (id == chapterId) { + return offset + } + offset += count + } + return -1 + } + fun getPages(chapterId: Long): List? { var offset = 0 for ((id, count) in chaptersMap) { @@ -113,13 +123,12 @@ abstract class BaseReaderFragment(@LayoutRes contentLayoutId: Int) : BaseFragmen } } - protected fun notifyPageChanged(page: Int) { var i = page val chapters = lastState?.manga?.chapters ?: return val chapter = chaptersMap.firstOrNull { x -> i -= x.second - i <= 0 + i < 0 } ?: return (activity as? ReaderListener)?.onPageChanged( chapter = chapters.find { x -> x.id == chapter.first } ?: return, diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/reader/ReaderPresenter.kt b/app/src/main/java/org/koitharu/kotatsu/ui/reader/ReaderPresenter.kt index c038ebce3..4cf5de060 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/reader/ReaderPresenter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/reader/ReaderPresenter.kt @@ -1,11 +1,9 @@ package org.koitharu.kotatsu.ui.reader import android.content.ContentResolver +import android.util.Log import android.webkit.URLUtil -import kotlinx.coroutines.CancellationException -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext +import kotlinx.coroutines.* import moxy.InjectViewState import moxy.presenterScope import okhttp3.OkHttpClient @@ -27,10 +25,12 @@ import org.koitharu.kotatsu.utils.ext.mimeType @InjectViewState class ReaderPresenter : BasePresenter() { + private var loaderJob: Job? = null private var isInitialized = false fun loadChapter(manga: Manga, chapterId: Long, action: ReaderAction) { - presenterScope.launch { + loaderJob?.cancel() + loaderJob = presenterScope.launch { viewState.onLoadingStateChanged(isLoading = true) try { withContext(Dispatchers.IO) { @@ -63,6 +63,8 @@ class ReaderPresenter : BasePresenter() { viewState.onPagesLoaded(chapterId, pages, action) } } + } catch (e: CancellationException){ + Log.w(null, "Loader job cancelled", e) } catch (e: Exception) { if (BuildConfig.DEBUG) { e.printStackTrace() diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/reader/standard/StandardReaderFragment.kt b/app/src/main/java/org/koitharu/kotatsu/ui/reader/standard/StandardReaderFragment.kt index f5076e757..25ee86857 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/reader/standard/StandardReaderFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/reader/standard/StandardReaderFragment.kt @@ -44,7 +44,7 @@ class StandardReaderFragment : BaseReaderFragment(R.layout.fragment_reader_stand it.replaceData(pages) lastState?.let { state -> if (chapterId == state.chapterId) { - pager.setCurrentItem(state.page, false) + pager.setCurrentItem(findChapterOffset(chapterId) + state.page, false) } } }