diff --git a/app/src/main/java/eu/kanade/data/chapter/ChapterRepositoryImpl.kt b/app/src/main/java/eu/kanade/data/chapter/ChapterRepositoryImpl.kt index 41d26db84..699976e42 100644 --- a/app/src/main/java/eu/kanade/data/chapter/ChapterRepositoryImpl.kt +++ b/app/src/main/java/eu/kanade/data/chapter/ChapterRepositoryImpl.kt @@ -41,39 +41,28 @@ class ChapterRepositoryImpl( } override suspend fun update(chapterUpdate: ChapterUpdate) { - handler.await { - chaptersQueries.update( - chapterUpdate.mangaId, - chapterUpdate.url, - chapterUpdate.name, - chapterUpdate.scanlator, - chapterUpdate.read?.toLong(), - chapterUpdate.bookmark?.toLong(), - chapterUpdate.lastPageRead, - chapterUpdate.chapterNumber?.toDouble(), - chapterUpdate.sourceOrder, - chapterUpdate.dateFetch, - chapterUpdate.dateUpload, - chapterId = chapterUpdate.id, - ) - } + partialUpdate(chapterUpdate) } override suspend fun updateAll(chapterUpdates: List) { + partialUpdate(*chapterUpdates.toTypedArray()) + } + + private suspend fun partialUpdate(vararg chapterUpdates: ChapterUpdate) { handler.await(inTransaction = true) { chapterUpdates.forEach { chapterUpdate -> chaptersQueries.update( - chapterUpdate.mangaId, - chapterUpdate.url, - chapterUpdate.name, - chapterUpdate.scanlator, - chapterUpdate.read?.toLong(), - chapterUpdate.bookmark?.toLong(), - chapterUpdate.lastPageRead, - chapterUpdate.chapterNumber?.toDouble(), - chapterUpdate.sourceOrder, - chapterUpdate.dateFetch, - chapterUpdate.dateUpload, + mangaId = chapterUpdate.mangaId, + url = chapterUpdate.url, + name = chapterUpdate.name, + scanlator = chapterUpdate.scanlator, + read = chapterUpdate.read?.toLong(), + bookmark = chapterUpdate.bookmark?.toLong(), + lastPageRead = chapterUpdate.lastPageRead, + chapterNumber = chapterUpdate.chapterNumber?.toDouble(), + sourceOrder = chapterUpdate.sourceOrder, + dateFetch = chapterUpdate.dateFetch, + dateUpload = chapterUpdate.dateUpload, chapterId = chapterUpdate.id, ) } diff --git a/app/src/main/java/eu/kanade/data/manga/MangaRepositoryImpl.kt b/app/src/main/java/eu/kanade/data/manga/MangaRepositoryImpl.kt index 04927c13a..addc26ffd 100644 --- a/app/src/main/java/eu/kanade/data/manga/MangaRepositoryImpl.kt +++ b/app/src/main/java/eu/kanade/data/manga/MangaRepositoryImpl.kt @@ -83,15 +83,15 @@ class MangaRepositoryImpl( genre = manga.genre, title = manga.title, status = manga.status, - thumbnail_url = manga.thumbnailUrl, + thumbnailUrl = manga.thumbnailUrl, favorite = manga.favorite, - last_update = manga.lastUpdate, - next_update = null, + lastUpdate = manga.lastUpdate, + nextUpdate = null, initialized = manga.initialized, - viewer = manga.viewerFlags, - chapter_flags = manga.chapterFlags, - cover_last_modified = manga.coverLastModified, - date_added = manga.dateAdded, + viewerFlags = manga.viewerFlags, + chapterFlags = manga.chapterFlags, + coverLastModified = manga.coverLastModified, + dateAdded = manga.dateAdded, ) mangasQueries.selectLastInsertedRowId() } diff --git a/app/src/main/java/eu/kanade/data/track/TrackRepositoryImpl.kt b/app/src/main/java/eu/kanade/data/track/TrackRepositoryImpl.kt index 78bea3fc0..9b972b570 100644 --- a/app/src/main/java/eu/kanade/data/track/TrackRepositoryImpl.kt +++ b/app/src/main/java/eu/kanade/data/track/TrackRepositoryImpl.kt @@ -45,27 +45,16 @@ class TrackRepositoryImpl( } override suspend fun insert(track: Track) { - handler.await { - manga_syncQueries.insert( - mangaId = track.mangaId, - syncId = track.syncId, - remoteId = track.remoteId, - libraryId = track.libraryId, - title = track.title, - lastChapterRead = track.lastChapterRead, - totalChapters = track.totalChapters, - status = track.status, - score = track.score, - remoteUrl = track.remoteUrl, - startDate = track.startDate, - finishDate = track.finishDate, - ) - } + insertValues(track) } override suspend fun insertAll(tracks: List) { + insertValues(*tracks.toTypedArray()) + } + + private suspend fun insertValues(vararg values: Track) { handler.await(inTransaction = true) { - tracks.forEach { mangaTrack -> + values.forEach { mangaTrack -> manga_syncQueries.insert( mangaId = mangaTrack.mangaId, syncId = mangaTrack.syncId, diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/AbstractBackupManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/AbstractBackupManager.kt index 2106237ee..b680f1988 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/AbstractBackupManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/AbstractBackupManager.kt @@ -92,15 +92,15 @@ abstract class AbstractBackupManager(protected val context: Context) { genre = manga.getGenres(), title = manga.title, status = manga.status.toLong(), - thumbnail_url = manga.thumbnail_url, + thumbnailUrl = manga.thumbnail_url, favorite = manga.favorite, - last_update = manga.last_update, - next_update = 0L, + lastUpdate = manga.last_update, + nextUpdate = 0L, initialized = manga.initialized, - viewer = manga.viewer_flags.toLong(), - chapter_flags = manga.chapter_flags.toLong(), - cover_last_modified = manga.cover_last_modified, - date_added = manga.date_added, + viewerFlags = manga.viewer_flags.toLong(), + chapterFlags = manga.chapter_flags.toLong(), + coverLastModified = manga.cover_last_modified, + dateAdded = manga.date_added, ) mangasQueries.selectLastInsertedRowId() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt index 27f5188af..a3361e96c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt @@ -233,6 +233,7 @@ class MergedSource : HttpSource() { val newManga = MangaImpl().apply { this.source = mangaSourceId this.url = mangaUrl + this.title = "TODO" } newManga.copyFrom(source.getMangaDetails(newManga.toMangaInfo()).toSManga()) newManga.id = -1 diff --git a/app/src/main/java/exh/GalleryAdder.kt b/app/src/main/java/exh/GalleryAdder.kt index 176a2789c..0313eedfd 100755 --- a/app/src/main/java/exh/GalleryAdder.kt +++ b/app/src/main/java/exh/GalleryAdder.kt @@ -2,16 +2,17 @@ package exh import android.content.Context import androidx.core.net.toUri -import eu.kanade.data.DatabaseHandler -import eu.kanade.data.chapter.chapterMapper -import eu.kanade.data.manga.mangaMapper +import eu.kanade.domain.chapter.interactor.GetChapter import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource import eu.kanade.domain.chapter.model.Chapter import eu.kanade.domain.manga.interactor.GetManga +import eu.kanade.domain.manga.interactor.InsertManga import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.toMangaInfo import eu.kanade.tachiyomi.R +import eu.kanade.tachiyomi.data.database.models.MangaImpl +import eu.kanade.tachiyomi.data.database.models.toDomainManga import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.model.toSChapter @@ -23,9 +24,10 @@ import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class GalleryAdder( - private val handler: DatabaseHandler = Injekt.get(), private val getManga: GetManga = Injekt.get(), private val updateManga: UpdateManga = Injekt.get(), + private val insertManga: InsertManga = Injekt.get(), + private val getChapter: GetChapter = Injekt.get(), private val syncChaptersWithSource: SyncChaptersWithSource = Injekt.get(), private val sourceManager: SourceManager = Injekt.get(), ) { @@ -119,15 +121,16 @@ class GalleryAdder( // Use manga in DB if possible, otherwise, make a new manga var manga = getManga.await(cleanedMangaUrl, source.id) - ?: handler.awaitOne(true) { - // Insert created manga if not in DB before fetching details - // This allows us to keep the metadata when fetching details - mangasQueries.insertEmpty( - source = source.id, - url = cleanedMangaUrl, - title = realMangaUrl, - ) - mangasQueries.selectLastInsertRow(mangaMapper) + ?: run { + val newManga = MangaImpl().apply { + this.url = realMangaUrl + this.source = source.id + this.id = -1 + this.title = "TODO" + } + newManga.id = -1 + insertManga.await(newManga.toDomainManga()!!) + getManga.await(cleanedMangaUrl, source.id)!! } // Fetch and copy details @@ -157,7 +160,7 @@ class GalleryAdder( } return if (cleanedChapterUrl != null) { - val chapter = handler.awaitOneOrNull { chaptersQueries.getChapterByUrlAndMangaId(cleanedChapterUrl, manga.id, chapterMapper) } + val chapter = getChapter.await(cleanedChapterUrl, manga.id) if (chapter != null) { GalleryAddEvent.Success(url, manga, context, chapter) } else { diff --git a/app/src/main/sqldelight/data/mangas.sq b/app/src/main/sqldelight/data/mangas.sq index fb53bd4ea..1f3b282fb 100644 --- a/app/src/main/sqldelight/data/mangas.sq +++ b/app/src/main/sqldelight/data/mangas.sq @@ -26,13 +26,6 @@ CREATE TABLE mangas( CREATE INDEX library_favorite_index ON mangas(favorite) WHERE favorite = 1; CREATE INDEX mangas_url_index ON mangas(url); -insert: -INSERT INTO mangas(source,url,artist,author,description,genre,title,status,thumbnail_url,favorite,last_update,next_update,initialized,viewer,chapter_flags,cover_last_modified,date_added) -VALUES (:source,:url,:artist,:author,:description,:genre,:title,:status,:thumbnail_url,:favorite,:last_update,:next_update,:initialized,:viewer,:chapter_flags,:cover_last_modified,:date_added); - -insertEmpty: -INSERT INTO mangas (source, url, title, artist, author, description, genre, status, thumbnail_url, favorite, last_update, next_update, initialized, viewer, chapter_flags, cover_last_modified, date_added, filtered_scanlators) VALUES (?, ?, ?, NULL, NULL, NULL, NULL, 0, NULL, 0, NULL, NULL, 0, 0, 0, 0, 0, NULL); - getMangaById: SELECT * FROM mangas @@ -166,43 +159,9 @@ WHERE favorite = 0 AND source IN :sourceIdsAND AND _id NOT IN ( SELECT manga_id FROM chapters WHERE read = 1 OR last_page_read != 0 ); -INSERT INTO mangas( - source, - url, - artist, - author, - description, - genre, - title, - status, - thumbnail_url, - favorite, - last_update, - next_update, - initialized, - viewer, - chapter_flags, - cover_last_modified, - date_added -) VALUES ( - :source, - :url, - :artist, - :author, - :description, - :genre, - :title, - :status, - :thumbnailUrl, - :favorite, - :lastUpdate, - 0, - :initialized, - :viewerFlags, - :chapterFlags, - :coverLastModified, - :dateAdded -); +insert: +INSERT INTO mangas(source,url,artist,author,description,genre,title,status,thumbnail_url,favorite,last_update,next_update,initialized,viewer,chapter_flags,cover_last_modified,date_added) +VALUES (:source,:url,:artist,:author,:description,:genre,:title,:status,:thumbnailUrl,:favorite,:lastUpdate,:nextUpdate,:initialized,:viewerFlags,:chapterFlags,:coverLastModified,:dateAdded); update: UPDATE mangas SET