FreakComic: update selectors

AwkwardPeak7 2 years ago committed by Koitharu
parent cd0b3cd1dc
commit fb387dbcd9

@ -47,8 +47,8 @@ internal abstract class MangaReaderParser(
protected open val datePattern = "MMMM d, yyyy" protected open val datePattern = "MMMM d, yyyy"
protected open val isNetShieldProtected = false protected open val isNetShieldProtected = false
private var tagCache: ArrayMap<String, MangaTag>? = null protected var tagCache: ArrayMap<String, MangaTag>? = null
private val mutex = Mutex() protected val mutex = Mutex()
override suspend fun getListPage(page: Int, filter: MangaListFilter?): List<Manga> { override suspend fun getListPage(page: Int, filter: MangaListFilter?): List<Manga> {
val url = buildString { val url = buildString {
@ -166,6 +166,8 @@ internal abstract class MangaReaderParser(
return parseInfo(docs, manga, chapters) return parseInfo(docs, manga, chapters)
} }
protected open val detailsDescriptionSelector = "div.entry-content"
open suspend fun parseInfo(docs: Document, manga: Manga, chapters: List<MangaChapter>): Manga { open suspend fun parseInfo(docs: Document, manga: Manga, chapters: List<MangaChapter>): Manga {
/// set if is table /// set if is table
val tableMode = val tableMode =
@ -243,7 +245,7 @@ internal abstract class MangaReaderParser(
|| docs.selectFirst(".postbody .alr") != null || docs.selectFirst(".postbody .alr") != null
return manga.copy( return manga.copy(
description = docs.selectFirst("div.entry-content")?.text(), description = docs.selectFirst(detailsDescriptionSelector)?.text(),
state = mangaState, state = mangaState,
author = author, author = author,
isNsfw = manga.isNsfw || nsfw, isNsfw = manga.isNsfw || nsfw,
@ -320,7 +322,7 @@ internal abstract class MangaReaderParser(
return getOrCreateTagMap().values.toSet() return getOrCreateTagMap().values.toSet()
} }
protected suspend fun getOrCreateTagMap(): Map<String, MangaTag> = mutex.withLock { protected open suspend fun getOrCreateTagMap(): Map<String, MangaTag> = mutex.withLock {
tagCache?.let { return@withLock it } tagCache?.let { return@withLock it }
val tagMap = ArrayMap<String, MangaTag>() val tagMap = ArrayMap<String, MangaTag>()
val url = listUrl.toAbsoluteUrl(domain) val url = listUrl.toAbsoluteUrl(domain)

@ -1,12 +1,45 @@
package org.koitharu.kotatsu.parsers.site.mangareader.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource 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.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") @MangaSourceParser("FREAKCOMIC", "FreakComic", "en")
internal class FreakComic(context: MangaLoaderContext) : internal class FreakComic(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.FREAKCOMIC, "freakcomic.com", pageSize = 20, searchPageSize = 10) { MangaReaderParser(context, MangaSource.FREAKCOMIC, "freakcomic.com", pageSize = 20, searchPageSize = 10) {
override val isTagsExclusionSupported = false 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<String, MangaTag> = mutex.withLock {
tagCache?.let { return@withLock it }
val tagMap = ArrayMap<String, MangaTag>()
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
}
} }

Loading…
Cancel
Save