fix: check order before restore from backup (#1156)

This commit is contained in:
Cologler 2024-04-15 09:24:38 +08:00 committed by GitHub
parent ed20d25452
commit 03f32ebffd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -17,14 +17,19 @@ class CategoriesRestorer(
if (backupCategories.isNotEmpty()) {
val dbCategories = getCategories.await()
val dbCategoriesByName = dbCategories.associateBy { it.name }
var nextOrder = dbCategories.maxOfOrNull { it.order }?.plus(1) ?: 0
val categories = backupCategories.map {
dbCategoriesByName[it.name]
?: handler.awaitOneExecutable {
categoriesQueries.insert(it.name, it.order, it.flags)
categoriesQueries.selectLastInsertedRowId()
}.let { id -> it.toCategory(id) }
}
val categories = backupCategories
.sortedBy { it.order }
.distinctBy { it.name }
.map {
val newOrder = nextOrder++
dbCategoriesByName[it.name]
?: handler.awaitOneExecutable {
categoriesQueries.insert(it.name, newOrder, it.flags)
categoriesQueries.selectLastInsertedRowId()
}.let { id -> it.toCategory(id).copy(order = newOrder) }
}
libraryPreferences.categorizedDisplaySettings().set(
(dbCategories + categories)