Add Constellar Scans (#203)
This commit is contained in:
parent
e0d5742b09
commit
ddb46a88ce
Binary file not shown.
After Width: | Height: | Size: 7.3 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.6 KiB |
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
Binary file not shown.
After Width: | Height: | Size: 37 KiB |
Binary file not shown.
After Width: | Height: | Size: 237 KiB |
@ -0,0 +1,95 @@
|
||||
package eu.kanade.tachiyomi.extension.en.constellarscans
|
||||
|
||||
import android.app.Application
|
||||
import android.content.SharedPreferences
|
||||
import eu.kanade.tachiyomi.lib.randomua.getPrefCustomUA
|
||||
import eu.kanade.tachiyomi.lib.randomua.getPrefUAType
|
||||
import eu.kanade.tachiyomi.lib.randomua.setRandomUserAgent
|
||||
import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia
|
||||
import eu.kanade.tachiyomi.network.interceptor.rateLimit
|
||||
import eu.kanade.tachiyomi.source.model.Page
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import kotlinx.serialization.json.jsonArray
|
||||
import kotlinx.serialization.json.jsonObject
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import okhttp3.CacheControl
|
||||
import okhttp3.Headers
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Document
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class ConstellarScans : MangaThemesia("Constellar Scans", "https://constellarcomic.com", "en") {
|
||||
|
||||
private val preferences: SharedPreferences by lazy {
|
||||
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
|
||||
}
|
||||
|
||||
override val client: OkHttpClient by lazy {
|
||||
network.cloudflareClient.newBuilder()
|
||||
.setRandomUserAgent(
|
||||
preferences.getPrefUAType(),
|
||||
preferences.getPrefCustomUA(),
|
||||
)
|
||||
.connectTimeout(10, TimeUnit.SECONDS)
|
||||
.readTimeout(30, TimeUnit.SECONDS)
|
||||
.rateLimit(1, 1)
|
||||
.build()
|
||||
}
|
||||
|
||||
override fun headersBuilder(): Headers.Builder = Headers.Builder()
|
||||
.add("Referer", "$baseUrl/")
|
||||
.add("Accept-Language", "en-US,en;q=0.9")
|
||||
.add("DNT", "1")
|
||||
.add("Upgrade-Insecure-Requests", "1")
|
||||
|
||||
override val seriesStatusSelector = ".status"
|
||||
|
||||
override fun pageListRequest(chapter: SChapter): Request =
|
||||
super.pageListRequest(chapter).newBuilder()
|
||||
.header(
|
||||
"Accept",
|
||||
"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
|
||||
)
|
||||
.header("Sec-Fetch-Site", "same-origin")
|
||||
.header("Sec-Fetch-Mode", "navigate")
|
||||
.header("Sec-Fetch-Dest", "document")
|
||||
.header("Sec-Fetch-User", "?1")
|
||||
.cacheControl(CacheControl.FORCE_NETWORK)
|
||||
.build()
|
||||
|
||||
override fun pageListParse(document: Document): List<Page> {
|
||||
val html = document.toString()
|
||||
if (!html.contains("ts_rea_der_._run(\"")) {
|
||||
return super.pageListParse(document)
|
||||
}
|
||||
|
||||
val tsReaderRawData = html
|
||||
.substringAfter("ts_rea_der_._run(\"")
|
||||
.substringBefore("\")")
|
||||
.replace(Regex("""\D"""), "")
|
||||
.chunked(4)
|
||||
.map {
|
||||
val tenthsAndOnes = it.chunked(2).map {
|
||||
val num = it.toInt()
|
||||
num / 10 + num % 10
|
||||
}
|
||||
(tenthsAndOnes[0] * 10 + tenthsAndOnes[1] + 32).toChar()
|
||||
}
|
||||
.joinToString("")
|
||||
|
||||
countViews(document)
|
||||
return json.parseToJsonElement(tsReaderRawData).jsonObject["sources"]!!.jsonArray[0].jsonObject["images"]!!.jsonArray.mapIndexed { idx, it ->
|
||||
Page(idx, imageUrl = it.jsonPrimitive.content)
|
||||
}
|
||||
}
|
||||
|
||||
override fun imageRequest(page: Page): Request = super.imageRequest(page).newBuilder()
|
||||
.header("Accept", "image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8")
|
||||
.header("Sec-Fetch-Dest", "image")
|
||||
.header("Sec-Fetch-Mode", "no-cors")
|
||||
.header("Sec-Fetch-Site", "same-origin")
|
||||
.build()
|
||||
}
|
@ -31,6 +31,7 @@ class MangaThemesiaGenerator : ThemeSourceGenerator {
|
||||
SingleLang("BirdManga", "https://birdmanga.com", "en"),
|
||||
SingleLang("Boosei", "https://boosei.net", "id", overrideVersionCode = 2),
|
||||
SingleLang("Cartel de Manhwas", "https://carteldemanhwas.com", "es", overrideVersionCode = 5),
|
||||
SingleLang("Constellar Scans", "https://constellarcomic.com", "en", isNsfw = true, overrideVersionCode = 16),
|
||||
SingleLang("Cosmic Scans", "https://cosmic-scans.com", "en", overrideVersionCode = 2),
|
||||
SingleLang("CosmicScans.id", "https://cosmicscans.id", "id", overrideVersionCode = 3, className = "CosmicScansID"),
|
||||
SingleLang("Cypher Scans", "https://cypherscans.xyz", "en"),
|
||||
|
Loading…
x
Reference in New Issue
Block a user