Skip to content

Commit eef1dda

Browse files
authored
Add Constellar Scans (keiyoushi#203)
1 parent 981f248 commit eef1dda

File tree

8 files changed

+96
-0
lines changed

8 files changed

+96
-0
lines changed
7.29 KB
Loading
3.62 KB
Loading
11.6 KB
Loading
23.3 KB
Loading
36.9 KB
Loading
237 KB
Loading
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package eu.kanade.tachiyomi.extension.en.constellarscans
2+
3+
import android.app.Application
4+
import android.content.SharedPreferences
5+
import eu.kanade.tachiyomi.lib.randomua.getPrefCustomUA
6+
import eu.kanade.tachiyomi.lib.randomua.getPrefUAType
7+
import eu.kanade.tachiyomi.lib.randomua.setRandomUserAgent
8+
import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia
9+
import eu.kanade.tachiyomi.network.interceptor.rateLimit
10+
import eu.kanade.tachiyomi.source.model.Page
11+
import eu.kanade.tachiyomi.source.model.SChapter
12+
import kotlinx.serialization.json.jsonArray
13+
import kotlinx.serialization.json.jsonObject
14+
import kotlinx.serialization.json.jsonPrimitive
15+
import okhttp3.CacheControl
16+
import okhttp3.Headers
17+
import okhttp3.OkHttpClient
18+
import okhttp3.Request
19+
import org.jsoup.nodes.Document
20+
import uy.kohesive.injekt.Injekt
21+
import uy.kohesive.injekt.api.get
22+
import java.util.concurrent.TimeUnit
23+
24+
class ConstellarScans : MangaThemesia("Constellar Scans", "https://constellarcomic.com", "en") {
25+
26+
private val preferences: SharedPreferences by lazy {
27+
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
28+
}
29+
30+
override val client: OkHttpClient by lazy {
31+
network.cloudflareClient.newBuilder()
32+
.setRandomUserAgent(
33+
preferences.getPrefUAType(),
34+
preferences.getPrefCustomUA(),
35+
)
36+
.connectTimeout(10, TimeUnit.SECONDS)
37+
.readTimeout(30, TimeUnit.SECONDS)
38+
.rateLimit(1, 1)
39+
.build()
40+
}
41+
42+
override fun headersBuilder(): Headers.Builder = Headers.Builder()
43+
.add("Referer", "$baseUrl/")
44+
.add("Accept-Language", "en-US,en;q=0.9")
45+
.add("DNT", "1")
46+
.add("Upgrade-Insecure-Requests", "1")
47+
48+
override val seriesStatusSelector = ".status"
49+
50+
override fun pageListRequest(chapter: SChapter): Request =
51+
super.pageListRequest(chapter).newBuilder()
52+
.header(
53+
"Accept",
54+
"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",
55+
)
56+
.header("Sec-Fetch-Site", "same-origin")
57+
.header("Sec-Fetch-Mode", "navigate")
58+
.header("Sec-Fetch-Dest", "document")
59+
.header("Sec-Fetch-User", "?1")
60+
.cacheControl(CacheControl.FORCE_NETWORK)
61+
.build()
62+
63+
override fun pageListParse(document: Document): List<Page> {
64+
val html = document.toString()
65+
if (!html.contains("ts_rea_der_._run(\"")) {
66+
return super.pageListParse(document)
67+
}
68+
69+
val tsReaderRawData = html
70+
.substringAfter("ts_rea_der_._run(\"")
71+
.substringBefore("\")")
72+
.replace(Regex("""\D"""), "")
73+
.chunked(4)
74+
.map {
75+
val tenthsAndOnes = it.chunked(2).map {
76+
val num = it.toInt()
77+
num / 10 + num % 10
78+
}
79+
(tenthsAndOnes[0] * 10 + tenthsAndOnes[1] + 32).toChar()
80+
}
81+
.joinToString("")
82+
83+
countViews(document)
84+
return json.parseToJsonElement(tsReaderRawData).jsonObject["sources"]!!.jsonArray[0].jsonObject["images"]!!.jsonArray.mapIndexed { idx, it ->
85+
Page(idx, imageUrl = it.jsonPrimitive.content)
86+
}
87+
}
88+
89+
override fun imageRequest(page: Page): Request = super.imageRequest(page).newBuilder()
90+
.header("Accept", "image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8")
91+
.header("Sec-Fetch-Dest", "image")
92+
.header("Sec-Fetch-Mode", "no-cors")
93+
.header("Sec-Fetch-Site", "same-origin")
94+
.build()
95+
}

multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class MangaThemesiaGenerator : ThemeSourceGenerator {
3131
SingleLang("BirdManga", "https://birdmanga.com", "en"),
3232
SingleLang("Boosei", "https://boosei.net", "id", overrideVersionCode = 2),
3333
SingleLang("Cartel de Manhwas", "https://carteldemanhwas.com", "es", overrideVersionCode = 5),
34+
SingleLang("Constellar Scans", "https://constellarcomic.com", "en", isNsfw = true, overrideVersionCode = 16),
3435
SingleLang("Cosmic Scans", "https://cosmic-scans.com", "en", overrideVersionCode = 2),
3536
SingleLang("CosmicScans.id", "https://cosmicscans.id", "id", overrideVersionCode = 3, className = "CosmicScansID"),
3637
SingleLang("Cypher Scans", "https://cypherscans.xyz", "en"),

0 commit comments

Comments
 (0)