diff --git a/src/pt/spectralscan/build.gradle b/src/pt/spectralscan/build.gradle index cc6136081..0485d24dc 100644 --- a/src/pt/spectralscan/build.gradle +++ b/src/pt/spectralscan/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'Spectral Scan' extClass = '.SpectralScan' - extVersionCode = 44 + extVersionCode = 45 isNsfw = false } diff --git a/src/pt/spectralscan/src/eu/kanade/tachiyomi/extension/pt/spectralscan/SpectralScan.kt b/src/pt/spectralscan/src/eu/kanade/tachiyomi/extension/pt/spectralscan/SpectralScan.kt index 5ea6933db..b8fec5a5d 100644 --- a/src/pt/spectralscan/src/eu/kanade/tachiyomi/extension/pt/spectralscan/SpectralScan.kt +++ b/src/pt/spectralscan/src/eu/kanade/tachiyomi/extension/pt/spectralscan/SpectralScan.kt @@ -8,9 +8,13 @@ import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.ParsedHttpSource import eu.kanade.tachiyomi.util.asJsoup +import keiyoushi.utils.parseAs import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.MediaType.Companion.toMediaType import okhttp3.Request import okhttp3.Response +import okhttp3.ResponseBody.Companion.toResponseBody +import okio.ByteString.Companion.decodeBase64 import org.jsoup.nodes.Document import org.jsoup.nodes.Element @@ -28,6 +32,19 @@ class SpectralScan : ParsedHttpSource() { override val client = super.client.newBuilder() .rateLimit(2) + .addInterceptor { chain -> + val request = chain.request() + val response = chain.proceed(request) + val url = request.url + if (url.fragment.isNullOrBlank().not() && url.fragment!!.contains("page")) { + val dto = response.parseAs() + val byteString = dto.base64.decodeBase64()!! + return@addInterceptor response.newBuilder() + .body(byteString.toResponseBody(dto.mimeType.toMediaType())) + .build() + } + response + } .build() // ==================== Popular ========================== @@ -121,8 +138,8 @@ class SpectralScan : ParsedHttpSource() { // ==================== Page ========================== override fun pageListParse(document: Document): List { - return document.select("#chapterPagesContainer img").mapIndexed { index, element -> - Page(index, imageUrl = element.absUrl("src")) + return document.select(".manga-page-container canvas").mapIndexed { index, element -> + Page(index, imageUrl = "${element.absUrl("data-api-src")}#page") } } diff --git a/src/pt/spectralscan/src/eu/kanade/tachiyomi/extension/pt/spectralscan/SelectFilter.kt b/src/pt/spectralscan/src/eu/kanade/tachiyomi/extension/pt/spectralscan/SpectralScanDto.kt similarity index 89% rename from src/pt/spectralscan/src/eu/kanade/tachiyomi/extension/pt/spectralscan/SelectFilter.kt rename to src/pt/spectralscan/src/eu/kanade/tachiyomi/extension/pt/spectralscan/SpectralScanDto.kt index 0f2d035dd..411986617 100644 --- a/src/pt/spectralscan/src/eu/kanade/tachiyomi/extension/pt/spectralscan/SelectFilter.kt +++ b/src/pt/spectralscan/src/eu/kanade/tachiyomi/extension/pt/spectralscan/SpectralScanDto.kt @@ -1,12 +1,22 @@ package eu.kanade.tachiyomi.extension.pt.spectralscan import eu.kanade.tachiyomi.source.model.Filter +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable class SelectFilter(displayName: String = "", val parameter: String = "", private val vals: Array>, state: Int = 0) : Filter.Select(displayName, vals.map { it.first }.toTypedArray(), state) { fun selected() = vals[state].second } +@Serializable +class ImageSrc( + @SerialName("image_data") + val base64: String, + @SerialName("mime_type") + val mimeType: String, +) + val sortList = arrayOf( "Mais Recentes" to "latest", "Mais Populares" to "popular",