diff --git a/app/build.gradle.kts b/app/build.gradle.kts index df4d94e53..fb34311dc 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -31,7 +31,7 @@ android { defaultConfig { applicationId = "eu.kanade.tachiyomi.sy" - versionCode = 71 + versionCode = 72 versionName = "1.11.0" buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"") diff --git a/app/src/main/java/eu/kanade/domain/DomainModule.kt b/app/src/main/java/eu/kanade/domain/DomainModule.kt index 5b81e03a3..b39842268 100644 --- a/app/src/main/java/eu/kanade/domain/DomainModule.kt +++ b/app/src/main/java/eu/kanade/domain/DomainModule.kt @@ -110,7 +110,7 @@ class DomainModule : InjektModule { addFactory { RenameCategory(get()) } addFactory { ReorderCategory(get()) } addFactory { UpdateCategory(get()) } - addFactory { DeleteCategory(get()) } + addFactory { DeleteCategory(get(), get(), get()) } addSingletonFactory { MangaRepositoryImpl(get()) } addFactory { GetDuplicateLibraryManga(get()) } diff --git a/app/src/main/java/mihon/core/migration/migrations/CategoryPreferencesCleanupMigration.kt b/app/src/main/java/mihon/core/migration/migrations/CategoryPreferencesCleanupMigration.kt new file mode 100644 index 000000000..dcf4a6122 --- /dev/null +++ b/app/src/main/java/mihon/core/migration/migrations/CategoryPreferencesCleanupMigration.kt @@ -0,0 +1,40 @@ +package mihon.core.migration.migrations + +import mihon.core.migration.Migration +import mihon.core.migration.MigrationContext +import tachiyomi.core.common.util.lang.withIOContext +import tachiyomi.domain.category.interactor.GetCategories +import tachiyomi.domain.download.service.DownloadPreferences +import tachiyomi.domain.library.service.LibraryPreferences + +class CategoryPreferencesCleanupMigration : Migration { + override val version: Float = 72f + + override suspend fun invoke(migrationContext: MigrationContext): Boolean = withIOContext { + val libraryPreferences = migrationContext.get() ?: return@withIOContext false + val downloadPreferences = migrationContext.get() ?: return@withIOContext false + + val getCategories = migrationContext.get() ?: return@withIOContext false + val allCategories = getCategories.await().map { it.id.toString() }.toSet() + + val defaultCategory = libraryPreferences.defaultCategory().get() + if (defaultCategory.toString() !in allCategories) { + libraryPreferences.defaultCategory().delete() + } + + val categoryPreferences = listOf( + libraryPreferences.updateCategories(), + libraryPreferences.updateCategoriesExclude(), + downloadPreferences.removeExcludeCategories(), + downloadPreferences.downloadNewChapterCategories(), + downloadPreferences.downloadNewChapterCategoriesExclude(), + ) + categoryPreferences.forEach { preference -> + val ids = preference.get() + val garbageIds = ids.minus(allCategories) + if (garbageIds.isEmpty()) return@forEach + preference.set(ids.minus(garbageIds)) + } + return@withIOContext true + } +} diff --git a/app/src/main/java/mihon/core/migration/migrations/Migrations.kt b/app/src/main/java/mihon/core/migration/migrations/Migrations.kt index 514825365..c6ef48cf5 100644 --- a/app/src/main/java/mihon/core/migration/migrations/Migrations.kt +++ b/app/src/main/java/mihon/core/migration/migrations/Migrations.kt @@ -45,4 +45,5 @@ val migrations: List MoveCacheToDiskSettingMigration(), MoveEncryptionSettingsToAppStateMigration(), TrustExtensionRepositoryMigration(), + CategoryPreferencesCleanupMigration(), ) 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 bf26d959f..279b1c9af 100644 --- a/domain/src/main/java/tachiyomi/domain/category/interactor/DeleteCategory.kt +++ b/domain/src/main/java/tachiyomi/domain/category/interactor/DeleteCategory.kt @@ -5,9 +5,13 @@ 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 class DeleteCategory( private val categoryRepository: CategoryRepository, + private val libraryPreferences: LibraryPreferences, + private val downloadPreferences: DownloadPreferences, ) { suspend fun await(categoryId: Long) = withNonCancellableContext { @@ -26,6 +30,25 @@ class DeleteCategory( ) } + val defaultCategory = libraryPreferences.defaultCategory().get() + if (defaultCategory == categoryId.toInt()) { + libraryPreferences.defaultCategory().delete() + } + + val categoryPreferences = listOf( + libraryPreferences.updateCategories(), + libraryPreferences.updateCategoriesExclude(), + downloadPreferences.removeExcludeCategories(), + downloadPreferences.downloadNewChapterCategories(), + downloadPreferences.downloadNewChapterCategoriesExclude(), + ) + val categoryIdString = categoryId.toString() + categoryPreferences.forEach { preference -> + val ids = preference.get() + if (categoryIdString !in ids) return@forEach + preference.set(ids.minus(categoryIdString)) + } + try { categoryRepository.updatePartial(updates) Result.Success