From 36c63b97467438818dc9e8f015b3f97fac6419e5 Mon Sep 17 00:00:00 2001 From: Ahmad Ansori Palembani Date: Fri, 23 Aug 2024 18:01:59 +0700 Subject: [PATCH] revert: "Migrate even more stuff to use SQLDelight" --- CHANGELOG.md | 5 ++ .../data/database/queries/MangaQueries.kt | 21 +++++++ .../manga/process/MigrationProcessAdapter.kt | 55 +++++++------------ .../kanade/tachiyomi/util/MangaExtensions.kt | 3 +- 4 files changed, 47 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a34f9a3981..12c456065e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,3 +11,8 @@ --> ## Fixes - Fixed crashes caused by certain extension implementation + +## Other +- More StorIO to SQLDelight migration effort +- Update dependency gradle to v8.10 +- Update dependency dev.chrisbanes.compose:compose-bom to v2024.08.00-alpha02 diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/MangaQueries.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/MangaQueries.kt index b2b0b1ac5f..cf1db57e14 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/MangaQueries.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/MangaQueries.kt @@ -6,6 +6,9 @@ import com.pushtorefresh.storio.sqlite.queries.Query import com.pushtorefresh.storio.sqlite.queries.RawQuery import eu.kanade.tachiyomi.data.database.DbProvider import eu.kanade.tachiyomi.data.database.models.SourceIdMangaCount +import eu.kanade.tachiyomi.data.database.resolvers.MangaDateAddedPutResolver +import eu.kanade.tachiyomi.data.database.resolvers.MangaFavoritePutResolver +import eu.kanade.tachiyomi.data.database.resolvers.MangaTitlePutResolver import eu.kanade.tachiyomi.data.database.resolvers.SourceIdMangaCountGetResolver import eu.kanade.tachiyomi.data.database.tables.ChapterTable import eu.kanade.tachiyomi.data.database.tables.MangaTable @@ -75,6 +78,24 @@ interface MangaQueries : DbProvider { fun insertManga(manga: Manga) = db.put().`object`(manga).prepare() + // FIXME: Migrate to SQLDelight, on halt: used by StorIO's inTransaction + fun updateMangaFavorite(manga: Manga) = db.put() + .`object`(manga) + .withPutResolver(MangaFavoritePutResolver()) + .prepare() + + // FIXME: Migrate to SQLDelight, on halt: used by StorIO's inTransaction + fun updateMangaAdded(manga: Manga) = db.put() + .`object`(manga) + .withPutResolver(MangaDateAddedPutResolver()) + .prepare() + + // FIXME: Migrate to SQLDelight, on halt: used by StorIO's inTransaction + fun updateMangaTitle(manga: Manga) = db.put() + .`object`(manga) + .withPutResolver(MangaTitlePutResolver()) + .prepare() + fun deleteMangasNotInLibraryBySourceIds(sourceIds: List) = db.delete() .byQuery( DeleteQuery.builder() 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 f69cd42444..1cac676223 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 @@ -15,6 +15,7 @@ import eu.kanade.tachiyomi.domain.manga.models.Manga import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.ui.migration.MigrationFlags +import eu.kanade.tachiyomi.util.system.launchNow import eu.kanade.tachiyomi.util.system.launchUI import java.util.Date import kotlinx.coroutines.Dispatchers @@ -23,11 +24,7 @@ import kotlinx.coroutines.withContext import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy -import yokai.domain.chapter.interactor.GetChapter import yokai.domain.library.custom.model.CustomMangaInfo.Companion.getMangaInfo -import yokai.domain.manga.interactor.GetManga -import yokai.domain.manga.interactor.UpdateManga -import yokai.domain.manga.models.MangaUpdate import yokai.domain.ui.UiPreferences class MigrationProcessAdapter( @@ -35,15 +32,12 @@ class MigrationProcessAdapter( ) : FlexibleAdapter(null, controller, true) { private val db: DatabaseHelper by injectLazy() - - private val getManga: GetManga by injectLazy() - var items: List = emptyList() val preferences: PreferencesHelper by injectLazy() val uiPreferences: UiPreferences by injectLazy() val sourceManager: SourceManager by injectLazy() val coverCache: CoverCache by injectLazy() - private val customMangaManager: CustomMangaManager by injectLazy() + val customMangaManager: CustomMangaManager by injectLazy() var showOutline = uiPreferences.outlineOnCovers().get() val menuItemListener: MigrationProcessInterface = controller @@ -86,7 +80,9 @@ class MigrationProcessAdapter( val manga = migratingManga.manga if (manga.searchResult.initialized) { val toMangaObj = - getManga.awaitById(manga.searchResult.get() ?: return@forEach) ?: return@forEach + db.getManga(manga.searchResult.get() ?: return@forEach) + .executeAsBlocking() + ?: return@forEach val prevManga = manga.manga() ?: return@forEach val source = sourceManager.get(toMangaObj.source) ?: return@forEach val prevSource = sourceManager.get(prevManga.source) @@ -107,7 +103,9 @@ class MigrationProcessAdapter( launchUI { val manga = getItem(position)?.manga ?: return@launchUI db.inTransaction { - val toMangaObj = getManga.awaitById(manga.searchResult.get() ?: return@launchUI) ?: return@launchUI + val toMangaObj = + db.getManga(manga.searchResult.get() ?: return@launchUI).executeAsBlocking() + ?: return@launchUI val prevManga = manga.manga() ?: return@launchUI val source = sourceManager.get(toMangaObj.source) ?: return@launchUI val prevSource = sourceManager.get(prevManga.source) @@ -133,7 +131,7 @@ class MigrationProcessAdapter( } // FIXME: Migrate to SQLDelight, on halt: in StorIO transaction - private suspend fun migrateMangaInternal( + private fun migrateMangaInternal( prevSource: Source?, source: Source, prevManga: Manga, @@ -148,7 +146,7 @@ class MigrationProcessAdapter( companion object { // FIXME: Migrate to SQLDelight, on halt: in StorIO transaction - suspend fun migrateMangaInternal( + fun migrateMangaInternal( flags: Int, db: DatabaseHelper, enhancedServices: List, @@ -159,16 +157,13 @@ class MigrationProcessAdapter( prevManga: Manga, manga: Manga, replace: Boolean, - getChapter: GetChapter = Injekt.get(), - //insertChapter: InsertChapter = Injekt.get(), - updateManga: UpdateManga = Injekt.get(), ) { // Update chapters read if (MigrationFlags.hasChapters(flags)) { - val prevMangaChapters = getChapter.awaitAll(prevManga.id!!, false) + val prevMangaChapters = db.getChapters(prevManga).executeAsBlocking() val maxChapterRead = prevMangaChapters.filter { it.read }.maxOfOrNull { it.chapter_number } ?: 0f - val dbChapters = getChapter.awaitAll(manga.id!!, false) + val dbChapters = db.getChapters(manga).executeAsBlocking() val prevHistoryList = db.getHistoryByMangaId(prevManga.id!!).executeAsBlocking() val historyList = mutableListOf() for (chapter in dbChapters) { @@ -193,8 +188,6 @@ class MigrationProcessAdapter( } } } - // FIXME: Probably gonna mess with StorIO's transaction since it's also uses transaction - //insertChapter.awaitBulk(dbChapters) db.insertChapters(dbChapters).executeAsBlocking() db.upsertHistoryLastRead(historyList).executeAsBlocking() } @@ -224,12 +217,7 @@ class MigrationProcessAdapter( // Update favorite status if (replace) { prevManga.favorite = false - updateManga.await( - MangaUpdate( - id = prevManga.id!!, - favorite = prevManga.favorite, - ) - ) + db.updateMangaFavorite(prevManga).executeAsBlocking() } manga.favorite = true if (replace) { @@ -242,21 +230,18 @@ class MigrationProcessAdapter( if (MigrationFlags.hasCustomMangaInfo(flags)) { if (coverCache.getCustomCoverFile(prevManga).exists()) { coverCache.setCustomCoverToCache(manga, coverCache.getCustomCoverFile(prevManga).inputStream()) - manga.updateCoverLastModified() + launchNow { manga.updateCoverLastModified() } } customMangaManager.getManga(prevManga)?.let { customManga -> - customMangaManager.updateMangaInfo(prevManga.id, manga.id, customManga.getMangaInfo()) + launchNow { + customMangaManager.updateMangaInfo(prevManga.id, manga.id, customManga.getMangaInfo()) + } } } - updateManga.await( - MangaUpdate( - id = manga.id!!, - favorite = manga.favorite, - dateAdded = manga.date_added, - title = manga.title, - ) - ) + db.updateMangaFavorite(manga).executeAsBlocking() + db.updateMangaAdded(manga).executeAsBlocking() + db.updateMangaTitle(manga).executeAsBlocking() } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt index eec3fc0457..f52326de3f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt @@ -30,7 +30,6 @@ import eu.kanade.tachiyomi.ui.migration.manga.process.MigrationProcessAdapter import eu.kanade.tachiyomi.util.chapter.syncChaptersWithTrackServiceTwoWay import eu.kanade.tachiyomi.util.lang.asButton import eu.kanade.tachiyomi.util.system.launchIO -import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.system.materialAlertDialog import eu.kanade.tachiyomi.util.system.setCustomTitleAndMessage import eu.kanade.tachiyomi.util.system.toast @@ -330,7 +329,7 @@ private fun showAddDuplicateDialog( val source = sourceManager.getOrStub(libraryManga.source) val titles by lazy { MigrationFlags.titles(activity, libraryManga) } - fun migrateManga(mDialog: DialogInterface, replace: Boolean) = launchUI { + fun migrateManga(mDialog: DialogInterface, replace: Boolean) { val listView = (mDialog as AlertDialog).listView val enabled = titles.indices.map { listView.isItemChecked(it) }.toTypedArray() val flags = MigrationFlags.getFlagsFromPositions(enabled, libraryManga)