revert: "Migrate even more stuff to use SQLDelight"

This commit is contained in:
Ahmad Ansori Palembani 2024-08-23 18:01:59 +07:00
parent cc5a6ac7a8
commit 36c63b9746
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
4 changed files with 47 additions and 37 deletions

View file

@ -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

View file

@ -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<Long>) = db.delete()
.byQuery(
DeleteQuery.builder()

View file

@ -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<MigrationProcessItem>(null, controller, true) {
private val db: DatabaseHelper by injectLazy()
private val getManga: GetManga by injectLazy()
var items: List<MigrationProcessItem> = 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<EnhancedTrackService>,
@ -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<History>()
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()
}
}
}

View file

@ -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)