Fix gallery adder
This commit is contained in:
parent
6954c299b5
commit
9a10f1300a
@ -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<DomainChapter>, editScanlators: Boolean, dedupe: Boolean): List<DomainChapter> {
|
||||
suspend fun transformMergedChapters(mangaId: Long, chapterList: List<Chapter>, editScanlators: Boolean, dedupe: Boolean): List<Chapter> {
|
||||
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<Chapter> {
|
||||
return getChaptersAsBlocking(mangaId, editScanlators, dedupe).map(DomainChapter::toDbChapter)
|
||||
fun getChaptersAsBlockingAsDbChapter(mangaId: Long, editScanlators: Boolean = false, dedupe: Boolean = true): List<DbChapter> {
|
||||
return getChaptersAsBlocking(mangaId, editScanlators, dedupe).map(Chapter::toDbChapter)
|
||||
}
|
||||
|
||||
fun getChaptersAsBlocking(mangaId: Long, editScanlators: Boolean = false, dedupe: Boolean = true): List<DomainChapter> {
|
||||
fun getChaptersAsBlocking(mangaId: Long, editScanlators: Boolean = false, dedupe: Boolean = true): List<Chapter> {
|
||||
return runBlocking { getChapters(mangaId, editScanlators, dedupe) }
|
||||
}
|
||||
|
||||
suspend fun getChapters(mangaId: Long, editScanlators: Boolean = false, dedupe: Boolean = true): List<DomainChapter> {
|
||||
suspend fun getChapters(mangaId: Long, editScanlators: Boolean = false, dedupe: Boolean = true): List<Chapter> {
|
||||
return transformMergedChapters(mangaId, getMergedChaptersByMangaId.await(mangaId), editScanlators, dedupe)
|
||||
}
|
||||
|
||||
private fun dedupeChapterList(mangaReferences: List<MergedMangaReference>, chapterList: List<DomainChapter>): List<DomainChapter> {
|
||||
private fun dedupeChapterList(mangaReferences: List<MergedMangaReference>, chapterList: List<Chapter>): List<Chapter> {
|
||||
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<DomainChapter>): Long? {
|
||||
private fun findSourceWithMostChapters(chapterList: List<Chapter>): Long? {
|
||||
return chapterList.groupBy { it.mangaId }.maxByOrNull { it.value.size }?.key
|
||||
}
|
||||
|
||||
private fun findSourceWithHighestChapterNumber(chapterList: List<DomainChapter>): Long? {
|
||||
private fun findSourceWithHighestChapterNumber(chapterList: List<Chapter>): Long? {
|
||||
return chapterList.maxByOrNull { it.chapterNumber }?.mangaId
|
||||
}
|
||||
|
||||
suspend fun fetchChaptersForMergedManga(manga: DomainManga, downloadChapters: Boolean = true, editScanlators: Boolean = false, dedupe: Boolean = true): List<Chapter> {
|
||||
suspend fun fetchChaptersForMergedManga(manga: Manga, downloadChapters: Boolean = true, editScanlators: Boolean = false, dedupe: Boolean = true): List<Chapter> {
|
||||
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<DomainChapter>, List<DomainChapter>> {
|
||||
suspend fun fetchChaptersAndSync(manga: Manga, downloadChapters: Boolean = true): Pair<List<Chapter>, List<Chapter>> {
|
||||
val syncChaptersWithSource = Injekt.get<SyncChaptersWithSource>()
|
||||
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
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user