Cleanup data layer (#7450)

(cherry picked from commit 069bd90c0f76d21bc6d99a51644926876415c113)

# Conflicts:
#	app/src/main/sqldelight/data/mangas.sq
This commit is contained in:
Andreas 2022-07-03 21:48:13 +02:00 committed by Jobobby04
parent eb0964d0b6
commit 22da633ee3
7 changed files with 57 additions and 116 deletions

View File

@ -41,39 +41,28 @@ class ChapterRepositoryImpl(
} }
override suspend fun update(chapterUpdate: ChapterUpdate) { override suspend fun update(chapterUpdate: ChapterUpdate) {
handler.await { partialUpdate(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,
chapterId = chapterUpdate.id,
)
}
} }
override suspend fun updateAll(chapterUpdates: List<ChapterUpdate>) { override suspend fun updateAll(chapterUpdates: List<ChapterUpdate>) {
partialUpdate(*chapterUpdates.toTypedArray())
}
private suspend fun partialUpdate(vararg chapterUpdates: ChapterUpdate) {
handler.await(inTransaction = true) { handler.await(inTransaction = true) {
chapterUpdates.forEach { chapterUpdate -> chapterUpdates.forEach { chapterUpdate ->
chaptersQueries.update( chaptersQueries.update(
chapterUpdate.mangaId, mangaId = chapterUpdate.mangaId,
chapterUpdate.url, url = chapterUpdate.url,
chapterUpdate.name, name = chapterUpdate.name,
chapterUpdate.scanlator, scanlator = chapterUpdate.scanlator,
chapterUpdate.read?.toLong(), read = chapterUpdate.read?.toLong(),
chapterUpdate.bookmark?.toLong(), bookmark = chapterUpdate.bookmark?.toLong(),
chapterUpdate.lastPageRead, lastPageRead = chapterUpdate.lastPageRead,
chapterUpdate.chapterNumber?.toDouble(), chapterNumber = chapterUpdate.chapterNumber?.toDouble(),
chapterUpdate.sourceOrder, sourceOrder = chapterUpdate.sourceOrder,
chapterUpdate.dateFetch, dateFetch = chapterUpdate.dateFetch,
chapterUpdate.dateUpload, dateUpload = chapterUpdate.dateUpload,
chapterId = chapterUpdate.id, chapterId = chapterUpdate.id,
) )
} }

View File

@ -83,15 +83,15 @@ class MangaRepositoryImpl(
genre = manga.genre, genre = manga.genre,
title = manga.title, title = manga.title,
status = manga.status, status = manga.status,
thumbnail_url = manga.thumbnailUrl, thumbnailUrl = manga.thumbnailUrl,
favorite = manga.favorite, favorite = manga.favorite,
last_update = manga.lastUpdate, lastUpdate = manga.lastUpdate,
next_update = null, nextUpdate = null,
initialized = manga.initialized, initialized = manga.initialized,
viewer = manga.viewerFlags, viewerFlags = manga.viewerFlags,
chapter_flags = manga.chapterFlags, chapterFlags = manga.chapterFlags,
cover_last_modified = manga.coverLastModified, coverLastModified = manga.coverLastModified,
date_added = manga.dateAdded, dateAdded = manga.dateAdded,
) )
mangasQueries.selectLastInsertedRowId() mangasQueries.selectLastInsertedRowId()
} }

View File

@ -45,27 +45,16 @@ class TrackRepositoryImpl(
} }
override suspend fun insert(track: Track) { override suspend fun insert(track: Track) {
handler.await { insertValues(track)
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,
)
}
} }
override suspend fun insertAll(tracks: List<Track>) { override suspend fun insertAll(tracks: List<Track>) {
insertValues(*tracks.toTypedArray())
}
private suspend fun insertValues(vararg values: Track) {
handler.await(inTransaction = true) { handler.await(inTransaction = true) {
tracks.forEach { mangaTrack -> values.forEach { mangaTrack ->
manga_syncQueries.insert( manga_syncQueries.insert(
mangaId = mangaTrack.mangaId, mangaId = mangaTrack.mangaId,
syncId = mangaTrack.syncId, syncId = mangaTrack.syncId,

View File

@ -92,15 +92,15 @@ abstract class AbstractBackupManager(protected val context: Context) {
genre = manga.getGenres(), genre = manga.getGenres(),
title = manga.title, title = manga.title,
status = manga.status.toLong(), status = manga.status.toLong(),
thumbnail_url = manga.thumbnail_url, thumbnailUrl = manga.thumbnail_url,
favorite = manga.favorite, favorite = manga.favorite,
last_update = manga.last_update, lastUpdate = manga.last_update,
next_update = 0L, nextUpdate = 0L,
initialized = manga.initialized, initialized = manga.initialized,
viewer = manga.viewer_flags.toLong(), viewerFlags = manga.viewer_flags.toLong(),
chapter_flags = manga.chapter_flags.toLong(), chapterFlags = manga.chapter_flags.toLong(),
cover_last_modified = manga.cover_last_modified, coverLastModified = manga.cover_last_modified,
date_added = manga.date_added, dateAdded = manga.date_added,
) )
mangasQueries.selectLastInsertedRowId() mangasQueries.selectLastInsertedRowId()
} }

View File

@ -233,6 +233,7 @@ class MergedSource : HttpSource() {
val newManga = MangaImpl().apply { val newManga = MangaImpl().apply {
this.source = mangaSourceId this.source = mangaSourceId
this.url = mangaUrl this.url = mangaUrl
this.title = "TODO"
} }
newManga.copyFrom(source.getMangaDetails(newManga.toMangaInfo()).toSManga()) newManga.copyFrom(source.getMangaDetails(newManga.toMangaInfo()).toSManga())
newManga.id = -1 newManga.id = -1

View File

@ -2,16 +2,17 @@ package exh
import android.content.Context import android.content.Context
import androidx.core.net.toUri import androidx.core.net.toUri
import eu.kanade.data.DatabaseHandler import eu.kanade.domain.chapter.interactor.GetChapter
import eu.kanade.data.chapter.chapterMapper
import eu.kanade.data.manga.mangaMapper
import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource
import eu.kanade.domain.chapter.model.Chapter import eu.kanade.domain.chapter.model.Chapter
import eu.kanade.domain.manga.interactor.GetManga 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.interactor.UpdateManga
import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.toMangaInfo import eu.kanade.domain.manga.model.toMangaInfo
import eu.kanade.tachiyomi.R 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.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.source.model.toSChapter import eu.kanade.tachiyomi.source.model.toSChapter
@ -23,9 +24,10 @@ import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
class GalleryAdder( class GalleryAdder(
private val handler: DatabaseHandler = Injekt.get(),
private val getManga: GetManga = Injekt.get(), private val getManga: GetManga = Injekt.get(),
private val updateManga: UpdateManga = 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 syncChaptersWithSource: SyncChaptersWithSource = Injekt.get(),
private val sourceManager: SourceManager = 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 // Use manga in DB if possible, otherwise, make a new manga
var manga = getManga.await(cleanedMangaUrl, source.id) var manga = getManga.await(cleanedMangaUrl, source.id)
?: handler.awaitOne(true) { ?: run {
// Insert created manga if not in DB before fetching details val newManga = MangaImpl().apply {
// This allows us to keep the metadata when fetching details this.url = realMangaUrl
mangasQueries.insertEmpty( this.source = source.id
source = source.id, this.id = -1
url = cleanedMangaUrl, this.title = "TODO"
title = realMangaUrl, }
) newManga.id = -1
mangasQueries.selectLastInsertRow(mangaMapper) insertManga.await(newManga.toDomainManga()!!)
getManga.await(cleanedMangaUrl, source.id)!!
} }
// Fetch and copy details // Fetch and copy details
@ -157,7 +160,7 @@ class GalleryAdder(
} }
return if (cleanedChapterUrl != null) { return if (cleanedChapterUrl != null) {
val chapter = handler.awaitOneOrNull { chaptersQueries.getChapterByUrlAndMangaId(cleanedChapterUrl, manga.id, chapterMapper) } val chapter = getChapter.await(cleanedChapterUrl, manga.id)
if (chapter != null) { if (chapter != null) {
GalleryAddEvent.Success(url, manga, context, chapter) GalleryAddEvent.Success(url, manga, context, chapter)
} else { } else {

View File

@ -26,13 +26,6 @@ CREATE TABLE mangas(
CREATE INDEX library_favorite_index ON mangas(favorite) WHERE favorite = 1; CREATE INDEX library_favorite_index ON mangas(favorite) WHERE favorite = 1;
CREATE INDEX mangas_url_index ON mangas(url); 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: getMangaById:
SELECT * SELECT *
FROM mangas 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 SELECT manga_id FROM chapters WHERE read = 1 OR last_page_read != 0
); );
INSERT INTO mangas( insert:
source, 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)
url, VALUES (:source,:url,:artist,:author,:description,:genre,:title,:status,:thumbnailUrl,:favorite,:lastUpdate,:nextUpdate,:initialized,:viewerFlags,:chapterFlags,:coverLastModified,:dateAdded);
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
);
update: update:
UPDATE mangas SET UPDATE mangas SET