From 6cd29603ac3e5c11d58c717c9dd18ff53c23a899 Mon Sep 17 00:00:00 2001 From: Draken <131387159+dragonx943@users.noreply.github.com> Date: Mon, 9 Jun 2025 20:49:33 +0700 Subject: [PATCH] [CBHentai] Fix duplicated tags (#1873) --- .../kotatsu/parsers/site/madara/MadaraParser.kt | 16 +++++++++------- .../kotatsu/parsers/site/madara/vi/HentaiCube.kt | 11 ++++++++++- .../kotatsu/parsers/site/vi/MimiHentai.kt | 2 +- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt index d538aad4..44144c45 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt @@ -534,6 +534,14 @@ internal abstract class MadaraParser( protected open val selectAlt = ".post-content_item:contains(Alt) .summary-content, .post-content_item:contains(Nomes alternativos: ) .summary-content" + protected open fun createMangaTag(a: Element): MangaTag? { + return MangaTag( + key = a.attr("href").removeSuffix("/").substringAfterLast('/'), + title = a.text().toTitleCase(), + source = source, + ) + } + override suspend fun getDetails(manga: Manga): Manga = coroutineScope { val fullUrl = manga.url.toAbsoluteUrl(domain) val doc = webClient.httpGet(fullUrl).parseHtml() @@ -566,13 +574,7 @@ internal abstract class MadaraParser( title = doc.selectFirst("h1")?.textOrNull() ?: manga.title, url = href, publicUrl = href.toAbsoluteUrl(domain), - tags = doc.body().select(selectGenre).mapToSet { a -> - MangaTag( - key = a.attr("href").removeSuffix("/").substringAfterLast('/'), - title = a.text().toTitleCase(), - source = source, - ) - }, + tags = doc.body().select(selectGenre).mapToSet { a -> createMangaTag(a) }.filterNotNull().toSet(), description = desc, altTitles = setOfNotNull(alt), state = state, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt index eb08b0d4..24291f8b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.parsers.site.madara.vi +import org.jsoup.nodes.Element import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.exception.ParseException @@ -23,11 +24,19 @@ internal class HentaiCube(context: MangaLoaderContext) : override val datePattern = "dd/MM/yyyy" override val postReq = true override val postDataReq = "action=manga_views&manga=" - + override suspend fun getFilterOptions() = MangaListFilterOptions( availableTags = fetchTags(), ) + override fun createMangaTag(a: Element): MangaTag? { + return MangaTag( + title = a.text().replace(Regex("\\(\\d+\\)"), ""), + key = a.attr("href").substringAfter("/theloai/").removeSuffix("/"), + source = source, + ) + } + override suspend fun getPages(chapter: MangaChapter): List { val fullUrl = chapter.url.toAbsoluteUrl(domain) val doc = webClient.httpGet(fullUrl).parseHtml() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/MimiHentai.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/MimiHentai.kt index f60e5da2..a64ff923 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/MimiHentai.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/MimiHentai.kt @@ -39,7 +39,7 @@ internal class MimiHentai(context: MangaLoaderContext) : SortOrder.ALPHABETICAL, SortOrder.POPULARITY, SortOrder.POPULARITY_TODAY, - SortOrder.POPULARITY_WEEK, + SortOrder.POPULARITY_WEEK, SortOrder.POPULARITY_MONTH, SortOrder.RATING, )