From a876742d7412a0abe8ec1b2bc40e30263afbe815 Mon Sep 17 00:00:00 2001 From: "Tran M. Cuong" Date: Mon, 26 Aug 2024 13:27:56 +0700 Subject: [PATCH] fix: separate same-name extension's installing status from different repos (#295) --- .../tachiyomi/extension/ExtensionManager.kt | 7 ++++- .../extension/util/ExtensionInstaller.kt | 7 +++-- .../browse/extension/ExtensionsScreenModel.kt | 29 +++++++++++++++++-- 3 files changed, 37 insertions(+), 6 deletions(-) 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 4f17edf8e..0a1ec147e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt @@ -291,7 +291,12 @@ class ExtensionManager( } fun cancelInstallUpdateExtension(extension: Extension) { - installer.cancelInstall(extension.pkgName) + installer.cancelInstall( + extension.pkgName + + // KMK --> + ":${extension.signatureHash}", + // KMK <-- + ) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstaller.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstaller.kt index b71974a30..6b471ba3b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstaller.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstaller.kt @@ -69,7 +69,10 @@ internal class ExtensionInstaller(private val context: Context) { * @param extension The extension to install. */ fun downloadAndInstall(url: String, extension: Extension): Flow { - val pkgName = extension.pkgName + val pkgName = extension.pkgName + + // KMK --> + ":${extension.signatureHash}" + // KMK <-- val oldDownload = activeDownloads[pkgName] if (oldDownload != null) { @@ -236,7 +239,7 @@ internal class ExtensionInstaller(private val context: Context) { /** * Deletes the download for the given package name. * - * @param pkgName The package name of the download to delete. + * @param pkgName The package name of the download to delete together with its signature. */ private fun deleteDownload(pkgName: String) { val downloadId = activeDownloads.remove(pkgName) 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 8fce4183b..04f8f8ceb 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 @@ -48,7 +48,15 @@ class ExtensionsScreenModel( val context = Injekt.get() val extensionMapper: (Map) -> ((Extension) -> ExtensionUiModel.Item) = { map -> { - ExtensionUiModel.Item(it, map[it.pkgName] ?: InstallStep.Idle) + ExtensionUiModel.Item( + it, + map[ + it.pkgName + + // KMK --> + ":${it.signatureHash}", + // KMK <-- + ] ?: InstallStep.Idle, + ) } } val queryFilter: (String) -> ((Extension) -> Boolean) = { query -> @@ -193,11 +201,26 @@ class ExtensionsScreenModel( } private fun addDownloadState(extension: Extension, installStep: InstallStep) { - currentDownloads.update { it + Pair(extension.pkgName, installStep) } + currentDownloads.update { + it + Pair( + extension.pkgName + + // KMK --> + ":${extension.signatureHash}", + // KMK <-- + installStep, + ) + } } private fun removeDownloadState(extension: Extension) { - currentDownloads.update { it - extension.pkgName } + currentDownloads.update { + it - ( + extension.pkgName + + // KMK --> + ":${extension.signatureHash}" + // KMK <-- + ) + } } private suspend fun Flow.collectToInstallUpdate(extension: Extension) =