From 9a10f1300a2cb01721a48ecf6ba95ef9b95f9dea Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Mon, 4 Jul 2022 21:54:24 -0400 Subject: [PATCH] Fix gallery adder --- .../source/online/all/MergedSource.kt | 63 +++++++++---------- app/src/main/java/exh/GalleryAdder.kt | 18 +++--- 2 files changed, 36 insertions(+), 45 deletions(-) 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 d06efe96c..9b932e461 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 @@ -3,15 +3,14 @@ package eu.kanade.tachiyomi.source.online.all import eu.kanade.domain.category.interactor.GetCategories import eu.kanade.domain.chapter.interactor.GetMergedChapterByMangaId import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource +import eu.kanade.domain.chapter.model.Chapter import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.domain.manga.interactor.GetManga import eu.kanade.domain.manga.interactor.GetMergedReferencesById 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.data.database.models.Chapter -import eu.kanade.tachiyomi.data.database.models.MangaImpl -import eu.kanade.tachiyomi.data.database.models.toDomainManga -import eu.kanade.tachiyomi.data.database.models.toMangaInfo import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.source.Source @@ -21,7 +20,6 @@ import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.toSChapter -import eu.kanade.tachiyomi.source.model.toSManga import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.util.lang.withIOContext import eu.kanade.tachiyomi.util.shouldDownloadNewChapters @@ -40,14 +38,14 @@ import tachiyomi.source.model.MangaInfo import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy -import eu.kanade.domain.chapter.model.Chapter as DomainChapter -import eu.kanade.domain.manga.model.Manga as DomainManga +import eu.kanade.tachiyomi.data.database.models.Chapter as DbChapter class MergedSource : HttpSource() { private val getManga: GetManga by injectLazy() private val getMergedReferencesById: GetMergedReferencesById by injectLazy() private val getMergedChaptersByMangaId: GetMergedChapterByMangaId by injectLazy() private val insertManga: InsertManga by injectLazy() + private val updateManga: UpdateManga by injectLazy() private val getCategories: GetCategories by injectLazy() private val sourceManager: SourceManager by injectLazy() private val downloadManager: DownloadManager by injectLazy() @@ -105,7 +103,7 @@ class MergedSource : HttpSource() { } // TODO more chapter dedupe - suspend fun transformMergedChapters(mangaId: Long, chapterList: List, editScanlators: Boolean, dedupe: Boolean): List { + suspend fun transformMergedChapters(mangaId: Long, chapterList: List, editScanlators: Boolean, dedupe: Boolean): List { val mangaReferences = getMergedReferencesById.await(mangaId) val chapters = if (editScanlators) { val sources = mangaReferences.map { sourceManager.getOrStub(it.mangaSourceId) to it.mangaId } @@ -125,19 +123,19 @@ class MergedSource : HttpSource() { return if (dedupe) dedupeChapterList(mangaReferences, chapters) else chapters } - fun getChaptersAsBlockingAsDbChapter(mangaId: Long, editScanlators: Boolean = false, dedupe: Boolean = true): List { - return getChaptersAsBlocking(mangaId, editScanlators, dedupe).map(DomainChapter::toDbChapter) + fun getChaptersAsBlockingAsDbChapter(mangaId: Long, editScanlators: Boolean = false, dedupe: Boolean = true): List { + return getChaptersAsBlocking(mangaId, editScanlators, dedupe).map(Chapter::toDbChapter) } - fun getChaptersAsBlocking(mangaId: Long, editScanlators: Boolean = false, dedupe: Boolean = true): List { + fun getChaptersAsBlocking(mangaId: Long, editScanlators: Boolean = false, dedupe: Boolean = true): List { return runBlocking { getChapters(mangaId, editScanlators, dedupe) } } - suspend fun getChapters(mangaId: Long, editScanlators: Boolean = false, dedupe: Boolean = true): List { + suspend fun getChapters(mangaId: Long, editScanlators: Boolean = false, dedupe: Boolean = true): List { return transformMergedChapters(mangaId, getMergedChaptersByMangaId.await(mangaId), editScanlators, dedupe) } - private fun dedupeChapterList(mangaReferences: List, chapterList: List): List { + private fun dedupeChapterList(mangaReferences: List, chapterList: List): List { return when (mangaReferences.firstOrNull { it.mangaSourceId == MERGED_SOURCE_ID }?.chapterSortMode) { MergedMangaReference.CHAPTER_SORT_NO_DEDUPE, MergedMangaReference.CHAPTER_SORT_NONE -> chapterList MergedMangaReference.CHAPTER_SORT_PRIORITY -> chapterList @@ -155,22 +153,22 @@ class MergedSource : HttpSource() { } } - private fun findSourceWithMostChapters(chapterList: List): Long? { + private fun findSourceWithMostChapters(chapterList: List): Long? { return chapterList.groupBy { it.mangaId }.maxByOrNull { it.value.size }?.key } - private fun findSourceWithHighestChapterNumber(chapterList: List): Long? { + private fun findSourceWithHighestChapterNumber(chapterList: List): Long? { return chapterList.maxByOrNull { it.chapterNumber }?.mangaId } - suspend fun fetchChaptersForMergedManga(manga: DomainManga, downloadChapters: Boolean = true, editScanlators: Boolean = false, dedupe: Boolean = true): List { + suspend fun fetchChaptersForMergedManga(manga: Manga, downloadChapters: Boolean = true, editScanlators: Boolean = false, dedupe: Boolean = true): List { return withIOContext { fetchChaptersAndSync(manga, downloadChapters) - getChaptersAsBlockingAsDbChapter(manga.id, editScanlators, dedupe) + getChapters(manga.id, editScanlators, dedupe) } } - suspend fun fetchChaptersAndSync(manga: DomainManga, downloadChapters: Boolean = true): Pair, List> { + suspend fun fetchChaptersAndSync(manga: Manga, downloadChapters: Boolean = true): Pair, List> { val syncChaptersWithSource = Injekt.get() val mangaReferences = getMergedReferencesById.await(manga.id) if (mangaReferences.isEmpty()) { @@ -190,7 +188,7 @@ class MergedSource : HttpSource() { values.map { try { val (source, loadedManga, reference) = - it.load(sourceManager, getManga, insertManga) + it.load(sourceManager, getManga, insertManga, updateManga) if (loadedManga != null && reference.getChapterUpdates) { val chapterList = source.getChapterList(loadedManga.toMangaInfo()) .map(ChapterInfo::toSChapter) @@ -199,7 +197,7 @@ class MergedSource : HttpSource() { if (ifDownloadNewChapters && reference.downloadChapters) { downloadManager.downloadChapters( loadedManga, - results.first.map(DomainChapter::toDbChapter), + results.first.map(Chapter::toDbChapter), ) } results @@ -225,27 +223,24 @@ class MergedSource : HttpSource() { } } - suspend fun MergedMangaReference.load(sourceManager: SourceManager, getManga: GetManga, insertManga: InsertManga): LoadedMangaSource { + suspend fun MergedMangaReference.load(sourceManager: SourceManager, getManga: GetManga, insertManga: InsertManga, updateManga: UpdateManga): LoadedMangaSource { var manga = getManga.await(mangaUrl, mangaSourceId) val source = sourceManager.getOrStub(manga?.source ?: mangaSourceId) if (manga == null) { - val newManga = MangaImpl().apply { - this.source = mangaSourceId - this.url = mangaUrl - this.title = "TODO" - } - newManga.copyFrom(source.getMangaDetails(newManga.toMangaInfo()).toSManga()) - newManga.id = -1 - val result = run { - val id = insertManga.await(newManga.toDomainManga()!!) - getManga.await(id!!) - } - manga = result + val id = insertManga.await( + Manga.create().copy( + source = mangaSourceId, + url = mangaUrl + ) + )!! + val newManga = getManga.await(id)!! + updateManga.awaitUpdateFromSource(newManga, source.getMangaDetails(newManga.toMangaInfo()), false) + manga = getManga.await(id)!! } return LoadedMangaSource(source, manga, this) } - data class LoadedMangaSource(val source: Source, val manga: DomainManga?, val reference: MergedMangaReference) + data class LoadedMangaSource(val source: Source, val manga: Manga?, val reference: MergedMangaReference) override val lang = "all" override val supportsLatest = false diff --git a/app/src/main/java/exh/GalleryAdder.kt b/app/src/main/java/exh/GalleryAdder.kt index 0313eedfd..1d5ae965b 100755 --- a/app/src/main/java/exh/GalleryAdder.kt +++ b/app/src/main/java/exh/GalleryAdder.kt @@ -11,8 +11,6 @@ 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 @@ -122,20 +120,18 @@ class GalleryAdder( // Use manga in DB if possible, otherwise, make a new manga var manga = getManga.await(cleanedMangaUrl, source.id) ?: 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()!!) + insertManga.await( + Manga.create().copy( + source = source.id, + url = cleanedMangaUrl + ) + ) getManga.await(cleanedMangaUrl, source.id)!! } // Fetch and copy details val newManga = source.getMangaDetails(manga.toMangaInfo()) - updateManga.awaitUpdateFromSource(manga, newManga, false, Injekt.get()) + updateManga.awaitUpdateFromSource(manga, newManga, false) manga = getManga.await(manga.id)!! if (fav) {