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
This commit is contained in:
schroda
2024-01-10 01:40:31 +01:00
committed by GitHub
parent 3a1e0c5a63
commit c852592b34

View File

@@ -88,6 +88,11 @@ object ExtensionsList {
private fun updateExtensionDatabase(foundExtensions: List<OnlineExtension>) {
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<OnlineExtension>()
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)