Recover manga after NotFoundException
parent
cd4317dec5
commit
97de27dfb3
@ -0,0 +1,52 @@
|
|||||||
|
package org.koitharu.kotatsu.explore.domain
|
||||||
|
|
||||||
|
import org.koitharu.kotatsu.core.model.isLocal
|
||||||
|
import org.koitharu.kotatsu.core.parser.MangaDataRepository
|
||||||
|
import org.koitharu.kotatsu.core.parser.MangaRepository
|
||||||
|
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
|
||||||
|
import org.koitharu.kotatsu.parsers.model.Manga
|
||||||
|
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class RecoverMangaUseCase @Inject constructor(
|
||||||
|
private val mangaDataRepository: MangaDataRepository,
|
||||||
|
private val repositoryFactory: MangaRepository.Factory,
|
||||||
|
) {
|
||||||
|
|
||||||
|
suspend operator fun invoke(manga: Manga): Manga? = runCatchingCancellable {
|
||||||
|
if (manga.isLocal) {
|
||||||
|
return@runCatchingCancellable null
|
||||||
|
}
|
||||||
|
val repository = repositoryFactory.create(manga.source)
|
||||||
|
val list = repository.getList(offset = 0, query = manga.title)
|
||||||
|
val newManga = list.find { x -> x.title == manga.title }?.let {
|
||||||
|
repository.getDetails(it)
|
||||||
|
} ?: return@runCatchingCancellable null
|
||||||
|
val merged = merge(manga, newManga)
|
||||||
|
mangaDataRepository.storeManga(merged)
|
||||||
|
merged
|
||||||
|
}.onFailure {
|
||||||
|
it.printStackTraceDebug()
|
||||||
|
}.getOrNull()
|
||||||
|
|
||||||
|
private fun merge(
|
||||||
|
broken: Manga,
|
||||||
|
current: Manga,
|
||||||
|
) = Manga(
|
||||||
|
id = broken.id,
|
||||||
|
title = current.title,
|
||||||
|
altTitle = current.altTitle,
|
||||||
|
url = current.url,
|
||||||
|
publicUrl = current.publicUrl,
|
||||||
|
rating = current.rating,
|
||||||
|
isNsfw = current.isNsfw,
|
||||||
|
coverUrl = current.coverUrl,
|
||||||
|
tags = current.tags,
|
||||||
|
state = current.state,
|
||||||
|
author = current.author,
|
||||||
|
largeCoverUrl = current.largeCoverUrl,
|
||||||
|
description = current.description,
|
||||||
|
chapters = current.chapters,
|
||||||
|
source = current.source,
|
||||||
|
)
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue