|
|
|
@ -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)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|