update FMReader (#5016)
* remove ReadComicOnlineOrg * add HeroScan * fix manga description showing wrong thing for some site
This commit is contained in:
parent
8f606df520
commit
75cb78ddcc
|
@ -5,7 +5,7 @@ ext {
|
||||||
extName = 'FMReader (multiple aggregators)'
|
extName = 'FMReader (multiple aggregators)'
|
||||||
pkgNameSuffix = 'all.fmreader'
|
pkgNameSuffix = 'all.fmreader'
|
||||||
extClass = '.FMReaderFactory'
|
extClass = '.FMReaderFactory'
|
||||||
extVersionCode = 21
|
extVersionCode = 22
|
||||||
libVersion = '1.2'
|
libVersion = '1.2'
|
||||||
containsNsfw = true
|
containsNsfw = true
|
||||||
}
|
}
|
||||||
|
|
|
@ -161,7 +161,7 @@ abstract class FMReader(
|
||||||
author = infoElement.select("li a.btn-info").text()
|
author = infoElement.select("li a.btn-info").text()
|
||||||
genre = infoElement.select("li a.btn-danger").joinToString { it.text() }
|
genre = infoElement.select("li a.btn-danger").joinToString { it.text() }
|
||||||
status = parseStatus(infoElement.select("li a.btn-success").first()?.text())
|
status = parseStatus(infoElement.select("li a.btn-success").first()?.text())
|
||||||
description = document.select("div.row ~ div.row p").text().trim()
|
description = document.select("div.detail .content, div.row ~ div.row:has(h3:first-child) p").text().trim()
|
||||||
thumbnail_url = infoElement.select("img.thumbnail").imgAttr()
|
thumbnail_url = infoElement.select("img.thumbnail").imgAttr()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,6 @@ class FMReaderFactory : SourceFactory {
|
||||||
override fun createSources(): List<Source> = listOf(
|
override fun createSources(): List<Source> = listOf(
|
||||||
LHTranslation(),
|
LHTranslation(),
|
||||||
KissLove(),
|
KissLove(),
|
||||||
ReadComicOnlineOrg(),
|
|
||||||
HanaScan(),
|
HanaScan(),
|
||||||
RawLH(),
|
RawLH(),
|
||||||
Manhwa18(),
|
Manhwa18(),
|
||||||
|
@ -36,7 +35,8 @@ class FMReaderFactory : SourceFactory {
|
||||||
SayTruyen(),
|
SayTruyen(),
|
||||||
EpikManga(),
|
EpikManga(),
|
||||||
ManhuaScan(),
|
ManhuaScan(),
|
||||||
ManhwaSmut()
|
ManhwaSmut(),
|
||||||
|
HeroScan()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,48 +49,28 @@ class KissLove : FMReader("KissLove", "https://kisslove.net", "ja") {
|
||||||
override fun pageListParse(document: Document): List<Page> = base64PageListParse(document)
|
override fun pageListParse(document: Document): List<Page> = base64PageListParse(document)
|
||||||
}
|
}
|
||||||
|
|
||||||
class ReadComicOnlineOrg : FMReader("ReadComicOnline.org", "https://readcomiconline.org", "en") {
|
|
||||||
override val client: OkHttpClient = network.cloudflareClient.newBuilder()
|
|
||||||
.addInterceptor { requestIntercept(it) }
|
|
||||||
.build()
|
|
||||||
|
|
||||||
private fun requestIntercept(chain: Interceptor.Chain): Response {
|
|
||||||
val request = chain.request()
|
|
||||||
val response = chain.proceed(request)
|
|
||||||
|
|
||||||
return if (response.headers("set-cookie").isNotEmpty()) {
|
|
||||||
val body = FormBody.Builder()
|
|
||||||
.add("dqh_firewall", URLEncoder.encode(request.url().toString().substringAfter(baseUrl), "utf-8"))
|
|
||||||
.build()
|
|
||||||
val cookie = response.headers("set-cookie")[0].split(" ")
|
|
||||||
.filter { it.contains("__cfduid") || it.contains("PHPSESSID") }
|
|
||||||
.joinToString("; ") { it.substringBefore(";") }
|
|
||||||
headers.newBuilder().add("Cookie", cookie).build()
|
|
||||||
client.newCall(POST(request.url().toString(), headers, body)).execute()
|
|
||||||
} else {
|
|
||||||
response
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override val requestPath = "comic-list.html"
|
|
||||||
override fun pageListParse(document: Document): List<Page> {
|
|
||||||
val pages = document.select("div#divImage > select:first-of-type option").mapIndexed { i, imgPage ->
|
|
||||||
Page(i, imgPage.attr("value"))
|
|
||||||
}
|
|
||||||
return pages.dropLast(1) // last page is a comments page
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun imageUrlRequest(page: Page): Request = GET(baseUrl + page.url, headers)
|
|
||||||
override fun imageUrlParse(document: Document): String = document.select("img.chapter-img").attr("abs:src").trim()
|
|
||||||
override fun getGenreList() = getComicsGenreList()
|
|
||||||
}
|
|
||||||
|
|
||||||
class HanaScan : FMReader("HanaScan (RawQQ)", "https://hanascan.com", "ja") {
|
class HanaScan : FMReader("HanaScan (RawQQ)", "https://hanascan.com", "ja") {
|
||||||
override fun popularMangaNextPageSelector() = "div.col-md-8 button"
|
override fun popularMangaNextPageSelector() = "div.col-md-8 button"
|
||||||
// Referer needs to be chapter URL
|
// Referer needs to be chapter URL
|
||||||
override fun imageRequest(page: Page): Request = GET(page.imageUrl!!, headersBuilder().set("Referer", page.url).build())
|
override fun imageRequest(page: Page): Request = GET(page.imageUrl!!, headersBuilder().set("Referer", page.url).build())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class HeroScan : FMReader("HeroScan", "https://heroscan.com", "en") {
|
||||||
|
override val client: OkHttpClient = super.client.newBuilder()
|
||||||
|
.addInterceptor { chain ->
|
||||||
|
val originalRequest = chain.request()
|
||||||
|
chain.proceed(originalRequest).let { response ->
|
||||||
|
if (response.code() == 403 && originalRequest.url().host().contains("b-cdn")) {
|
||||||
|
response.close()
|
||||||
|
chain.proceed(originalRequest.newBuilder().removeHeader("Referer").addHeader("Referer", "https://isekaiscan.com").build())
|
||||||
|
} else {
|
||||||
|
response
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
|
||||||
class RawLH : FMReader("RawLH", "https://loveheaven.net", "ja") {
|
class RawLH : FMReader("RawLH", "https://loveheaven.net", "ja") {
|
||||||
override fun popularMangaNextPageSelector() = "div.col-md-8 button"
|
override fun popularMangaNextPageSelector() = "div.col-md-8 button"
|
||||||
override fun pageListParse(document: Document): List<Page> = base64PageListParse(document)
|
override fun pageListParse(document: Document): List<Page> = base64PageListParse(document)
|
||||||
|
|
Loading…
Reference in New Issue