Revert "Use flows instead of relays for extensions loading"

This reverts commit 07e76f35fa.
This commit is contained in:
arkon
2021-01-07 18:34:38 -05:00
parent 9db81a5a49
commit c620c924f9
3 changed files with 57 additions and 45 deletions

View File

@@ -8,17 +8,13 @@ import eu.kanade.tachiyomi.extension.ExtensionManager
import eu.kanade.tachiyomi.extension.model.Extension
import eu.kanade.tachiyomi.extension.model.InstallStep
import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.system.LocaleHelper
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.withContext
import rx.Observable
import rx.Subscription
import rx.android.schedulers.AndroidSchedulers
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.util.concurrent.TimeUnit
private typealias ExtensionTuple =
Triple<List<Extension.Installed>, List<Extension.Untrusted>, List<Extension.Available>>
@@ -39,23 +35,20 @@ open class ExtensionPresenter(
super.onCreate(savedState)
extensionManager.findAvailableExtensions()
bindToExtensionsObservable()
}
launchIO {
val installedFlow = extensionManager.installedExtensionsFlow
val untrustedFlow = extensionManager.untrustedExtensionsFlow
val availableFlow = extensionManager.availableExtensionsFlow
private fun bindToExtensionsObservable(): Subscription {
val installedObservable = extensionManager.getInstalledExtensionsObservable()
val untrustedObservable = extensionManager.getUntrustedExtensionsObservable()
val availableObservable = extensionManager.getAvailableExtensionsObservable()
.startWith(emptyList<Extension.Available>())
combine(
installedFlow,
untrustedFlow,
availableFlow
) { installed, untrusted, available ->
Triple(installed, untrusted, available)
}
.debounce(100)
.map(::toItems)
.collectLatest { withContext(Dispatchers.Main) { view?.setExtensions(extensions) } }
}
return Observable.combineLatest(installedObservable, untrustedObservable, availableObservable) { installed, untrusted, available -> Triple(installed, untrusted, available) }
.debounce(100, TimeUnit.MILLISECONDS)
.map(::toItems)
.observeOn(AndroidSchedulers.mainThread())
.subscribeLatestCache({ view, _ -> view.setExtensions(extensions) })
}
@Synchronized

View File

@@ -3,13 +3,7 @@ package eu.kanade.tachiyomi.ui.browse.extension.details
import android.os.Bundle
import eu.kanade.tachiyomi.extension.ExtensionManager
import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
import eu.kanade.tachiyomi.util.lang.launchIO
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.take
import kotlinx.coroutines.withContext
import rx.android.schedulers.AndroidSchedulers
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
@@ -23,14 +17,19 @@ class ExtensionDetailsPresenter(
override fun onCreate(savedState: Bundle?) {
super.onCreate(savedState)
// Watch for uninstalled event
launchIO {
extensionManager.installedExtensionsFlow
.drop(1)
.filter { extensions -> extensions.none { it.pkgName == pkgName } }
.take(1)
.collect { withContext(Dispatchers.Main) { view?.onExtensionUninstalled() } }
}
bindToUninstalledExtension()
}
private fun bindToUninstalledExtension() {
extensionManager.getInstalledExtensionsObservable()
.skip(1)
.filter { extensions -> extensions.none { it.pkgName == pkgName } }
.map { }
.take(1)
.observeOn(AndroidSchedulers.mainThread())
.subscribeFirst({ view, _ ->
view.onExtensionUninstalled()
})
}
fun uninstallExtension() {