123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- package eu.kanade.data.manga
- import eu.kanade.data.DatabaseHandler
- import eu.kanade.data.listOfStringsAdapter
- import eu.kanade.data.toLong
- import eu.kanade.domain.manga.model.Manga
- import eu.kanade.domain.manga.model.MangaUpdate
- import eu.kanade.domain.manga.repository.MangaRepository
- import eu.kanade.tachiyomi.data.database.models.LibraryManga
- import eu.kanade.tachiyomi.util.system.logcat
- import kotlinx.coroutines.flow.Flow
- import logcat.LogPriority
- class MangaRepositoryImpl(
- private val handler: DatabaseHandler,
- ) : MangaRepository {
- override suspend fun getMangaById(id: Long): Manga {
- return handler.awaitOne { mangasQueries.getMangaById(id, mangaMapper) }
- }
- override suspend fun getMangaByIdAsFlow(id: Long): Flow<Manga> {
- return handler.subscribeToOne { mangasQueries.getMangaById(id, mangaMapper) }
- }
- override suspend fun getMangaByUrlAndSourceId(url: String, sourceId: Long): Manga? {
- return handler.awaitOneOrNull { mangasQueries.getMangaByUrlAndSource(url, sourceId, mangaMapper) }
- }
- override suspend fun getFavorites(): List<Manga> {
- return handler.awaitList { mangasQueries.getFavorites(mangaMapper) }
- }
- override suspend fun getLibraryManga(): List<LibraryManga> {
- return handler.awaitList { mangasQueries.getLibrary(libraryManga) }
- }
- override fun getLibraryMangaAsFlow(): Flow<List<LibraryManga>> {
- return handler.subscribeToList { mangasQueries.getLibrary(libraryManga) }
- }
- override fun getFavoritesBySourceId(sourceId: Long): Flow<List<Manga>> {
- return handler.subscribeToList { mangasQueries.getFavoriteBySourceId(sourceId, mangaMapper) }
- }
- override suspend fun getDuplicateLibraryManga(title: String, sourceId: Long): Manga? {
- return handler.awaitOneOrNull {
- mangasQueries.getDuplicateLibraryManga(title, sourceId, mangaMapper)
- }
- }
- override suspend fun resetViewerFlags(): Boolean {
- return try {
- handler.await { mangasQueries.resetViewerFlags() }
- true
- } catch (e: Exception) {
- logcat(LogPriority.ERROR, e)
- false
- }
- }
- override suspend fun setMangaCategories(mangaId: Long, categoryIds: List<Long>) {
- handler.await(inTransaction = true) {
- mangas_categoriesQueries.deleteMangaCategoryByMangaId(mangaId)
- categoryIds.map { categoryId ->
- mangas_categoriesQueries.insert(mangaId, categoryId)
- }
- }
- }
- override suspend fun insert(manga: Manga): Long? {
- return handler.awaitOneOrNull {
- mangasQueries.insert(
- source = manga.source,
- url = manga.url,
- artist = manga.artist,
- author = manga.author,
- description = manga.description,
- genre = manga.genre,
- title = manga.title,
- status = manga.status,
- thumbnail_url = manga.thumbnailUrl,
- favorite = manga.favorite,
- last_update = manga.lastUpdate,
- next_update = null,
- initialized = manga.initialized,
- viewer = manga.viewerFlags,
- chapter_flags = manga.chapterFlags,
- cover_last_modified = manga.coverLastModified,
- date_added = manga.dateAdded,
- )
- mangasQueries.selectLastInsertedRowId()
- }
- }
- override suspend fun update(update: MangaUpdate): Boolean {
- return try {
- partialUpdate(update)
- true
- } catch (e: Exception) {
- logcat(LogPriority.ERROR, e)
- false
- }
- }
- override suspend fun updateAll(values: List<MangaUpdate>): Boolean {
- return try {
- partialUpdate(*values.toTypedArray())
- true
- } catch (e: Exception) {
- logcat(LogPriority.ERROR, e)
- false
- }
- }
- private suspend fun partialUpdate(vararg values: MangaUpdate) {
- handler.await(inTransaction = true) {
- values.forEach { value ->
- mangasQueries.update(
- source = value.source,
- url = value.url,
- artist = value.artist,
- author = value.author,
- description = value.description,
- genre = value.genre?.let(listOfStringsAdapter::encode),
- title = value.title,
- status = value.status,
- thumbnailUrl = value.thumbnailUrl,
- favorite = value.favorite?.toLong(),
- lastUpdate = value.lastUpdate,
- initialized = value.initialized?.toLong(),
- viewer = value.viewerFlags,
- chapterFlags = value.chapterFlags,
- coverLastModified = value.coverLastModified,
- dateAdded = value.dateAdded,
- mangaId = value.id,
- )
- }
- }
- }
- }
|