Remove use of RxJava from TrackPresenter

(cherry picked from commit 7eb0868791f78c9d371faf3de8f96103a036659d)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackPresenter.kt
This commit is contained in:
arkon 2021-01-04 14:47:23 -05:00 committed by Jobobby04
parent a6d4644713
commit e92e942fcd

View File

@ -11,13 +11,13 @@ import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
import eu.kanade.tachiyomi.util.lang.await import eu.kanade.tachiyomi.util.lang.await
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.launchUI
import eu.kanade.tachiyomi.util.lang.runAsObservable
import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.system.toast
import exh.mangaDexSourceIds import exh.mangaDexSourceIds
import rx.Observable import kotlinx.coroutines.Job
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import rx.Subscription import rx.Subscription
import rx.android.schedulers.AndroidSchedulers import rx.android.schedulers.AndroidSchedulers
import rx.schedulers.Schedulers
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
@ -35,10 +35,8 @@ class TrackPresenter(
private val loggedServices by lazy { trackManager.services.filter { it.isLogged } } private val loggedServices by lazy { trackManager.services.filter { it.isLogged } }
private var trackSubscription: Subscription? = null private var trackSubscription: Subscription? = null
private var searchJob: Job? = null
private var searchSubscription: Subscription? = null private var refreshJob: Job? = null
private var refreshSubscription: Subscription? = null
// SY --> // SY -->
var needsRefresh = false var needsRefresh = false
@ -89,33 +87,36 @@ class TrackPresenter(
// SY <-- // SY <--
fun refresh() { fun refresh() {
refreshSubscription?.let { remove(it) } refreshJob?.cancel()
refreshSubscription = Observable.from(trackList) refreshJob = launchIO {
.filter { it.track != null } try {
.flatMap { item -> trackList
runAsObservable({ item.service.refresh(item.track!!) }) .filter { it.track != null }
.flatMap { db.insertTrack(it).asRxObservable() } .map {
.map { item } async {
.onErrorReturn { item } val track = it.service.refresh(it.track!!)
db.insertTrack(track).await()
}
}
.awaitAll()
view?.onRefreshDone()
} catch (e: Throwable) {
view?.onRefreshError(e)
} }
.toList() }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeFirst(
{ view, _ -> view.onRefreshDone() },
TrackController::onRefreshError
)
} }
fun search(query: String, service: TrackService) { fun search(query: String, service: TrackService) {
searchSubscription?.let { remove(it) } searchJob?.cancel()
searchSubscription = runAsObservable({ service.search(query) }) searchJob = launchIO {
.subscribeOn(Schedulers.io()) try {
.observeOn(AndroidSchedulers.mainThread()) val results = service.search(query)
.subscribeLatestCache( launchUI { view?.onSearchResults(results) }
TrackController::onSearchResults, } catch (e: Throwable) {
TrackController::onSearchResultsError launchUI { view?.onSearchResultsError(e) }
) }
}
} }
fun registerTracking(item: Track?, service: TrackService) { fun registerTracking(item: Track?, service: TrackService) {
@ -145,12 +146,10 @@ class TrackPresenter(
db.insertTrack(track).await() db.insertTrack(track).await()
view?.onRefreshDone() view?.onRefreshDone()
} catch (e: Throwable) { } catch (e: Throwable) {
launchUI { launchUI { view?.onRefreshError(e) }
view?.onRefreshError(e)
// Restart on error to set old values // Restart on error to set old values
fetchTrackings() fetchTrackings()
}
} }
} }
} }