diff --git a/.gitignore b/.gitignore index e5843e14..63a8a581 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ .idea/**/usage.statistics.xml .idea/**/dictionaries .idea/**/shelf +.idea/**/copilot # Generated files .idea/**/contentModel.xml 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 f5eb6af8..560b6dec 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,6 +1,7 @@ package org.koitharu.kotatsu.parsers.site.galleryadults.all 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 @@ -35,9 +36,18 @@ internal class NHentaiParser(context: MangaLoaderContext) : when (filter) { is MangaListFilter.Search -> { - append("/search/?q=pages:>0 ") - append(filter.query.urlEncoded()) - append("&") + // Check if the query is all numbers + val numericQuery = filter.query.trim() + if (numericQuery.matches("\\d+".toRegex())) { + val title = fetchMangaTitle("$this/g/$numericQuery/") + append("/search/?q=pages:>0 ") + append(title) + append("&") + } else { + append("/search/?q=pages:>0 ") + append(filter.query.urlEncoded()) + append("&") + } } is MangaListFilter.Advanced -> { @@ -89,6 +99,31 @@ internal class NHentaiParser(context: MangaLoaderContext) : return parseMangaList(webClient.httpGet(url).parseHtml()) } + private suspend fun fetchMangaTitle(url: String): String { + val doc = webClient.httpGet(url).parseHtml() + return doc.selectFirstOrThrow("h1.title").text().trim() + } + + override fun parseMangaList(doc: Document): List { + return doc.select(selectGallery).map { div -> + val href = div.selectFirstOrThrow(selectGalleryLink).attrAsRelativeUrl("href") + Manga( + id = generateUid(href), + title = div.select(selectGalleryTitle).text().trim(), + altTitle = null, + url = href, + publicUrl = href.toAbsoluteUrl(domain), + rating = RATING_UNKNOWN, + isNsfw = isNsfwSource, + coverUrl = div.selectFirstOrThrow(selectGalleryImg).src().orEmpty(), + tags = emptySet(), + state = null, + author = null, + source = source, + ) + } + } + override suspend fun getPageUrl(page: MangaPage): String { val doc = webClient.httpGet(page.url.toAbsoluteUrl(domain)).parseHtml() val root = doc.body()