From c852592b340a7d4615bae904430de52ae1c8e37b Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Wed, 10 Jan 2024 01:40:31 +0100 Subject: [PATCH] Prevent adding duplicated extensions to the db table (#808) * Prevent adding duplicated extensions to the db table There is a possibility that multiple extension repos have been added which contain the same extensions. In case these extensions have not been added to the db table yet, they would all get added to the db, which would create duplicated extensions * Use the extension with the latest version from all repos In case multiple repos have the same extension, use the extension with the latest version --- .../tachidesk/manga/impl/extension/ExtensionsList.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/ExtensionsList.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/ExtensionsList.kt index a8604d3f..00e21d18 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/ExtensionsList.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/ExtensionsList.kt @@ -88,6 +88,11 @@ object ExtensionsList { private fun updateExtensionDatabase(foundExtensions: List) { transaction { + val uniqueExtensions = + foundExtensions.groupBy { it.pkgName }.mapValues { + (_, extension) -> + extension.maxBy { it.versionCode } + }.values val installedExtensions = ExtensionTable.selectAll().toList() .associateBy { it[ExtensionTable.pkgName] } @@ -95,9 +100,9 @@ object ExtensionsList { val extensionsToInsert = mutableListOf() val extensionsToDelete = installedExtensions.filter { it.value[ExtensionTable.repo] != null }.mapNotNull { (pkgName, extension) -> - extension.takeUnless { foundExtensions.any { it.pkgName == pkgName } } + extension.takeUnless { uniqueExtensions.any { it.pkgName == pkgName } } } - foundExtensions.forEach { + uniqueExtensions.forEach { val extension = installedExtensions[it.pkgName] if (extension != null) { extensionsToUpdate.add(it to extension)