From c1d577bdf3388193eae777492006d8772776cbbc Mon Sep 17 00:00:00 2001 From: Koitharu Date: Wed, 16 Oct 2024 13:19:34 +0300 Subject: [PATCH] Update link resolver --- app/build.gradle | 2 +- .../kotatsu/core/parser/MangaLinkResolver.kt | 30 +++++++------------ 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 01b07329a..3d18a9ef2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -82,7 +82,7 @@ afterEvaluate { } } dependencies { - implementation('com.github.KotatsuApp:kotatsu-parsers:1.2.2') { + implementation('com.github.KotatsuApp:kotatsu-parsers:d8cb38a9be') { exclude group: 'org.json', module: 'json' } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/parser/MangaLinkResolver.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/parser/MangaLinkResolver.kt index 54bdced1d..60a4f183b 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/parser/MangaLinkResolver.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/parser/MangaLinkResolver.kt @@ -7,7 +7,7 @@ import org.koitharu.kotatsu.core.model.MangaSource import org.koitharu.kotatsu.core.model.UnknownMangaSource import org.koitharu.kotatsu.core.model.isNsfw import org.koitharu.kotatsu.core.util.ext.ifNullOrEmpty -import org.koitharu.kotatsu.explore.data.MangaSourcesRepository +import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.exception.NotFoundException import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaListFilter @@ -15,21 +15,20 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.util.almostEquals import org.koitharu.kotatsu.parsers.util.levenshteinDistance import org.koitharu.kotatsu.parsers.util.runCatchingCancellable -import org.koitharu.kotatsu.parsers.util.toRelativeUrl import javax.inject.Inject @Reusable class MangaLinkResolver @Inject constructor( private val repositoryFactory: MangaRepository.Factory, - private val sourcesRepository: MangaSourcesRepository, private val dataRepository: MangaDataRepository, + private val context: MangaLoaderContext, ) { suspend fun resolve(uri: Uri): Manga { return if (uri.scheme == "kotatsu" || uri.host == "kotatsu.app") { resolveAppLink(uri) } else { - resolveExternalLink(uri) + resolveExternalLink(uri.toString()) } ?: throw NotFoundException("Cannot resolve link", uri.toString()) } @@ -45,18 +44,11 @@ class MangaLinkResolver @Inject constructor( ) } - private suspend fun resolveExternalLink(uri: Uri): Manga? { - dataRepository.findMangaByPublicUrl(uri.toString())?.let { + private suspend fun resolveExternalLink(uri: String): Manga? { + dataRepository.findMangaByPublicUrl(uri)?.let { return it } - val host = uri.host ?: return null - val repo = sourcesRepository.allMangaSources.asSequence() - .map { source -> - repositoryFactory.create(source) as ParserMangaRepository - }.find { repo -> - host in repo.domains - } ?: return null - return repo.findExact(uri.toString().toRelativeUrl(host), null) + return context.newLinkResolver(uri).getManga() } private suspend fun MangaRepository.findExact(url: String?, title: String?): Manga? { @@ -85,12 +77,10 @@ class MangaLinkResolver @Inject constructor( }.getOrThrow() } - private suspend fun MangaRepository.getDetailsNoCache(manga: Manga): Manga { - return if (this is ParserMangaRepository) { - getDetails(manga, CachePolicy.READ_ONLY) - } else { - getDetails(manga) - } + private suspend fun MangaRepository.getDetailsNoCache(manga: Manga): Manga = if (this is CachingMangaRepository) { + getDetails(manga, CachePolicy.READ_ONLY) + } else { + getDetails(manga) } private fun getSeedManga(source: MangaSource, url: String, title: String?) = Manga(