Fix null pointer exception on Extension Detail screen (#7666)

(cherry picked from commit 6c7b3d78118c9c01aa51fc3c663c5a12c8f986dd)
This commit is contained in:
Andreas 2022-07-31 23:17:36 +02:00 committed by Jobobby04
parent 559073d958
commit 970e3e3880

View File

@ -14,10 +14,7 @@ import eu.kanade.tachiyomi.util.lang.launchUI
import eu.kanade.tachiyomi.util.system.LocaleHelper import eu.kanade.tachiyomi.util.system.LocaleHelper
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.take
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
@ -36,13 +33,18 @@ class ExtensionDetailsPresenter(
presenterScope.launchIO { presenterScope.launchIO {
extensionManager.getInstalledExtensionsFlow() extensionManager.getInstalledExtensionsFlow()
.map { it.firstOrNull { it.pkgName == pkgName } } .map { it.firstOrNull { it.pkgName == pkgName } }
.collectLatest { .collectLatest { extension ->
state.extension = it // If extension is null it's most likely uninstalled
if (extension == null) {
launchUI {
view?.onExtensionUninstalled()
}
return@collectLatest
}
state.extension = extension
fetchExtensionSources() fetchExtensionSources()
} }
} }
bindToUninstalledExtension()
} }
private fun CoroutineScope.fetchExtensionSources() { private fun CoroutineScope.fetchExtensionSources() {
@ -63,21 +65,6 @@ class ExtensionDetailsPresenter(
} }
} }
private fun bindToUninstalledExtension() {
presenterScope.launchIO {
extensionManager.getInstalledExtensionsFlow()
.drop(1)
.filter { extensions -> extensions.none { it.pkgName == pkgName } }
.map { }
.take(1)
.collectLatest {
launchUI {
view?.onExtensionUninstalled()
}
}
}
}
fun uninstallExtension() { fun uninstallExtension() {
val extension = extension ?: return val extension = extension ?: return
extensionManager.uninstallExtension(extension.pkgName) extensionManager.uninstallExtension(extension.pkgName)