Use flows instead of relays for extensions loading

This commit is contained in:
arkon
2021-01-04 11:09:31 -05:00
parent a4cab9876a
commit 07e76f35fa
3 changed files with 45 additions and 57 deletions

View File

@@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.extension
import android.content.Context
import android.graphics.drawable.Drawable
import com.jakewharton.rxrelay.BehaviorRelay
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.plusAssign
import eu.kanade.tachiyomi.extension.api.ExtensionGithubApi
@@ -14,9 +13,11 @@ import eu.kanade.tachiyomi.extension.util.ExtensionInstaller
import eu.kanade.tachiyomi.extension.util.ExtensionLoader
import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.lang.launchNow
import eu.kanade.tachiyomi.util.system.toast
import kotlinx.coroutines.async
import kotlinx.coroutines.flow.MutableStateFlow
import rx.Observable
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
@@ -49,7 +50,7 @@ class ExtensionManager(
/**
* Relay used to notify the installed extensions.
*/
private val installedExtensionsRelay = BehaviorRelay.create<List<Extension.Installed>>()
val installedExtensionsFlow = MutableStateFlow<List<Extension.Installed>>(emptyList())
private val iconMap = mutableMapOf<String, Drawable>()
@@ -59,7 +60,7 @@ class ExtensionManager(
var installedExtensions = emptyList<Extension.Installed>()
private set(value) {
field = value
installedExtensionsRelay.call(value)
launchIO { installedExtensionsFlow.emit(value) }
}
fun getAppIconForSource(source: Source): Drawable? {
@@ -73,7 +74,7 @@ class ExtensionManager(
/**
* Relay used to notify the available extensions.
*/
private val availableExtensionsRelay = BehaviorRelay.create<List<Extension.Available>>()
val availableExtensionsFlow = MutableStateFlow<List<Extension.Available>>(emptyList())
/**
* List of the currently available extensions.
@@ -81,14 +82,14 @@ class ExtensionManager(
var availableExtensions = emptyList<Extension.Available>()
private set(value) {
field = value
availableExtensionsRelay.call(value)
launchIO { availableExtensionsFlow.emit(value) }
updatedInstalledExtensionsStatuses(value)
}
/**
* Relay used to notify the untrusted extensions.
*/
private val untrustedExtensionsRelay = BehaviorRelay.create<List<Extension.Untrusted>>()
val untrustedExtensionsFlow = MutableStateFlow<List<Extension.Untrusted>>(emptyList())
/**
* List of the currently untrusted extensions.
@@ -96,7 +97,7 @@ class ExtensionManager(
var untrustedExtensions = emptyList<Extension.Untrusted>()
private set(value) {
field = value
untrustedExtensionsRelay.call(value)
launchIO { untrustedExtensionsFlow.emit(value) }
}
/**
@@ -131,27 +132,6 @@ class ExtensionManager(
.map { it.extension }
}
/**
* Returns the relay of the installed extensions as an observable.
*/
fun getInstalledExtensionsObservable(): Observable<List<Extension.Installed>> {
return installedExtensionsRelay.asObservable()
}
/**
* Returns the relay of the available extensions as an observable.
*/
fun getAvailableExtensionsObservable(): Observable<List<Extension.Available>> {
return availableExtensionsRelay.asObservable()
}
/**
* Returns the relay of the untrusted extensions as an observable.
*/
fun getUntrustedExtensionsObservable(): Observable<List<Extension.Untrusted>> {
return untrustedExtensionsRelay.asObservable()
}
/**
* Finds the available extensions in the [api] and updates [availableExtensions].
*/