FreakComic: update selectors
This commit is contained in:
@@ -47,8 +47,8 @@ internal abstract class MangaReaderParser(
|
||||
protected open val datePattern = "MMMM d, yyyy"
|
||||
protected open val isNetShieldProtected = false
|
||||
|
||||
private var tagCache: ArrayMap<String, MangaTag>? = null
|
||||
private val mutex = Mutex()
|
||||
protected var tagCache: ArrayMap<String, MangaTag>? = null
|
||||
protected val mutex = Mutex()
|
||||
|
||||
override suspend fun getListPage(page: Int, filter: MangaListFilter?): List<Manga> {
|
||||
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<MangaChapter>): 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<String, MangaTag> = mutex.withLock {
|
||||
protected open suspend fun getOrCreateTagMap(): Map<String, MangaTag> = mutex.withLock {
|
||||
tagCache?.let { return@withLock it }
|
||||
val tagMap = ArrayMap<String, MangaTag>()
|
||||
val url = listUrl.toAbsoluteUrl(domain)
|
||||
|
||||
@@ -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<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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user