From bfdb10d00267f8204c0c29d89da47ddcc4a8e703 Mon Sep 17 00:00:00 2001 From: Draken <131387159+dragonx943@users.noreply.github.com> Date: Wed, 13 Aug 2025 23:50:53 +0700 Subject: [PATCH] =?UTF-8?q?D=C3=A2m=20C=C3=B4=20N=C6=B0=C6=A1ng:=20Fix=20e?= =?UTF-8?q?xclude=20tags,=20CSS=20selectors=20for=20parseMangaList=20(#206?= =?UTF-8?q?4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kotatsu/parsers/site/vi/DamCoNuong.kt | 60 +++++++++++-------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/DamCoNuong.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/DamCoNuong.kt index 8dc6df44e..53ac2cf41 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/DamCoNuong.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/DamCoNuong.kt @@ -75,8 +75,8 @@ internal class DamCoNuong(context: MangaLoaderContext) : filter.states.forEach { append( when (it) { - MangaState.ONGOING -> "2" - MangaState.FINISHED -> "1" + MangaState.ONGOING -> "2," + MangaState.FINISHED -> "1," else -> "2,1" }, ) @@ -93,6 +93,11 @@ internal class DamCoNuong(context: MangaLoaderContext) : append(filter.query.urlEncoded()) } + if (filter.tagsExclude.isNotEmpty()) { + append("&filter[reject_genres]=") + append(filter.tagsExclude.joinTo(this, ",") { it.key }) + } + append("&page=$page") } @@ -101,30 +106,33 @@ internal class DamCoNuong(context: MangaLoaderContext) : } private fun parseMangaList(doc: Document): List { - return doc.select("div.border.rounded-lg.border-gray-300.dark\\:border-dark-blue.bg-white.dark\\:bg-fire-blue.manga-vertical") - .map { element -> - val mainA = element.selectFirstOrThrow("div.relative a") - val href = mainA.attrAsRelativeUrl("href") - val title = element.selectFirst("div.latest-chapter a.text-white.capitalize")?.textOrNull() ?: "No name" - val coverUrl = element.selectFirst("img.rounded-t-lg.cover.lazyload")?.let { img -> - img.attr("data-src").takeUnless { it.isNullOrEmpty() } ?: img.requireSrc() - } - - Manga( - id = generateUid(href), - title = title, - altTitles = emptySet(), - url = href, - publicUrl = href.toAbsoluteUrl(domain), - rating = RATING_UNKNOWN, - contentRating = ContentRating.ADULT, - coverUrl = coverUrl, - tags = emptySet(), - state = null, - authors = emptySet(), - source = source, - ) - } + return doc.select( + "div.border.rounded-xl.border-gray-300.dark\\:border-dark-blue.bg-white.dark\\:bg-fire-blue" + ).map { element -> + val mainA = element.selectFirstOrThrow("div.relative a") + val href = mainA.attrAsRelativeUrl("href") + val title = mainA.selectFirst("div.cover-frame img")?.attr("alt") + ?.takeIf { it.isNotBlank() } + ?: element.selectFirst("div.p-3 h3 a")?.text()?.takeIf { it.isNotBlank() } + ?: "Không có tiêu đề" + val coverUrl = mainA.select("div.cover-frame img").attr("data-src").takeIf { it.isNotBlank() } + ?: mainA.select("div.cover-frame img").attr("src") + + Manga( + id = generateUid(href), + title = title, + altTitles = emptySet(), + url = href, + publicUrl = href.toAbsoluteUrl(domain), + rating = RATING_UNKNOWN, + contentRating = ContentRating.ADULT, + coverUrl = coverUrl, + tags = emptySet(), + state = null, + authors = emptySet(), + source = source, + ) + } } override suspend fun getDetails(manga: Manga): Manga {