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:
parent
67b919423a
commit
6d4136248c
@ -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<ChapterItem>, 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<ChapterItem>) {
|
||||
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<Chapter>) {
|
||||
@ -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<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.
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user