From bd73b1b0680ccb018e112814624b1cb7dd70b3fb Mon Sep 17 00:00:00 2001 From: arkon Date: Mon, 4 Jan 2021 15:08:36 -0500 Subject: [PATCH] Refactor bridged RxJava/coroutine calls in SearchPresenters (cherry picked from commit 5cfda1b1bfe739c6e635817d4d72f4fa67677394) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SearchPresenter.kt --- .../globalsearch/GlobalSearchPresenter.kt | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchPresenter.kt index 7c48ad03d..4a008ed24 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchPresenter.kt @@ -15,6 +15,7 @@ import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.toSManga import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourcePresenter +import eu.kanade.tachiyomi.util.lang.await import eu.kanade.tachiyomi.util.lang.runAsObservable import rx.Observable import rx.Subscription @@ -227,9 +228,10 @@ open class GlobalSearchPresenter( fetchImageSubscription?.unsubscribe() fetchImageSubscription = fetchImageSubject.observeOn(Schedulers.io()) .flatMap { (first, source) -> - Observable.from(first).filter { it.thumbnail_url == null && !it.initialized } + Observable.from(first) + .filter { it.thumbnail_url == null && !it.initialized } .map { Pair(it, source) } - .concatMap { getMangaDetailsObservable(it.first, it.second) } + .concatMap { runAsObservable({ getMangaDetails(it.first, it.second) }) } .map { Pair(source as CatalogueSource, it) } } .onBackpressureBuffer() @@ -246,20 +248,17 @@ open class GlobalSearchPresenter( } /** - * Returns an observable of manga that initializes the given manga. + * Initializes the given manga. * * @param manga the manga to initialize. - * @return an observable of the manga to initialize + * @return The initialized manga. */ - private fun getMangaDetailsObservable(manga: Manga, source: Source): Observable { - return runAsObservable({ - val networkManga = source.getMangaDetails(manga.toMangaInfo()) - manga.copyFrom(networkManga.toSManga()) - manga.initialized = true - db.insertManga(manga).executeAsBlocking() - manga - }) - .onErrorResumeNext { Observable.just(manga) } + private suspend fun getMangaDetails(manga: Manga, source: Source): Manga { + val networkManga = source.getMangaDetails(manga.toMangaInfo()) + manga.copyFrom(networkManga.toSManga()) + manga.initialized = true + db.insertManga(manga).await() + return manga } /**