From fb387dbcd9eac9514795bac92a26648e647c9711 Mon Sep 17 00:00:00 2001 From: AwkwardPeak7 <48650614+AwkwardPeak7@users.noreply.github.com> Date: Sat, 13 Apr 2024 17:13:54 +0500 Subject: [PATCH] FreakComic: update selectors --- .../site/mangareader/MangaReaderParser.kt | 10 +++--- .../parsers/site/mangareader/en/FreakComic.kt | 33 +++++++++++++++++++ 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt index e94c76c9c..67442cf22 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt @@ -47,8 +47,8 @@ internal abstract class MangaReaderParser( protected open val datePattern = "MMMM d, yyyy" protected open val isNetShieldProtected = false - private var tagCache: ArrayMap? = null - private val mutex = Mutex() + protected var tagCache: ArrayMap? = null + protected val mutex = Mutex() override suspend fun getListPage(page: Int, filter: MangaListFilter?): List { val url = buildString { @@ -166,6 +166,8 @@ internal abstract class MangaReaderParser( return parseInfo(docs, manga, chapters) } + protected open val detailsDescriptionSelector = "div.entry-content" + open suspend fun parseInfo(docs: Document, manga: Manga, chapters: List): Manga { /// set if is table val tableMode = @@ -243,7 +245,7 @@ internal abstract class MangaReaderParser( || docs.selectFirst(".postbody .alr") != null return manga.copy( - description = docs.selectFirst("div.entry-content")?.text(), + description = docs.selectFirst(detailsDescriptionSelector)?.text(), state = mangaState, author = author, isNsfw = manga.isNsfw || nsfw, @@ -320,7 +322,7 @@ internal abstract class MangaReaderParser( return getOrCreateTagMap().values.toSet() } - protected suspend fun getOrCreateTagMap(): Map = mutex.withLock { + protected open suspend fun getOrCreateTagMap(): Map = mutex.withLock { tagCache?.let { return@withLock it } val tagMap = ArrayMap() val url = listUrl.toAbsoluteUrl(domain) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FreakComic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FreakComic.kt index 87f19038f..8020b4d80 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FreakComic.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FreakComic.kt @@ -1,12 +1,45 @@ package org.koitharu.kotatsu.parsers.site.mangareader.en +import androidx.collection.ArrayMap +import kotlinx.coroutines.sync.withLock +import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaTag import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.toTitleCase @MangaSourceParser("FREAKCOMIC", "FreakComic", "en") internal class FreakComic(context: MangaLoaderContext) : MangaReaderParser(context, MangaSource.FREAKCOMIC, "freakcomic.com", pageSize = 20, searchPageSize = 10) { override val isTagsExclusionSupported = false + override val selectMangaList = ".listupd .lastest-serie" + override val selectMangaListImg = "img" + override val selectChapter = ".chapter-li a:not(:has(svg))" + override val detailsDescriptionSelector = "#summary" + + override suspend fun getOrCreateTagMap(): Map = mutex.withLock { + tagCache?.let { return@withLock it } + val tagMap = ArrayMap() + val url = "https://$domain/genres/" + val tagElements = webClient.httpGet(url).parseHtml().select("ul.genre-list > li.genre-item > a") + for (el in tagElements) { + if (el.text().isEmpty()) continue + tagMap[el.text()] = MangaTag( + title = el.text().toTitleCase(), + key = el.attrAsAbsoluteUrl("href") + .toHttpUrlOrNull() + ?.queryParameter("genre") + ?.takeUnless { it.isEmpty() } + ?: continue, + source = source, + ) + } + tagCache = tagMap + return@withLock tagMap + } }