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("BirdManga", "https://birdmanga.com", "en"),
|
||||||
SingleLang("Boosei", "https://boosei.net", "id", overrideVersionCode = 2),
|
SingleLang("Boosei", "https://boosei.net", "id", overrideVersionCode = 2),
|
||||||
SingleLang("Cartel de Manhwas", "https://carteldemanhwas.com", "es", overrideVersionCode = 5),
|
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("Cosmic Scans", "https://cosmic-scans.com", "en", overrideVersionCode = 2),
|
||||||
SingleLang("CosmicScans.id", "https://cosmicscans.id", "id", overrideVersionCode = 3, className = "CosmicScansID"),
|
SingleLang("CosmicScans.id", "https://cosmicscans.id", "id", overrideVersionCode = 3, className = "CosmicScansID"),
|
||||||
SingleLang("Cypher Scans", "https://cypherscans.xyz", "en"),
|
SingleLang("Cypher Scans", "https://cypherscans.xyz", "en"),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user