From 996764721773b822660411fd5210e0d77ec8db33 Mon Sep 17 00:00:00 2001 From: Ahmad Ansori Palembani Date: Fri, 7 Jun 2024 13:36:13 +0700 Subject: [PATCH] refactor: Properly relink custom manga info --- .../java/dev/yokai/core/di/DomainModule.kt | 2 ++ .../custom/CustomMangaRepositoryImpl.kt | 3 ++ .../library/custom/CustomMangaRepository.kt | 1 + .../custom/interactor/RelinkCustomManga.kt | 9 ++++++ .../data/library/CustomMangaManager.kt | 29 ++++++++++++++----- .../manga/process/MigrationProcessAdapter.kt | 2 +- .../tachiyomi/data/custom_manga_info.sq | 5 ++++ 7 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/dev/yokai/domain/library/custom/interactor/RelinkCustomManga.kt diff --git a/app/src/main/java/dev/yokai/core/di/DomainModule.kt b/app/src/main/java/dev/yokai/core/di/DomainModule.kt index 94c185172a..1e33b14d91 100644 --- a/app/src/main/java/dev/yokai/core/di/DomainModule.kt +++ b/app/src/main/java/dev/yokai/core/di/DomainModule.kt @@ -15,6 +15,7 @@ import dev.yokai.domain.library.custom.CustomMangaRepository import dev.yokai.domain.library.custom.interactor.CreateCustomManga import dev.yokai.domain.library.custom.interactor.DeleteCustomManga import dev.yokai.domain.library.custom.interactor.GetCustomManga +import dev.yokai.domain.library.custom.interactor.RelinkCustomManga import dev.yokai.domain.manga.MangaRepository import dev.yokai.domain.manga.interactor.GetLibraryManga import uy.kohesive.injekt.api.InjektModule @@ -39,6 +40,7 @@ class DomainModule : InjektModule { addFactory { CreateCustomManga(get()) } addFactory { DeleteCustomManga(get()) } addFactory { GetCustomManga(get()) } + addFactory { RelinkCustomManga(get()) } addSingletonFactory { MangaRepositoryImpl(get()) } addFactory { GetLibraryManga(get()) } diff --git a/app/src/main/java/dev/yokai/data/library/custom/CustomMangaRepositoryImpl.kt b/app/src/main/java/dev/yokai/data/library/custom/CustomMangaRepositoryImpl.kt index eedb649ff6..184c81c26e 100644 --- a/app/src/main/java/dev/yokai/data/library/custom/CustomMangaRepositoryImpl.kt +++ b/app/src/main/java/dev/yokai/data/library/custom/CustomMangaRepositoryImpl.kt @@ -63,6 +63,9 @@ class CustomMangaRepositoryImpl(private val handler: DatabaseHandler) : CustomMa } } + override suspend fun relinkCustomManga(oldId: Long, newId: Long) = + handler.await { custom_manga_infoQueries.relink(newId, oldId) } + private fun mapCustomMangaInfo( mangaId: Long, title: String?, diff --git a/app/src/main/java/dev/yokai/domain/library/custom/CustomMangaRepository.kt b/app/src/main/java/dev/yokai/domain/library/custom/CustomMangaRepository.kt index e0506d4071..a2cf529a2f 100644 --- a/app/src/main/java/dev/yokai/domain/library/custom/CustomMangaRepository.kt +++ b/app/src/main/java/dev/yokai/domain/library/custom/CustomMangaRepository.kt @@ -28,4 +28,5 @@ interface CustomMangaRepository { suspend fun insertBulkCustomManga(mangaList: List) suspend fun deleteCustomManga(mangaId: Long) suspend fun deleteBulkCustomManga(mangaIds: List) + suspend fun relinkCustomManga(oldId: Long, newId: Long) } diff --git a/app/src/main/java/dev/yokai/domain/library/custom/interactor/RelinkCustomManga.kt b/app/src/main/java/dev/yokai/domain/library/custom/interactor/RelinkCustomManga.kt new file mode 100644 index 0000000000..8eaa50161f --- /dev/null +++ b/app/src/main/java/dev/yokai/domain/library/custom/interactor/RelinkCustomManga.kt @@ -0,0 +1,9 @@ +package dev.yokai.domain.library.custom.interactor + +import dev.yokai.domain.library.custom.CustomMangaRepository + +class RelinkCustomManga( + private val customMangaRepository: CustomMangaRepository, +) { + suspend fun await(oldId: Long, newId: Long) = customMangaRepository.relinkCustomManga(oldId, newId) +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/CustomMangaManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/CustomMangaManager.kt index 919da3ba4a..9b4522f885 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/CustomMangaManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/CustomMangaManager.kt @@ -9,6 +9,7 @@ import dev.yokai.core.metadata.copyFromComicInfo import dev.yokai.domain.library.custom.interactor.CreateCustomManga import dev.yokai.domain.library.custom.interactor.DeleteCustomManga import dev.yokai.domain.library.custom.interactor.GetCustomManga +import dev.yokai.domain.library.custom.interactor.RelinkCustomManga import dev.yokai.domain.library.custom.model.CustomMangaInfo import dev.yokai.domain.library.custom.model.CustomMangaInfo.Companion.getMangaInfo import eu.kanade.tachiyomi.data.database.models.Manga @@ -39,6 +40,7 @@ class CustomMangaManager(val context: Context) { private val createCustomManga: CreateCustomManga by injectLazy() private val deleteCustomManga: DeleteCustomManga by injectLazy() private val getCustomManga: GetCustomManga by injectLazy() + private val relinkCustomManga: RelinkCustomManga by injectLazy() init { scope.launch { @@ -112,15 +114,28 @@ class CustomMangaManager(val context: Context) { saveCustomInfo { jsonFile.delete() } } + private val CustomMangaInfo.shouldDelete + get() = ( + title == null && + author == null && + artist == null && + description == null && + genre == null && + (status ?: -1) == -1 + ) + + suspend fun updateMangaInfo(oldId: Long?, newId: Long?, manga: CustomMangaInfo) { + if (oldId == null || newId == null) return + if (manga.shouldDelete) { + deleteCustomInfo(manga.mangaId) + } else { + relinkCustomManga.await(oldId, newId) + } + } + suspend fun saveMangaInfo(manga: CustomMangaInfo) { val mangaId = manga.mangaId - if (manga.title == null && - manga.author == null && - manga.artist == null && - manga.description == null && - manga.genre == null && - (manga.status ?: -1) == -1 - ) { + if (manga.shouldDelete) { deleteCustomInfo(mangaId) } else { addCustomInfo(manga) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessAdapter.kt index 3c526b63ba..231bec6da7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessAdapter.kt @@ -231,7 +231,7 @@ class MigrationProcessAdapter( customMangaManager.getManga(prevManga)?.let { customManga -> customManga.id = manga.id!! launchNow { - customMangaManager.saveMangaInfo(customManga.getMangaInfo()) + customMangaManager.updateMangaInfo(prevManga.id, manga.id, customManga.getMangaInfo()) } } } diff --git a/app/src/main/sqldelight/tachiyomi/data/custom_manga_info.sq b/app/src/main/sqldelight/tachiyomi/data/custom_manga_info.sq index 2a7273a41f..f42dcbce37 100644 --- a/app/src/main/sqldelight/tachiyomi/data/custom_manga_info.sq +++ b/app/src/main/sqldelight/tachiyomi/data/custom_manga_info.sq @@ -32,3 +32,8 @@ WHERE manga_id = :manga_id; delete: DELETE FROM custom_manga_info WHERE manga_id = :manga_id; + +relink: +UPDATE custom_manga_info +SET manga_id = :new_id +WHERE manga_id = :old_id;