[NhentaiWorld] Fixes

master
Koitharu 1 year ago
parent 63dc67b6fd
commit e83636edc0
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

@ -49,44 +49,37 @@ internal class NhentaiWorld(context: MangaLoaderContext) :
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val urlBuilder = urlBuilder()
append("/genre/") .addPathSegment("genre")
if (filter.tags.isEmpty()) { filter.tags.oneOrThrowIfMany()?.also {
append("all") urlBuilder.addPathSegment(it.key)
} else { } ?: urlBuilder.addPathSegment("all")
append(filter.tags.first().key) urlBuilder.addQueryParameter(
} "sort",
when (order) {
SortOrder.UPDATED -> "recent-update"
SortOrder.POPULARITY -> "view"
else -> "recent-update"
},
)
filter.query?.nullIfEmpty()?.let {
urlBuilder.addQueryParameter("search", it)
}
append("?sort=") filter.states.oneOrThrowIfMany()?.let {
append( urlBuilder.addQueryParameter(
when (order) { "status",
SortOrder.UPDATED -> "recent-update" when (it) {
SortOrder.POPULARITY -> "view" MangaState.ONGOING -> "progress"
else -> "recent-update" MangaState.FINISHED -> "completed"
else -> ""
}, },
) )
if (!filter.query.isNullOrEmpty()) {
append("&search=")
append(filter.query.urlEncoded())
}
if (filter.states.isNotEmpty()) {
append("&status=")
append(
when (filter.states.first()) {
MangaState.ONGOING -> "progress"
MangaState.FINISHED -> "completed"
else -> ""
},
)
}
append("&page=")
append(page)
} }
val doc = webClient.httpGet(url.toAbsoluteUrl(domain)).parseHtml() urlBuilder.addQueryParameter("page", page.toString())
val doc = webClient.httpGet(urlBuilder.build()).parseHtml()
return doc.select("div.relative.mb-1.h-full.max-h-\\[375px\\]").map { div -> return doc.select("div.relative.mb-1.h-full.max-h-\\[375px\\]").map { div ->
val img = div.selectFirst("img.hover\\:scale-105.transition-all.w-full.h-full") val img = div.selectFirst("img.hover\\:scale-105.transition-all.w-full.h-full")
val a = div.selectFirstOrThrow("a") val a = div.selectFirstOrThrow("a")
@ -96,7 +89,7 @@ internal class NhentaiWorld(context: MangaLoaderContext) :
val href = a.attrAsRelativeUrl("href") val href = a.attrAsRelativeUrl("href")
Manga( Manga(
id = generateUid(url), id = generateUid(href),
title = title, title = title,
altTitles = emptySet(), altTitles = emptySet(),
url = href, url = href,
@ -211,7 +204,12 @@ internal class NhentaiWorld(context: MangaLoaderContext) :
} }
private suspend fun fetchTags(): Set<MangaTag> { private suspend fun fetchTags(): Set<MangaTag> {
val doc = webClient.httpGet("$domain/genre/all").parseHtml() val doc = webClient.httpGet(
urlBuilder()
.addPathSegment("genre")
.addPathSegment("all")
.build(),
).parseHtml()
val tagItems = doc.select("div.genre-list a") val tagItems = doc.select("div.genre-list a")
return tagItems.mapNotNullToSet { item -> return tagItems.mapNotNullToSet { item ->
val title = item.text().toTitleCase(sourceLocale) val title = item.text().toTitleCase(sourceLocale)

Loading…
Cancel
Save