From 9b4576766792912b03ba82ead4fa05811cb42624 Mon Sep 17 00:00:00 2001 From: Ahmad Ansori Palembani Date: Sun, 13 Oct 2024 19:09:15 +0700 Subject: [PATCH] refactor(backup): Retrieve manga with SQLDelight --- .../data/backup/create/BackupCreator.kt | 17 +++++++---------- .../yokai/data/manga/MangaRepositoryImpl.kt | 3 +++ .../java/yokai/domain/manga/MangaRepository.kt | 1 + .../yokai/domain/manga/interactor/GetManga.kt | 1 + .../sqldelight/tachiyomi/data/mangas.sq | 7 +++++++ 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt index 06652a3248..51e23b89a7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt @@ -10,8 +10,8 @@ import eu.kanade.tachiyomi.data.backup.create.creators.MangaBackupCreator import eu.kanade.tachiyomi.data.backup.create.creators.PreferenceBackupCreator import eu.kanade.tachiyomi.data.backup.create.creators.SourcesBackupCreator import eu.kanade.tachiyomi.data.backup.models.Backup -import eu.kanade.tachiyomi.data.database.DatabaseHelper -import eu.kanade.tachiyomi.util.system.e +import java.io.FileOutputStream +import java.time.Instant import kotlinx.serialization.protobuf.ProtoBuf import okio.buffer import okio.gzip @@ -19,10 +19,9 @@ import okio.sink import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import yokai.domain.backup.BackupPreferences +import yokai.domain.manga.interactor.GetManga import yokai.i18n.MR import yokai.util.lang.getString -import java.io.FileOutputStream -import java.time.Instant class BackupCreator( val context: Context, @@ -30,21 +29,19 @@ class BackupCreator( private val mangaBackupCreator: MangaBackupCreator = MangaBackupCreator(), private val preferenceBackupCreator: PreferenceBackupCreator = PreferenceBackupCreator(), private val sourcesBackupCreator: SourcesBackupCreator = SourcesBackupCreator(), + private val getManga: GetManga = Injekt.get(), ) { val parser = ProtoBuf - private val db: DatabaseHelper = Injekt.get() private val backupPreferences: BackupPreferences = Injekt.get() - @Suppress("RedundantSuspendModifier") - private suspend fun getDatabaseManga(includeReadManga: Boolean) = db.inTransactionReturn { - db.getFavoriteMangas().executeAsBlocking() + + private suspend fun getDatabaseManga(includeReadManga: Boolean) = + getManga.awaitFavorites() + if (includeReadManga) { - db.getReadNotInLibraryMangas().executeAsBlocking() + getManga.awaitReadNotFavorites() } else { emptyList() } - } /** * Create backup Json file from database diff --git a/app/src/main/java/yokai/data/manga/MangaRepositoryImpl.kt b/app/src/main/java/yokai/data/manga/MangaRepositoryImpl.kt index c4adc8091a..f8e3d0e2ff 100644 --- a/app/src/main/java/yokai/data/manga/MangaRepositoryImpl.kt +++ b/app/src/main/java/yokai/data/manga/MangaRepositoryImpl.kt @@ -23,6 +23,9 @@ class MangaRepositoryImpl(private val handler: DatabaseHandler) : MangaRepositor override suspend fun getFavorites(): List = handler.awaitList { mangasQueries.findFavorites(Manga::mapper) } + override suspend fun getReadNotFavorites(): List = + handler.awaitList { mangasQueries.findReadNotFavorites(Manga::mapper) } + override fun getMangaListAsFlow(): Flow> = handler.subscribeToList { mangasQueries.findAll(Manga::mapper) } diff --git a/app/src/main/java/yokai/domain/manga/MangaRepository.kt b/app/src/main/java/yokai/domain/manga/MangaRepository.kt index 903c47dda1..715495c888 100644 --- a/app/src/main/java/yokai/domain/manga/MangaRepository.kt +++ b/app/src/main/java/yokai/domain/manga/MangaRepository.kt @@ -10,6 +10,7 @@ interface MangaRepository { suspend fun getMangaByUrlAndSource(url: String, source: Long): Manga? suspend fun getMangaById(id: Long): Manga? suspend fun getFavorites(): List + suspend fun getReadNotFavorites(): List fun getMangaListAsFlow(): Flow> suspend fun getLibraryManga(): List fun getLibraryMangaAsFlow(): Flow> diff --git a/app/src/main/java/yokai/domain/manga/interactor/GetManga.kt b/app/src/main/java/yokai/domain/manga/interactor/GetManga.kt index bfbed5cf50..22211f69ed 100644 --- a/app/src/main/java/yokai/domain/manga/interactor/GetManga.kt +++ b/app/src/main/java/yokai/domain/manga/interactor/GetManga.kt @@ -11,4 +11,5 @@ class GetManga ( suspend fun awaitByUrlAndSource(url: String, source: Long) = mangaRepository.getMangaByUrlAndSource(url, source) suspend fun awaitById(id: Long) = mangaRepository.getMangaById(id) suspend fun awaitFavorites() = mangaRepository.getFavorites() + suspend fun awaitReadNotFavorites() = mangaRepository.getReadNotFavorites() } diff --git a/data/src/commonMain/sqldelight/tachiyomi/data/mangas.sq b/data/src/commonMain/sqldelight/tachiyomi/data/mangas.sq index a09e361328..548bdf7b9c 100644 --- a/data/src/commonMain/sqldelight/tachiyomi/data/mangas.sq +++ b/data/src/commonMain/sqldelight/tachiyomi/data/mangas.sq @@ -50,6 +50,13 @@ SELECT * FROM mangas WHERE favorite = 1; +findReadNotFavorites: +SELECT * +FROM mangas +WHERE favorite = 0 AND _id IN ( + SELECT chapters.manga_id FROM chapters WHERE read = 1 OR last_page_read != 0 +); + insert: INSERT INTO mangas (source, url, artist, author, description, genre, title, status, thumbnail_url, favorite, last_update, initialized, viewer, hide_title, chapter_flags, date_added, filtered_scanlators, update_strategy, cover_last_modified) VALUES (:source, :url, :artist, :author, :description, :genre, :title, :status, :thumbnailUrl, :favorite, :lastUpdate, :initialized, :viewer, :hideTitle, :chapterFlags, :dateAdded, :filteredScanlators, :updateStrategy, :coverLastModified);