|
@@ -14,7 +14,6 @@ import eu.kanade.tachiyomi.extension.util.ExtensionInstallReceiver
|
|
import eu.kanade.tachiyomi.extension.util.ExtensionInstaller
|
|
import eu.kanade.tachiyomi.extension.util.ExtensionInstaller
|
|
import eu.kanade.tachiyomi.extension.util.ExtensionLoader
|
|
import eu.kanade.tachiyomi.extension.util.ExtensionLoader
|
|
import eu.kanade.tachiyomi.source.Source
|
|
import eu.kanade.tachiyomi.source.Source
|
|
-import eu.kanade.tachiyomi.source.SourceManager
|
|
|
|
import eu.kanade.tachiyomi.util.lang.launchNow
|
|
import eu.kanade.tachiyomi.util.lang.launchNow
|
|
import eu.kanade.tachiyomi.util.preference.plusAssign
|
|
import eu.kanade.tachiyomi.util.preference.plusAssign
|
|
import eu.kanade.tachiyomi.util.system.logcat
|
|
import eu.kanade.tachiyomi.util.system.logcat
|
|
@@ -88,22 +87,23 @@ class ExtensionManager(
|
|
return null
|
|
return null
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * Relay used to notify the available extensions.
|
|
|
|
- */
|
|
|
|
- private val availableExtensionsRelay = BehaviorRelay.create<List<Extension.Available>>()
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* List of the currently available extensions.
|
|
* List of the currently available extensions.
|
|
*/
|
|
*/
|
|
var availableExtensions = emptyList<Extension.Available>()
|
|
var availableExtensions = emptyList<Extension.Available>()
|
|
private set(value) {
|
|
private set(value) {
|
|
field = value
|
|
field = value
|
|
- availableExtensionsRelay.call(value)
|
|
|
|
|
|
+ availableExtensionsFlow.value = field
|
|
updatedInstalledExtensionsStatuses(value)
|
|
updatedInstalledExtensionsStatuses(value)
|
|
setupAvailableExtensionsSourcesDataMap(value)
|
|
setupAvailableExtensionsSourcesDataMap(value)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private val availableExtensionsFlow = MutableStateFlow(availableExtensions)
|
|
|
|
+
|
|
|
|
+ fun getAvailableExtensionsFlow(): StateFlow<List<Extension.Available>> {
|
|
|
|
+ return availableExtensionsFlow.asStateFlow()
|
|
|
|
+ }
|
|
|
|
+
|
|
private var availableExtensionsSourcesData: Map<Long, SourceData> = mapOf()
|
|
private var availableExtensionsSourcesData: Map<Long, SourceData> = mapOf()
|
|
|
|
|
|
private fun setupAvailableExtensionsSourcesDataMap(extensions: List<Extension.Available>) {
|
|
private fun setupAvailableExtensionsSourcesDataMap(extensions: List<Extension.Available>) {
|
|
@@ -115,30 +115,22 @@ class ExtensionManager(
|
|
|
|
|
|
fun getSourceData(id: Long) = availableExtensionsSourcesData[id]
|
|
fun getSourceData(id: Long) = availableExtensionsSourcesData[id]
|
|
|
|
|
|
- /**
|
|
|
|
- * Relay used to notify the untrusted extensions.
|
|
|
|
- */
|
|
|
|
- private val untrustedExtensionsRelay = BehaviorRelay.create<List<Extension.Untrusted>>()
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* List of the currently untrusted extensions.
|
|
* List of the currently untrusted extensions.
|
|
*/
|
|
*/
|
|
var untrustedExtensions = emptyList<Extension.Untrusted>()
|
|
var untrustedExtensions = emptyList<Extension.Untrusted>()
|
|
private set(value) {
|
|
private set(value) {
|
|
field = value
|
|
field = value
|
|
- untrustedExtensionsRelay.call(value)
|
|
|
|
|
|
+ untrustedExtensionsFlow.value = field
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * The source manager where the sources of the extensions are added.
|
|
|
|
- */
|
|
|
|
- private lateinit var sourceManager: SourceManager
|
|
|
|
|
|
+ private val untrustedExtensionsFlow = MutableStateFlow(untrustedExtensions)
|
|
|
|
|
|
- /**
|
|
|
|
- * Initializes this manager with the given source manager.
|
|
|
|
- */
|
|
|
|
- fun init(sourceManager: SourceManager) {
|
|
|
|
- this.sourceManager = sourceManager
|
|
|
|
|
|
+ fun getUntrustedExtensionsFlow(): StateFlow<List<Extension.Untrusted>> {
|
|
|
|
+ return untrustedExtensionsFlow.asStateFlow()
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ init {
|
|
initExtensions()
|
|
initExtensions()
|
|
ExtensionInstallReceiver(InstallationListener()).register(context)
|
|
ExtensionInstallReceiver(InstallationListener()).register(context)
|
|
}
|
|
}
|
|
@@ -152,36 +144,12 @@ class ExtensionManager(
|
|
installedExtensions = extensions
|
|
installedExtensions = extensions
|
|
.filterIsInstance<LoadResult.Success>()
|
|
.filterIsInstance<LoadResult.Success>()
|
|
.map { it.extension }
|
|
.map { it.extension }
|
|
- installedExtensions
|
|
|
|
- .flatMap { it.sources }
|
|
|
|
- .forEach { sourceManager.registerSource(it) }
|
|
|
|
|
|
|
|
untrustedExtensions = extensions
|
|
untrustedExtensions = extensions
|
|
.filterIsInstance<LoadResult.Untrusted>()
|
|
.filterIsInstance<LoadResult.Untrusted>()
|
|
.map { it.extension }
|
|
.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].
|
|
* Finds the available extensions in the [api] and updates [availableExtensions].
|
|
*/
|
|
*/
|
|
@@ -324,7 +292,6 @@ class ExtensionManager(
|
|
*/
|
|
*/
|
|
private fun registerNewExtension(extension: Extension.Installed) {
|
|
private fun registerNewExtension(extension: Extension.Installed) {
|
|
installedExtensions += extension
|
|
installedExtensions += extension
|
|
- extension.sources.forEach { sourceManager.registerSource(it) }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -338,11 +305,9 @@ class ExtensionManager(
|
|
val oldExtension = mutInstalledExtensions.find { it.pkgName == extension.pkgName }
|
|
val oldExtension = mutInstalledExtensions.find { it.pkgName == extension.pkgName }
|
|
if (oldExtension != null) {
|
|
if (oldExtension != null) {
|
|
mutInstalledExtensions -= oldExtension
|
|
mutInstalledExtensions -= oldExtension
|
|
- extension.sources.forEach { sourceManager.unregisterSource(it) }
|
|
|
|
}
|
|
}
|
|
mutInstalledExtensions += extension
|
|
mutInstalledExtensions += extension
|
|
installedExtensions = mutInstalledExtensions
|
|
installedExtensions = mutInstalledExtensions
|
|
- extension.sources.forEach { sourceManager.registerSource(it) }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -355,7 +320,6 @@ class ExtensionManager(
|
|
val installedExtension = installedExtensions.find { it.pkgName == pkgName }
|
|
val installedExtension = installedExtensions.find { it.pkgName == pkgName }
|
|
if (installedExtension != null) {
|
|
if (installedExtension != null) {
|
|
installedExtensions -= installedExtension
|
|
installedExtensions -= installedExtension
|
|
- installedExtension.sources.forEach { sourceManager.unregisterSource(it) }
|
|
|
|
}
|
|
}
|
|
val untrustedExtension = untrustedExtensions.find { it.pkgName == pkgName }
|
|
val untrustedExtension = untrustedExtensions.find { it.pkgName == pkgName }
|
|
if (untrustedExtension != null) {
|
|
if (untrustedExtension != null) {
|