From eb7465e6f9228abf04c7911dbc045d4b9e7144c6 Mon Sep 17 00:00:00 2001 From: c2y5 <97918490+c2y5@users.noreply.github.com> Date: Sat, 1 Nov 2025 19:54:22 +0545 Subject: [PATCH] Fix extension download stuck at pending state in some cases (#2483) Also auto update extension list whenever a repository is added or removed Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com> (cherry picked from commit 87c6f34a558b009be4d316e396ec3eeb4cfbbbf8) --- .../more/settings/screen/browse/ExtensionReposScreenModel.kt | 4 ++++ .../java/eu/kanade/tachiyomi/extension/ExtensionManager.kt | 2 +- .../tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/ExtensionReposScreenModel.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/ExtensionReposScreenModel.kt index 444f704ab..3c5212473 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/ExtensionReposScreenModel.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/ExtensionReposScreenModel.kt @@ -4,6 +4,7 @@ import androidx.compose.runtime.Immutable import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import dev.icerock.moko.resources.StringResource +import eu.kanade.tachiyomi.extension.ExtensionManager import kotlinx.collections.immutable.ImmutableSet import kotlinx.collections.immutable.toImmutableSet import kotlinx.coroutines.channels.Channel @@ -27,6 +28,7 @@ class ExtensionReposScreenModel( private val deleteExtensionRepo: DeleteExtensionRepo = Injekt.get(), private val replaceExtensionRepo: ReplaceExtensionRepo = Injekt.get(), private val updateExtensionRepo: UpdateExtensionRepo = Injekt.get(), + private val extensionManager: ExtensionManager = Injekt.get(), ) : StateScreenModel(RepoScreenState.Loading) { private val _events: Channel = Channel(Int.MAX_VALUE) @@ -53,6 +55,7 @@ class ExtensionReposScreenModel( fun createRepo(baseUrl: String) { screenModelScope.launchIO { when (val result = createExtensionRepo.await(baseUrl)) { + CreateExtensionRepo.Result.Success -> extensionManager.findAvailableExtensions() CreateExtensionRepo.Result.InvalidUrl -> _events.send(RepoEvent.InvalidUrl) CreateExtensionRepo.Result.RepoAlreadyExists -> _events.send(RepoEvent.RepoAlreadyExists) is CreateExtensionRepo.Result.DuplicateFingerprint -> { @@ -93,6 +96,7 @@ class ExtensionReposScreenModel( fun deleteRepo(baseUrl: String) { screenModelScope.launchIO { deleteExtensionRepo.await(baseUrl) + extensionManager.findAvailableExtensions() } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt index 364975897..bf6012f50 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt @@ -181,7 +181,7 @@ class ExtensionManager( } catch (e: Exception) { logcat(LogPriority.ERROR, e) withUIContext { context.toast(MR.strings.extension_api_error) } - emptyList() + return } enableAdditionalSubLanguages(extensions) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt index 861c28ff6..d6e3d6439 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt @@ -169,6 +169,7 @@ class ExtensionsScreenModel( fun cancelInstallUpdateExtension(extension: Extension) { extensionManager.cancelInstallUpdateExtension(extension) + removeDownloadState(extension) } private fun addDownloadState(extension: Extension, installStep: InstallStep) {