refactor(backup): Retrieve manga with SQLDelight

This commit is contained in:
Ahmad Ansori Palembani 2024-10-13 19:09:15 +07:00
parent ad070fd59a
commit 9b45767667
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
5 changed files with 19 additions and 10 deletions

View file

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

View file

@ -23,6 +23,9 @@ class MangaRepositoryImpl(private val handler: DatabaseHandler) : MangaRepositor
override suspend fun getFavorites(): List<Manga> =
handler.awaitList { mangasQueries.findFavorites(Manga::mapper) }
override suspend fun getReadNotFavorites(): List<Manga> =
handler.awaitList { mangasQueries.findReadNotFavorites(Manga::mapper) }
override fun getMangaListAsFlow(): Flow<List<Manga>> =
handler.subscribeToList { mangasQueries.findAll(Manga::mapper) }

View file

@ -10,6 +10,7 @@ interface MangaRepository {
suspend fun getMangaByUrlAndSource(url: String, source: Long): Manga?
suspend fun getMangaById(id: Long): Manga?
suspend fun getFavorites(): List<Manga>
suspend fun getReadNotFavorites(): List<Manga>
fun getMangaListAsFlow(): Flow<List<Manga>>
suspend fun getLibraryManga(): List<LibraryManga>
fun getLibraryMangaAsFlow(): Flow<List<LibraryManga>>

View file

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

View file

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