|
|
|
@ -7,10 +7,18 @@ import eu.kanade.tachiyomi.source.LocalSource
|
|
|
|
|
import eu.kanade.tachiyomi.source.SourceManager
|
|
|
|
|
import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
|
|
|
|
|
import java.util.TreeMap
|
|
|
|
|
import java.util.concurrent.TimeUnit
|
|
|
|
|
import kotlinx.coroutines.CoroutineScope
|
|
|
|
|
import kotlinx.coroutines.Dispatchers
|
|
|
|
|
import kotlinx.coroutines.Job
|
|
|
|
|
import kotlinx.coroutines.delay
|
|
|
|
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
|
|
|
|
import kotlinx.coroutines.flow.drop
|
|
|
|
|
import kotlinx.coroutines.flow.launchIn
|
|
|
|
|
import kotlinx.coroutines.flow.map
|
|
|
|
|
import kotlinx.coroutines.flow.onEach
|
|
|
|
|
import kotlinx.coroutines.flow.onStart
|
|
|
|
|
import rx.Observable
|
|
|
|
|
import rx.Subscription
|
|
|
|
|
import rx.android.schedulers.AndroidSchedulers
|
|
|
|
|
import uy.kohesive.injekt.Injekt
|
|
|
|
|
import uy.kohesive.injekt.api.get
|
|
|
|
|
|
|
|
|
@ -26,6 +34,8 @@ class SourcePresenter(
|
|
|
|
|
private val preferences: PreferencesHelper = Injekt.get()
|
|
|
|
|
) : BasePresenter<SourceController>() {
|
|
|
|
|
|
|
|
|
|
private val scope = CoroutineScope(Job() + Dispatchers.Main)
|
|
|
|
|
|
|
|
|
|
var sources = getEnabledSources()
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -79,16 +89,21 @@ class SourcePresenter(
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun loadLastUsedSource() {
|
|
|
|
|
val sharedObs = preferences.lastUsedCatalogueSource().asObservable().share()
|
|
|
|
|
// Immediate initial load
|
|
|
|
|
preferences.lastUsedCatalogueSource().get().let { updateLastUsedSource(it) }
|
|
|
|
|
|
|
|
|
|
// Emit the first item immediately but delay subsequent emissions by 500ms.
|
|
|
|
|
Observable.merge(
|
|
|
|
|
sharedObs.take(1),
|
|
|
|
|
sharedObs.skip(1).delay(500, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
|
|
|
|
|
)
|
|
|
|
|
// Subsequent updates
|
|
|
|
|
preferences.lastUsedCatalogueSource().asFlow()
|
|
|
|
|
.drop(1)
|
|
|
|
|
.onStart { delay(500) }
|
|
|
|
|
.distinctUntilChanged()
|
|
|
|
|
.map { item -> (sourceManager.get(item) as? CatalogueSource)?.let { SourceItem(it) } }
|
|
|
|
|
.subscribeLatestCache(SourceController::setLastUsedSource)
|
|
|
|
|
.onEach { updateLastUsedSource(it) }
|
|
|
|
|
.launchIn(scope)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun updateLastUsedSource(sourceId: Long) {
|
|
|
|
|
val source = (sourceManager.get(sourceId) as? CatalogueSource)?.let { SourceItem(it) }
|
|
|
|
|
source?.let { view?.setLastUsedSource(it) }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fun updateSources() {
|
|
|
|
|