[Otaku Sanctuary] Move back to main endpoint for fetching chapter pages (#15062)
* [Otaku Sanctuary] Move back to main endpoint for fetching chapter pages * tfw you write code at 2AM
This commit is contained in:
parent
c578c2663b
commit
589f46de0b
|
@ -9,8 +9,8 @@ import eu.kanade.tachiyomi.source.model.SChapter
|
|||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import kotlinx.serialization.decodeFromString
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlinx.serialization.json.jsonArray
|
||||
import kotlinx.serialization.json.jsonObject
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import okhttp3.FormBody
|
||||
|
@ -92,9 +92,9 @@ open class OtakuSanctuary(
|
|||
return MangasPage(parseMangaCollection(collection), collection.size >= 24)
|
||||
}
|
||||
|
||||
override fun latestUpdatesRequest(page: Int) = throw Exception("Unused")
|
||||
override fun latestUpdatesRequest(page: Int) = throw UnsupportedOperationException("Not used")
|
||||
|
||||
override fun latestUpdatesParse(response: Response) = throw Exception("Unused")
|
||||
override fun latestUpdatesParse(response: Response) = throw UnsupportedOperationException("Not used")
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request =
|
||||
GET(
|
||||
|
@ -181,8 +181,45 @@ open class OtakuSanctuary(
|
|||
val vi = document.select("#dataip").attr("value")
|
||||
val numericId = document.select("#inpit-c").attr("data-chapter-id")
|
||||
|
||||
val rawPagesArray = try {
|
||||
val data = json.parseToJsonElement(
|
||||
val data = json.parseToJsonElement(
|
||||
client.newCall(
|
||||
POST(
|
||||
"$baseUrl/Manga/UpdateView",
|
||||
headers,
|
||||
FormBody.Builder().add("chapId", numericId).build()
|
||||
)
|
||||
).execute().body!!.string()
|
||||
).jsonObject
|
||||
|
||||
if (data["view"] != null) {
|
||||
val usingservers = mutableListOf(0, 0, 0)
|
||||
|
||||
val isSuccess = data["isSuccess"]!!.jsonArray.map { it.jsonPrimitive.content }
|
||||
return json.parseToJsonElement(data["view"]!!.jsonPrimitive.content).jsonArray.mapIndexed { idx, it ->
|
||||
var url = helper.processUrl(it.jsonPrimitive.content).removePrefix("image:")
|
||||
val indexServer = getIndexLessServer(usingservers)
|
||||
|
||||
if (url.contains("ImageSyncing") || url.contains("FetchService") || url.contains("otakusan.net_") && (url.contains("extendContent") || url.contains("/Extend")) && !url.contains("fetcher.otakusan.net") && !url.contains("image3.otakusan.net") && !url.contains("image3.otakuscan.net") && !url.contains("[GDP]") && !url.contains("[GDT]")) {
|
||||
if (url.startsWith("/api/Value/")) {
|
||||
val serverUrl = if (helper.otakusanLang() == "us" && indexServer == 1) {
|
||||
US_SERVERS[0]
|
||||
} else {
|
||||
SERVERS[indexServer]
|
||||
}
|
||||
url = "$serverUrl$url"
|
||||
}
|
||||
|
||||
if (url.contains("otakusan.net_") && !url.contains("fetcher.otakuscan.net")) {
|
||||
url += "#${isSuccess[idx]}"
|
||||
}
|
||||
|
||||
usingservers[indexServer] += 1
|
||||
}
|
||||
|
||||
Page(idx, imageUrl = url)
|
||||
}
|
||||
} else {
|
||||
val alternate = json.parseToJsonElement(
|
||||
client.newCall(
|
||||
POST(
|
||||
"$baseUrl/Manga/CheckingAlternate",
|
||||
|
@ -190,25 +227,46 @@ open class OtakuSanctuary(
|
|||
FormBody.Builder().add("chapId", numericId).build()
|
||||
)
|
||||
).execute().body!!.string()
|
||||
)
|
||||
|
||||
data.jsonObject["Content"]!!.jsonPrimitive.content
|
||||
} catch (_: Exception) {
|
||||
val data = json.parseToJsonElement(
|
||||
client.newCall(
|
||||
POST(
|
||||
"$baseUrl/Manga/UpdateView",
|
||||
headers,
|
||||
FormBody.Builder().add("chapId", numericId).build()
|
||||
)
|
||||
).execute().body!!.string()
|
||||
)
|
||||
|
||||
data.jsonObject["view"]!!.jsonPrimitive.content
|
||||
}
|
||||
|
||||
return json.decodeFromString<List<String>>(rawPagesArray).mapIndexed { idx, it ->
|
||||
Page(idx, imageUrl = helper.processUrl(it, vi))
|
||||
).jsonObject
|
||||
val content = alternate["Content"]?.jsonPrimitive?.content
|
||||
?: throw Exception("No pages found")
|
||||
return json.parseToJsonElement(content).jsonArray.mapIndexed { idx, it ->
|
||||
Page(idx, imageUrl = helper.processUrl(it.jsonPrimitive.content, vi))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun imageRequest(page: Page): Request {
|
||||
val request = super.imageRequest(page)
|
||||
val url = request.url.toString()
|
||||
|
||||
val newRequest = request.newBuilder()
|
||||
|
||||
if (url.contains("ImageSyncing") || url.contains("FetchService") || url.contains("otakusan.net_") && (url.contains("extendContent") || url.contains("/Extend")) && !url.contains("fetcher.otakusan.net") && !url.contains("image3.otakusan.net") && !url.contains("image3.otakuscan.net") && !url.contains("[GDP]") && !url.contains("[GDT]")) {
|
||||
if (url.contains("otakusan.net_") && !url.contains("fetcher.otakuscan.net")) {
|
||||
newRequest.header("page-sign", request.url.fragment!!)
|
||||
} else {
|
||||
newRequest.header("page-lang", "vn-lang")
|
||||
}
|
||||
}
|
||||
|
||||
return newRequest.build()
|
||||
}
|
||||
|
||||
private fun getIndexLessServer(usingservers: List<Int>): Int {
|
||||
var minIndex = usingservers[0]
|
||||
var minNumber = usingservers[0]
|
||||
for (i in 1 until 3) {
|
||||
if (usingservers[i] <= minNumber) {
|
||||
minIndex = i
|
||||
minNumber = usingservers[i]
|
||||
}
|
||||
}
|
||||
return minIndex
|
||||
}
|
||||
|
||||
companion object {
|
||||
val SERVERS = listOf("https://image2.otakuscan.net", "https://shopotaku.net", "https://image.otakuscan.net")
|
||||
val US_SERVERS = listOf("https://image3.shopotaku.net", "https://image2.otakuscan.net")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ class OtakuSanctuaryGenerator : ThemeSourceGenerator {
|
|||
|
||||
override val themeClass = "OtakuSanctuary"
|
||||
|
||||
override val baseVersionCode: Int = 1
|
||||
override val baseVersionCode: Int = 2
|
||||
|
||||
override val sources = listOf(
|
||||
MultiLang(
|
||||
|
|
|
@ -10,7 +10,7 @@ class OtakuSanctuaryHelper(private val lang: String) {
|
|||
else -> lang
|
||||
}
|
||||
|
||||
fun processUrl(url: String, vi: String): String {
|
||||
fun processUrl(url: String, vi: String = ""): String {
|
||||
var url = url.replace("_h_", "http")
|
||||
.replace("_e_", "/extendContent/Manga")
|
||||
.replace("_r_", "/extendContent/MangaRaw")
|
||||
|
@ -31,7 +31,7 @@ class OtakuSanctuaryHelper(private val lang: String) {
|
|||
url
|
||||
}
|
||||
"[IS1]" -> {
|
||||
var url = url.replace("[IS1]", "https://imagepi.otakuscan.net/")
|
||||
val url = url.replace("[IS1]", "https://imagepi.otakuscan.net/")
|
||||
if (url.contains("vi") && url.contains("otakusan.net_")) {
|
||||
url
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue