From 21c63579678be4cfe19ba0982d8a158fe300f278 Mon Sep 17 00:00:00 2001 From: AntsyLich <59261191+AntsyLich@users.noreply.github.com> Date: Wed, 5 Aug 2026 00:40:08 +0600 Subject: [PATCH] Replace CategoryUpdate with dedicated update queries (#3693) Assisted-by: Claude:claude-opus-5 --- .../java/eu/kanade/domain/DomainModule.kt | 2 -- .../data/category/CategoryRepositoryImpl.kt | 26 +++++++++---------- .../sqldelight/tachiyomi/data/categories.sq | 18 +++++++++---- .../category/interactor/DeleteCategory.kt | 11 ++------ .../category/interactor/RenameCategory.kt | 8 +----- .../category/interactor/ReorderCategory.kt | 10 +------ .../interactor/SetSortModeForCategory.kt | 8 +----- .../category/interactor/UpdateCategory.kt | 24 ----------------- .../domain/category/model/CategoryUpdate.kt | 8 ------ .../category/repository/CategoryRepository.kt | 7 ++--- 10 files changed, 35 insertions(+), 87 deletions(-) delete mode 100644 domain/src/main/java/tachiyomi/domain/category/interactor/UpdateCategory.kt delete mode 100644 domain/src/main/java/tachiyomi/domain/category/model/CategoryUpdate.kt diff --git a/app/src/main/java/eu/kanade/domain/DomainModule.kt b/app/src/main/java/eu/kanade/domain/DomainModule.kt index 40103d63e..729c86edd 100644 --- a/app/src/main/java/eu/kanade/domain/DomainModule.kt +++ b/app/src/main/java/eu/kanade/domain/DomainModule.kt @@ -55,7 +55,6 @@ import tachiyomi.domain.category.interactor.ResetCategoryFlags import tachiyomi.domain.category.interactor.SetDisplayMode import tachiyomi.domain.category.interactor.SetMangaCategories import tachiyomi.domain.category.interactor.SetSortModeForCategory -import tachiyomi.domain.category.interactor.UpdateCategory import tachiyomi.domain.category.repository.CategoryRepository import tachiyomi.domain.chapter.interactor.GetBookmarkedChaptersByMangaId import tachiyomi.domain.chapter.interactor.GetChapter @@ -113,7 +112,6 @@ class DomainModule : InjektModule { addFactory { CreateCategoryWithName(get(), get()) } addFactory { RenameCategory(get()) } addFactory { ReorderCategory(get()) } - addFactory { UpdateCategory(get()) } addFactory { DeleteCategory(get(), get(), get()) } addSingletonFactory { MangaRepositoryImpl(get()) } diff --git a/data/src/main/java/tachiyomi/data/category/CategoryRepositoryImpl.kt b/data/src/main/java/tachiyomi/data/category/CategoryRepositoryImpl.kt index aa4b0e9ce..a3fcddfd8 100644 --- a/data/src/main/java/tachiyomi/data/category/CategoryRepositoryImpl.kt +++ b/data/src/main/java/tachiyomi/data/category/CategoryRepositoryImpl.kt @@ -6,7 +6,6 @@ import kotlinx.coroutines.flow.Flow import tachiyomi.data.Database import tachiyomi.data.subscribeToList import tachiyomi.domain.category.model.Category -import tachiyomi.domain.category.model.CategoryUpdate import tachiyomi.domain.category.repository.CategoryRepository class CategoryRepositoryImpl( @@ -51,23 +50,24 @@ class CategoryRepositoryImpl( ) } - override suspend fun updatePartial(update: CategoryUpdate) { - database.categoriesQueries.update( - name = update.name, - order = update.order, - flags = update.flags, - categoryId = update.id, - ) + override suspend fun updateName(categoryId: Long, name: String) { + database.categoriesQueries.updateName(name = name, categoryId = categoryId) } - override suspend fun updatePartial(updates: List) { - database.transaction { - updates.forEach { updatePartial(it) } - } + override suspend fun updateFlags(categoryId: Long, flags: Long) { + database.categoriesQueries.updateFlags(flags = flags, categoryId = categoryId) } override suspend fun updateAllFlags(flags: Long?) { - database.categoriesQueries.updateAllFlags(flags) + database.categoriesQueries.updateAllFlags(flags = flags) + } + + override suspend fun updateAllOrders(orderedIds: List) { + database.transaction { + orderedIds.forEachIndexed { index, categoryId -> + database.categoriesQueries.updateOrder(order = index.toLong(), categoryId = categoryId) + } + } } override suspend fun delete(categoryId: Long) { diff --git a/data/src/main/sqldelight/tachiyomi/data/categories.sq b/data/src/main/sqldelight/tachiyomi/data/categories.sq index 29eff1265..a94f38f93 100644 --- a/data/src/main/sqldelight/tachiyomi/data/categories.sq +++ b/data/src/main/sqldelight/tachiyomi/data/categories.sq @@ -50,13 +50,21 @@ delete: DELETE FROM categories WHERE _id = :categoryId; -update: +updateName: UPDATE categories -SET name = coalesce(:name, name), - sort = coalesce(:order, sort), - flags = coalesce(:flags, flags) +SET name = :name +WHERE _id = :categoryId; + +updateOrder: +UPDATE categories +SET sort = :order +WHERE _id = :categoryId; + +updateFlags: +UPDATE categories +SET flags = :flags WHERE _id = :categoryId; updateAllFlags: UPDATE categories SET -flags = coalesce(?, flags); +flags = coalesce(:flags, flags); diff --git a/domain/src/main/java/tachiyomi/domain/category/interactor/DeleteCategory.kt b/domain/src/main/java/tachiyomi/domain/category/interactor/DeleteCategory.kt index 020f02b2f..46295d08a 100644 --- a/domain/src/main/java/tachiyomi/domain/category/interactor/DeleteCategory.kt +++ b/domain/src/main/java/tachiyomi/domain/category/interactor/DeleteCategory.kt @@ -3,7 +3,6 @@ package tachiyomi.domain.category.interactor import logcat.LogPriority import tachiyomi.core.common.util.lang.withNonCancellableContext import tachiyomi.core.common.util.system.logcat -import tachiyomi.domain.category.model.CategoryUpdate import tachiyomi.domain.category.repository.CategoryRepository import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.library.service.LibraryPreferences @@ -22,13 +21,7 @@ class DeleteCategory( return@withNonCancellableContext Result.InternalError(e) } - val categories = categoryRepository.getAll() - val updates = categories.mapIndexed { index, category -> - CategoryUpdate( - id = category.id, - order = index.toLong(), - ) - } + val orderedIds = categoryRepository.getAll().map { it.id } val defaultCategory = libraryPreferences.defaultCategory.get() if (defaultCategory == categoryId.toInt()) { @@ -50,7 +43,7 @@ class DeleteCategory( } try { - categoryRepository.updatePartial(updates) + categoryRepository.updateAllOrders(orderedIds = orderedIds) Result.Success } catch (e: Exception) { logcat(LogPriority.ERROR, e) diff --git a/domain/src/main/java/tachiyomi/domain/category/interactor/RenameCategory.kt b/domain/src/main/java/tachiyomi/domain/category/interactor/RenameCategory.kt index 59c4c193e..3a939d309 100644 --- a/domain/src/main/java/tachiyomi/domain/category/interactor/RenameCategory.kt +++ b/domain/src/main/java/tachiyomi/domain/category/interactor/RenameCategory.kt @@ -4,7 +4,6 @@ import logcat.LogPriority import tachiyomi.core.common.util.lang.withNonCancellableContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.category.model.Category -import tachiyomi.domain.category.model.CategoryUpdate import tachiyomi.domain.category.repository.CategoryRepository class RenameCategory( @@ -12,13 +11,8 @@ class RenameCategory( ) { suspend fun await(categoryId: Long, name: String) = withNonCancellableContext { - val update = CategoryUpdate( - id = categoryId, - name = name, - ) - try { - categoryRepository.updatePartial(update) + categoryRepository.updateName(categoryId = categoryId, name = name) Result.Success } catch (e: Exception) { logcat(LogPriority.ERROR, e) diff --git a/domain/src/main/java/tachiyomi/domain/category/interactor/ReorderCategory.kt b/domain/src/main/java/tachiyomi/domain/category/interactor/ReorderCategory.kt index 498366154..8c46c3cac 100644 --- a/domain/src/main/java/tachiyomi/domain/category/interactor/ReorderCategory.kt +++ b/domain/src/main/java/tachiyomi/domain/category/interactor/ReorderCategory.kt @@ -6,7 +6,6 @@ import logcat.LogPriority import tachiyomi.core.common.util.lang.withNonCancellableContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.category.model.Category -import tachiyomi.domain.category.model.CategoryUpdate import tachiyomi.domain.category.repository.CategoryRepository class ReorderCategory( @@ -28,14 +27,7 @@ class ReorderCategory( try { categories.add(newIndex, categories.removeAt(currentIndex)) - val updates = categories.mapIndexed { index, category -> - CategoryUpdate( - id = category.id, - order = index.toLong(), - ) - } - - categoryRepository.updatePartial(updates) + categoryRepository.updateAllOrders(orderedIds = categories.map { it.id }) Result.Success } catch (e: Exception) { logcat(LogPriority.ERROR, e) diff --git a/domain/src/main/java/tachiyomi/domain/category/interactor/SetSortModeForCategory.kt b/domain/src/main/java/tachiyomi/domain/category/interactor/SetSortModeForCategory.kt index 3e88f1769..34fe916a9 100644 --- a/domain/src/main/java/tachiyomi/domain/category/interactor/SetSortModeForCategory.kt +++ b/domain/src/main/java/tachiyomi/domain/category/interactor/SetSortModeForCategory.kt @@ -1,7 +1,6 @@ package tachiyomi.domain.category.interactor import tachiyomi.domain.category.model.Category -import tachiyomi.domain.category.model.CategoryUpdate import tachiyomi.domain.category.repository.CategoryRepository import tachiyomi.domain.library.model.LibrarySort import tachiyomi.domain.library.model.plus @@ -20,12 +19,7 @@ class SetSortModeForCategory( preferences.randomSortSeed.set(Random.nextInt()) } if (category != null && preferences.categorizedDisplaySettings.get()) { - categoryRepository.updatePartial( - CategoryUpdate( - id = category.id, - flags = flags, - ), - ) + categoryRepository.updateFlags(categoryId = category.id, flags = flags) } else { preferences.sortingMode.set(LibrarySort(type, direction)) categoryRepository.updateAllFlags(flags) diff --git a/domain/src/main/java/tachiyomi/domain/category/interactor/UpdateCategory.kt b/domain/src/main/java/tachiyomi/domain/category/interactor/UpdateCategory.kt deleted file mode 100644 index f3f601ceb..000000000 --- a/domain/src/main/java/tachiyomi/domain/category/interactor/UpdateCategory.kt +++ /dev/null @@ -1,24 +0,0 @@ -package tachiyomi.domain.category.interactor - -import tachiyomi.core.common.util.lang.withNonCancellableContext -import tachiyomi.domain.category.model.CategoryUpdate -import tachiyomi.domain.category.repository.CategoryRepository - -class UpdateCategory( - private val categoryRepository: CategoryRepository, -) { - - suspend fun await(payload: CategoryUpdate): Result = withNonCancellableContext { - try { - categoryRepository.updatePartial(payload) - Result.Success - } catch (e: Exception) { - Result.Error(e) - } - } - - sealed interface Result { - data object Success : Result - data class Error(val error: Exception) : Result - } -} diff --git a/domain/src/main/java/tachiyomi/domain/category/model/CategoryUpdate.kt b/domain/src/main/java/tachiyomi/domain/category/model/CategoryUpdate.kt deleted file mode 100644 index d3ee8baa9..000000000 --- a/domain/src/main/java/tachiyomi/domain/category/model/CategoryUpdate.kt +++ /dev/null @@ -1,8 +0,0 @@ -package tachiyomi.domain.category.model - -data class CategoryUpdate( - val id: Long, - val name: String? = null, - val order: Long? = null, - val flags: Long? = null, -) diff --git a/domain/src/main/java/tachiyomi/domain/category/repository/CategoryRepository.kt b/domain/src/main/java/tachiyomi/domain/category/repository/CategoryRepository.kt index e2f8871df..f2663d549 100644 --- a/domain/src/main/java/tachiyomi/domain/category/repository/CategoryRepository.kt +++ b/domain/src/main/java/tachiyomi/domain/category/repository/CategoryRepository.kt @@ -2,7 +2,6 @@ package tachiyomi.domain.category.repository import kotlinx.coroutines.flow.Flow import tachiyomi.domain.category.model.Category -import tachiyomi.domain.category.model.CategoryUpdate interface CategoryRepository { @@ -18,11 +17,13 @@ interface CategoryRepository { suspend fun insert(category: Category) - suspend fun updatePartial(update: CategoryUpdate) + suspend fun updateName(categoryId: Long, name: String) - suspend fun updatePartial(updates: List) + suspend fun updateFlags(categoryId: Long, flags: Long) suspend fun updateAllFlags(flags: Long?) + suspend fun updateAllOrders(orderedIds: List) + suspend fun delete(categoryId: Long) }