From 03f32ebffd256e104c8692884783bc8832896aea Mon Sep 17 00:00:00 2001 From: Cologler <10906962+Cologler@users.noreply.github.com> Date: Mon, 15 Apr 2024 09:24:38 +0800 Subject: [PATCH] fix: check order before restore from backup (#1156) --- .../restore/restorers/CategoriesRestorer.kt | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/CategoriesRestorer.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/CategoriesRestorer.kt index f98af1045..36539b211 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/CategoriesRestorer.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/CategoriesRestorer.kt @@ -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)