From 6d4136248c9f08284b1de26adb0135e9cccd5646 Mon Sep 17 00:00:00 2001 From: arkon Date: Thu, 31 Dec 2020 17:45:59 -0500 Subject: [PATCH] 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 --- .../tachiyomi/ui/manga/MangaPresenter.kt | 62 +++++++++---------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt index 965cf9cfe..260bf5801 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt @@ -32,6 +32,7 @@ import eu.kanade.tachiyomi.util.isLocal import eu.kanade.tachiyomi.util.lang.await import eu.kanade.tachiyomi.util.lang.isNullOrUnsubscribed 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.prepUpdateCover import eu.kanade.tachiyomi.util.removeCovers @@ -901,7 +902,7 @@ class MangaPresenter( } launchIO { - db.updateChaptersProgress(chapters).executeAsBlocking() + db.updateChaptersProgress(chapters).await() if (preferences.removeAfterMarkedAsRead() /* SY --> */ && manga.shouldDeleteChapters(db, preferences) /* SY <-- */) { deleteChapters(chapters) @@ -928,14 +929,13 @@ class MangaPresenter( * @param selectedChapters the list of chapters to bookmark. */ fun bookmarkChapters(selectedChapters: List, bookmarked: Boolean) { - Observable.from(selectedChapters) - .doOnNext { chapter -> - chapter.bookmark = bookmarked - } - .toList() - .flatMap { db.updateChaptersProgress(it).asRxObservable() } - .subscribeOn(Schedulers.io()) - .subscribe() + launchIO { + selectedChapters + .forEach { + it.bookmark = bookmarked + db.updateChapterProgress(it).await() + } + } } /** @@ -943,17 +943,26 @@ class MangaPresenter( * @param chapters the list of chapters to delete. */ fun deleteChapters(chapters: List) { - Observable.just(chapters) - .doOnNext { deleteChaptersInternal(chapters) } - .doOnNext { if (onlyDownloaded() != State.IGNORE) refreshChapters() } - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeFirst( - { view, _ -> - view.onChaptersDeleted(chapters) - }, - MangaController::onChaptersDeletedError - ) + launchIO { + try { + downloadManager.deleteChapters(chapters, manga, source).forEach { + if (it is ChapterItem) { + it.status = Download.State.NOT_DOWNLOADED + it.download = null + } + } + + if (onlyDownloaded() != State.IGNORE) { + refreshChapters() + } + + launchUI { + view?.onChaptersDeleted(chapters) + } + } catch (e: Throwable) { + view?.onChaptersDeletedError(e) + } + } } private fun downloadNewChapters(chapters: List) { @@ -962,19 +971,6 @@ class MangaPresenter( 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) { - 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. */