Cleanup data layer (#7450)
(cherry picked from commit 069bd90c0f76d21bc6d99a51644926876415c113) # Conflicts: # app/src/main/sqldelight/data/mangas.sq
This commit is contained in:
parent
eb0964d0b6
commit
22da633ee3
@ -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,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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 {
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user