Use coroutines instead of rx for some MangaPresenter operations

(cherry picked from commit bf32bf28dabd6fbe4388e6d103cdac8415e74623)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt
This commit is contained in:
arkon 2020-12-31 17:45:59 -05:00 committed by Jobobby04
parent 67b919423a
commit 6d4136248c

View File

@ -32,6 +32,7 @@ import eu.kanade.tachiyomi.util.isLocal
import eu.kanade.tachiyomi.util.lang.await import eu.kanade.tachiyomi.util.lang.await
import eu.kanade.tachiyomi.util.lang.isNullOrUnsubscribed import eu.kanade.tachiyomi.util.lang.isNullOrUnsubscribed
import eu.kanade.tachiyomi.util.lang.launchIO import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.lang.launchUI
import eu.kanade.tachiyomi.util.lang.runAsObservable import eu.kanade.tachiyomi.util.lang.runAsObservable
import eu.kanade.tachiyomi.util.prepUpdateCover import eu.kanade.tachiyomi.util.prepUpdateCover
import eu.kanade.tachiyomi.util.removeCovers import eu.kanade.tachiyomi.util.removeCovers
@ -901,7 +902,7 @@ class MangaPresenter(
} }
launchIO { launchIO {
db.updateChaptersProgress(chapters).executeAsBlocking() db.updateChaptersProgress(chapters).await()
if (preferences.removeAfterMarkedAsRead() /* SY --> */ && manga.shouldDeleteChapters(db, preferences) /* SY <-- */) { if (preferences.removeAfterMarkedAsRead() /* SY --> */ && manga.shouldDeleteChapters(db, preferences) /* SY <-- */) {
deleteChapters(chapters) deleteChapters(chapters)
@ -928,14 +929,13 @@ class MangaPresenter(
* @param selectedChapters the list of chapters to bookmark. * @param selectedChapters the list of chapters to bookmark.
*/ */
fun bookmarkChapters(selectedChapters: List<ChapterItem>, bookmarked: Boolean) { fun bookmarkChapters(selectedChapters: List<ChapterItem>, bookmarked: Boolean) {
Observable.from(selectedChapters) launchIO {
.doOnNext { chapter -> selectedChapters
chapter.bookmark = bookmarked .forEach {
} it.bookmark = bookmarked
.toList() db.updateChapterProgress(it).await()
.flatMap { db.updateChaptersProgress(it).asRxObservable() } }
.subscribeOn(Schedulers.io()) }
.subscribe()
} }
/** /**
@ -943,17 +943,26 @@ class MangaPresenter(
* @param chapters the list of chapters to delete. * @param chapters the list of chapters to delete.
*/ */
fun deleteChapters(chapters: List<ChapterItem>) { fun deleteChapters(chapters: List<ChapterItem>) {
Observable.just(chapters) launchIO {
.doOnNext { deleteChaptersInternal(chapters) } try {
.doOnNext { if (onlyDownloaded() != State.IGNORE) refreshChapters() } downloadManager.deleteChapters(chapters, manga, source).forEach {
.subscribeOn(Schedulers.io()) if (it is ChapterItem) {
.observeOn(AndroidSchedulers.mainThread()) it.status = Download.State.NOT_DOWNLOADED
.subscribeFirst( it.download = null
{ view, _ -> }
view.onChaptersDeleted(chapters) }
},
MangaController::onChaptersDeletedError if (onlyDownloaded() != State.IGNORE) {
) refreshChapters()
}
launchUI {
view?.onChaptersDeleted(chapters)
}
} catch (e: Throwable) {
view?.onChaptersDeletedError(e)
}
}
} }
private fun downloadNewChapters(chapters: List<Chapter>) { private fun downloadNewChapters(chapters: List<Chapter>) {
@ -962,19 +971,6 @@ class MangaPresenter(
downloadChapters(chapters) downloadChapters(chapters)
} }
/**
* Deletes a list of chapters from disk. This method is called in a background thread.
* @param chapters the chapters to delete.
*/
private fun deleteChaptersInternal(chapters: List<ChapterItem>) {
downloadManager.deleteChapters(chapters, manga, source).forEach {
if (it is ChapterItem) {
it.status = Download.State.NOT_DOWNLOADED
it.download = null
}
}
}
/** /**
* Reverses the sorting and requests an UI update. * Reverses the sorting and requests an UI update.
*/ */