|
@@ -5,11 +5,15 @@ import android.content.Context
|
|
|
import android.net.Uri
|
|
|
import android.os.Bundle
|
|
|
import com.jakewharton.rxrelay.BehaviorRelay
|
|
|
+import eu.kanade.domain.chapter.interactor.GetChapterByMangaId
|
|
|
import eu.kanade.domain.chapter.interactor.UpdateChapter
|
|
|
import eu.kanade.domain.chapter.model.ChapterUpdate
|
|
|
+import eu.kanade.domain.chapter.model.toDbChapter
|
|
|
import eu.kanade.domain.history.interactor.UpsertHistory
|
|
|
import eu.kanade.domain.history.model.HistoryUpdate
|
|
|
+import eu.kanade.domain.manga.interactor.GetMangaById
|
|
|
import eu.kanade.domain.manga.model.isLocal
|
|
|
+import eu.kanade.domain.manga.model.toDbManga
|
|
|
import eu.kanade.domain.track.interactor.GetTracks
|
|
|
import eu.kanade.domain.track.interactor.InsertTrack
|
|
|
import eu.kanade.domain.track.model.toDbTrack
|
|
@@ -41,6 +45,7 @@ import eu.kanade.tachiyomi.util.lang.byteSize
|
|
|
import eu.kanade.tachiyomi.util.lang.launchIO
|
|
|
import eu.kanade.tachiyomi.util.lang.launchUI
|
|
|
import eu.kanade.tachiyomi.util.lang.takeBytes
|
|
|
+import eu.kanade.tachiyomi.util.lang.withUIContext
|
|
|
import eu.kanade.tachiyomi.util.storage.DiskUtil
|
|
|
import eu.kanade.tachiyomi.util.storage.cacheImageDir
|
|
|
import eu.kanade.tachiyomi.util.system.isOnline
|
|
@@ -68,6 +73,8 @@ class ReaderPresenter(
|
|
|
private val downloadManager: DownloadManager = Injekt.get(),
|
|
|
private val preferences: PreferencesHelper = Injekt.get(),
|
|
|
private val delayedTrackingStore: DelayedTrackingStore = Injekt.get(),
|
|
|
+ private val getMangaById: GetMangaById = Injekt.get(),
|
|
|
+ private val getChapterByMangaId: GetChapterByMangaId = Injekt.get(),
|
|
|
private val getTracks: GetTracks = Injekt.get(),
|
|
|
private val insertTrack: InsertTrack = Injekt.get(),
|
|
|
private val upsertHistory: UpsertHistory = Injekt.get(),
|
|
@@ -118,14 +125,14 @@ class ReaderPresenter(
|
|
|
*/
|
|
|
private val chapterList by lazy {
|
|
|
val manga = manga!!
|
|
|
- val dbChapters = db.getChapters(manga.id!!).executeAsBlocking()
|
|
|
+ val chapters = runBlocking { getChapterByMangaId.await(manga.id!!) }
|
|
|
|
|
|
- val selectedChapter = dbChapters.find { it.id == chapterId }
|
|
|
+ val selectedChapter = chapters.find { it.id == chapterId }
|
|
|
?: error("Requested chapter of id $chapterId not found in chapter list")
|
|
|
|
|
|
val chaptersForReader = when {
|
|
|
(preferences.skipRead() || preferences.skipFiltered()) -> {
|
|
|
- val filteredChapters = dbChapters.filterNot {
|
|
|
+ val filteredChapters = chapters.filterNot {
|
|
|
when {
|
|
|
preferences.skipRead() && it.read -> true
|
|
|
preferences.skipFiltered() -> {
|
|
@@ -146,10 +153,11 @@ class ReaderPresenter(
|
|
|
filteredChapters + listOf(selectedChapter)
|
|
|
}
|
|
|
}
|
|
|
- else -> dbChapters
|
|
|
+ else -> chapters
|
|
|
}
|
|
|
|
|
|
chaptersForReader
|
|
|
+ .map { it.toDbChapter() }
|
|
|
.sortedWith(getChapterSort(manga, sortDescending = false))
|
|
|
.map(::ReaderChapter)
|
|
|
}
|
|
@@ -232,16 +240,16 @@ class ReaderPresenter(
|
|
|
fun init(mangaId: Long, initialChapterId: Long) {
|
|
|
if (!needsInit()) return
|
|
|
|
|
|
- db.getManga(mangaId).asRxObservable()
|
|
|
- .first()
|
|
|
- .observeOn(AndroidSchedulers.mainThread())
|
|
|
- .doOnNext { init(it, initialChapterId) }
|
|
|
- .subscribeFirst(
|
|
|
- { _, _ ->
|
|
|
- // Ignore onNext event
|
|
|
- },
|
|
|
- ReaderActivity::setInitialChapterError,
|
|
|
- )
|
|
|
+ launchIO {
|
|
|
+ try {
|
|
|
+ val manga = getMangaById.await(mangaId)
|
|
|
+ withUIContext {
|
|
|
+ manga?.let { init(it.toDbManga(), initialChapterId) }
|
|
|
+ }
|
|
|
+ } catch (e: Throwable) {
|
|
|
+ view?.setInitialChapterError(e)
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|