From 3ea7e92e64b7fe07390bb85e0230c10c613f2064 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Tue, 29 Mar 2022 18:53:29 +0300 Subject: [PATCH] [MangaOwl] Add nsfw flag support --- .../kotatsu/parsers/site/MangaOwlParser.kt | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaOwlParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaOwlParser.kt index 7dc78705b..785a79973 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaOwlParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaOwlParser.kt @@ -19,6 +19,8 @@ internal class MangaOwlParser(override val context: MangaLoaderContext) : MangaP SortOrder.UPDATED, ) + private val regexNsfw = Regex("(yaoi)|(yuri)|(smut)|(mature)|(adult)", RegexOption.IGNORE_CASE) + override suspend fun getList( offset: Int, query: String?, @@ -82,22 +84,29 @@ internal class MangaOwlParser(override val context: MangaLoaderContext) : MangaP doc.getElementsByTag("script").find { trRegex.find(it.data()) != null } ?: parseFailed("Oops, tr not found") val tr = trRegex.find(trElement.data())!!.groups[1]!!.value val s = context.encodeBase64(getDomain().toByteArray()) + var isNsfw = manga.isNsfw + val parsedTags = info.select("div.col-xs-12.col-md-8.single-right-grid-right > p > a[href*=genres]") + .mapNotNullToSet { + val a = it.selectFirst("a") ?: return@mapNotNullToSet null + val name = a.text() + if (!isNsfw && isNsfwGenre(name)) { + isNsfw = true + } + MangaTag( + title = name.toTitleCase(), + key = a.attr("href"), + source = source, + ) + } return manga.copy( description = info.selectFirst(".description")?.html(), largeCoverUrl = info.select("img").first()?.let { img -> if (img.hasAttr("data-src")) img.attr("abs:data-src") else img.attr("abs:src") }, + isNsfw = isNsfw, author = info.selectFirst("p.fexi_header_para a.author_link")?.text(), state = parseStatus(info.select("p.fexi_header_para:contains(status)").first()?.ownText()), - tags = manga.tags + info.select("div.col-xs-12.col-md-8.single-right-grid-right > p > a[href*=genres]") - .mapNotNull { - val a = it.selectFirst("a") ?: return@mapNotNull null - MangaTag( - title = a.text().toTitleCase(), - key = a.attr("href"), - source = source, - ) - }, + tags = manga.tags + parsedTags, chapters = table.select("div.table.table-chapter-list").select("li.list-group-item.chapter_list") .asReversed().mapIndexed { i, li -> val a = li.select("a") @@ -169,4 +178,6 @@ internal class MangaOwlParser(override val context: MangaLoaderContext) : MangaP SortOrder.UPDATED -> "3" else -> "3" } + + private fun isNsfwGenre(name: String): Boolean = regexNsfw.containsMatchIn(name) } \ No newline at end of file