Minor daily update
parent
32afa26be5
commit
b71a0ac3cf
@ -1,13 +0,0 @@
|
|||||||
package org.koitharu.kotatsu.parsers.site.mangareader.en
|
|
||||||
|
|
||||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
|
||||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
|
||||||
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
|
|
||||||
|
|
||||||
@MangaSourceParser("FLAMESCANS", "FlameScans", "en")
|
|
||||||
internal class FlameScans(context: MangaLoaderContext) :
|
|
||||||
MangaReaderParser(context, MangaSource.FLAMESCANS, "flamescans.org", pageSize = 20, searchPageSize = 20) {
|
|
||||||
override val listUrl = "/series"
|
|
||||||
override val datePattern = "MMM d, yyyy"
|
|
||||||
}
|
|
||||||
@ -1,93 +0,0 @@
|
|||||||
package org.koitharu.kotatsu.parsers.site.mangareader.en
|
|
||||||
|
|
||||||
import org.jsoup.nodes.Document
|
|
||||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
|
||||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
|
||||||
import org.koitharu.kotatsu.parsers.model.Manga
|
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaChapter
|
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaState
|
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaTag
|
|
||||||
import org.koitharu.kotatsu.parsers.model.SortOrder
|
|
||||||
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
|
|
||||||
import org.koitharu.kotatsu.parsers.util.domain
|
|
||||||
import org.koitharu.kotatsu.parsers.util.mapNotNullToSet
|
|
||||||
import org.koitharu.kotatsu.parsers.util.oneOrThrowIfMany
|
|
||||||
import org.koitharu.kotatsu.parsers.util.parseHtml
|
|
||||||
import java.util.EnumSet
|
|
||||||
|
|
||||||
@MangaSourceParser("REALMSCANS", "RealmScans", "en")
|
|
||||||
internal class RealmScans(context: MangaLoaderContext) :
|
|
||||||
MangaReaderParser(context, MangaSource.REALMSCANS, "realmscans.to", pageSize = 52, searchPageSize = 50) {
|
|
||||||
|
|
||||||
override val listUrl = "/series"
|
|
||||||
override val datePattern = "dd MMM yyyy"
|
|
||||||
|
|
||||||
override val sortOrders: Set<SortOrder>
|
|
||||||
get() = EnumSet.of(SortOrder.NEWEST)
|
|
||||||
|
|
||||||
override suspend fun getListPage(
|
|
||||||
page: Int,
|
|
||||||
query: String?,
|
|
||||||
tags: Set<MangaTag>?,
|
|
||||||
sortOrder: SortOrder,
|
|
||||||
): List<Manga> {
|
|
||||||
if (!query.isNullOrEmpty()) {
|
|
||||||
return emptyList() // to do
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!tags.isNullOrEmpty()) {
|
|
||||||
if (page > 1) {
|
|
||||||
return emptyList()
|
|
||||||
}
|
|
||||||
val tag = tags.oneOrThrowIfMany()
|
|
||||||
val url = buildString {
|
|
||||||
append("https://")
|
|
||||||
append(domain)
|
|
||||||
append("genre/")
|
|
||||||
append(tag?.key.orEmpty())
|
|
||||||
}
|
|
||||||
return parseMangaList(webClient.httpGet(url).parseHtml())
|
|
||||||
}
|
|
||||||
|
|
||||||
if (page > 1) {
|
|
||||||
return emptyList()
|
|
||||||
}
|
|
||||||
val url = buildString {
|
|
||||||
append("https://")
|
|
||||||
append(domain)
|
|
||||||
append(listUrl)
|
|
||||||
}
|
|
||||||
|
|
||||||
return parseMangaList(webClient.httpGet(url).parseHtml())
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun parseInfo(docs: Document, manga: Manga, chapters: List<MangaChapter>): Manga {
|
|
||||||
val tagMap = getOrCreateTagMap()
|
|
||||||
val selectTag = docs.select(".wd-full .mgen > a")
|
|
||||||
val tags = selectTag.mapNotNullToSet { tagMap[it.text()] }
|
|
||||||
val mangaState = docs.selectFirst(".bs-status")?.let {
|
|
||||||
when (it.text().lowercase()) {
|
|
||||||
"ongoing" -> MangaState.ONGOING
|
|
||||||
"completed" -> MangaState.FINISHED
|
|
||||||
else -> null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
val author = docs.selectFirst(".tsinfo div:contains(Author)")?.lastElementChild()?.text()
|
|
||||||
val nsfw = docs.selectFirst(".restrictcontainer") != null
|
|
||||||
|| docs.selectFirst(".info-right .alr") != null
|
|
||||||
|| docs.selectFirst(".postbody .alr") != null
|
|
||||||
|
|
||||||
// Description in markdown renders it unattractive and unclear on the synopsis
|
|
||||||
// val desc = docs.selectFirstOrThrow("script:containsData(var description)").data().substringAfter("var description = \"").substringBefore("\";")
|
|
||||||
|
|
||||||
return manga.copy(
|
|
||||||
description = null,
|
|
||||||
state = mangaState,
|
|
||||||
author = author,
|
|
||||||
isNsfw = manga.isNsfw || nsfw,
|
|
||||||
tags = tags,
|
|
||||||
chapters = chapters,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue