From 69e7efe6d1c66857b7698a80c9dbabf33639d59b Mon Sep 17 00:00:00 2001 From: Koitharu Date: Mon, 18 Mar 2024 11:05:47 +0200 Subject: [PATCH] NHentai: configurable User-Agent --- .../kotatsu/parsers/site/en/ReaperComics.kt | 6 ++++-- .../site/galleryadults/all/NHentaiParser.kt | 21 ++++++++++++++++--- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/ReaperComics.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/ReaperComics.kt index 3b1c2d020..a3fa90907 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/ReaperComics.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/ReaperComics.kt @@ -25,6 +25,7 @@ import kotlin.random.Random private const val TOO_MANY_REQUESTS = 429 private const val MAX_RETRY_COUNT = 5 +private val JSON_MEDIA_TYPE get() = "application/json; charset=utf-8".toMediaType() @MangaSourceParser("REAPERCOMICS", "ReaperComics", "en") internal class ReaperComics(context: MangaLoaderContext) : @@ -153,8 +154,9 @@ internal class ReaperComics(context: MangaLoaderContext) : override suspend fun getAvailableTags(): Set = emptySet() - companion object { - private val JSON_MEDIA_TYPE = "application/json; charset=utf-8".toMediaType() + override fun onCreateConfig(keys: MutableCollection>) { + super.onCreateConfig(keys) + keys.add(userAgentKey) } private fun chapterListNextPageSelector(): String = "button[wire:click*=nextPage]" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/galleryadults/all/NHentaiParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/galleryadults/all/NHentaiParser.kt index 560b6decc..c0ba3f1b9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/galleryadults/all/NHentaiParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/galleryadults/all/NHentaiParser.kt @@ -1,11 +1,14 @@ package org.koitharu.kotatsu.parsers.site.galleryadults.all +import okhttp3.Headers import org.jsoup.internal.StringUtil import org.jsoup.nodes.Document import org.jsoup.nodes.Element import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.* +import org.koitharu.kotatsu.parsers.network.UserAgents import org.koitharu.kotatsu.parsers.site.galleryadults.GalleryAdultsParser import org.koitharu.kotatsu.parsers.util.* import java.util.* @@ -28,6 +31,13 @@ internal class NHentaiParser(context: MangaLoaderContext) : override val isMultipleTagsSupported = true + private val userAgentKey = ConfigKey.UserAgent(UserAgents.DEFAULT_BROWSER) + + override val headers: Headers + get() = super.headers.newBuilder() + .set("User-Agent", config[userAgentKey]) + .build() + override suspend fun getListPage(page: Int, filter: MangaListFilter?): List { val url = buildString { @@ -67,7 +77,7 @@ internal class NHentaiParser(context: MangaLoaderContext) : if (filter.sortOrder == SortOrder.POPULARITY) { append("popular") } - if(page > 1){ + if (page > 1) { append("?") } } else if (filter.locale != null) { @@ -77,7 +87,7 @@ internal class NHentaiParser(context: MangaLoaderContext) : if (filter.sortOrder == SortOrder.POPULARITY) { append("popular") } - if(page > 1){ + if (page > 1) { append("?") } } else { @@ -91,7 +101,7 @@ internal class NHentaiParser(context: MangaLoaderContext) : null -> append("/?") } - if(page > 1){ + if (page > 1) { append("page=") append(page.toString()) } @@ -146,6 +156,11 @@ internal class NHentaiParser(context: MangaLoaderContext) : Locale.CHINESE, ) + override fun onCreateConfig(keys: MutableCollection>) { + super.onCreateConfig(keys) + keys.add(userAgentKey) + } + private fun buildQuery(tags: Collection, language: Locale?): String { val joiner = StringUtil.StringJoiner(" ") tags.forEach { tag ->