SpectralScan: Fix no pages found (#9450)

* Fix no pages found

* Bump version
This commit is contained in:
Chopper 2025-06-27 15:01:37 -03:00 committed by Draff
parent 717d58a63c
commit 791d203f42
Signed by: Draff
GPG Key ID: E8A89F3211677653
3 changed files with 30 additions and 3 deletions

View File

@ -1,7 +1,7 @@
ext { ext {
extName = 'Spectral Scan' extName = 'Spectral Scan'
extClass = '.SpectralScan' extClass = '.SpectralScan'
extVersionCode = 44 extVersionCode = 45
isNsfw = false isNsfw = false
} }

View File

@ -8,9 +8,13 @@ import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.ParsedHttpSource import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import eu.kanade.tachiyomi.util.asJsoup import eu.kanade.tachiyomi.util.asJsoup
import keiyoushi.utils.parseAs
import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.Request import okhttp3.Request
import okhttp3.Response import okhttp3.Response
import okhttp3.ResponseBody.Companion.toResponseBody
import okio.ByteString.Companion.decodeBase64
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
@ -28,6 +32,19 @@ class SpectralScan : ParsedHttpSource() {
override val client = super.client.newBuilder() override val client = super.client.newBuilder()
.rateLimit(2) .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<ImageSrc>()
val byteString = dto.base64.decodeBase64()!!
return@addInterceptor response.newBuilder()
.body(byteString.toResponseBody(dto.mimeType.toMediaType()))
.build()
}
response
}
.build() .build()
// ==================== Popular ========================== // ==================== Popular ==========================
@ -121,8 +138,8 @@ class SpectralScan : ParsedHttpSource() {
// ==================== Page ========================== // ==================== Page ==========================
override fun pageListParse(document: Document): List<Page> { override fun pageListParse(document: Document): List<Page> {
return document.select("#chapterPagesContainer img").mapIndexed { index, element -> return document.select(".manga-page-container canvas").mapIndexed { index, element ->
Page(index, imageUrl = element.absUrl("src")) Page(index, imageUrl = "${element.absUrl("data-api-src")}#page")
} }
} }

View File

@ -1,12 +1,22 @@
package eu.kanade.tachiyomi.extension.pt.spectralscan package eu.kanade.tachiyomi.extension.pt.spectralscan
import eu.kanade.tachiyomi.source.model.Filter 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<Pair<String, String>>, state: Int = 0) : class SelectFilter(displayName: String = "", val parameter: String = "", private val vals: Array<Pair<String, String>>, state: Int = 0) :
Filter.Select<String>(displayName, vals.map { it.first }.toTypedArray(), state) { Filter.Select<String>(displayName, vals.map { it.first }.toTypedArray(), state) {
fun selected() = vals[state].second fun selected() = vals[state].second
} }
@Serializable
class ImageSrc(
@SerialName("image_data")
val base64: String,
@SerialName("mime_type")
val mimeType: String,
)
val sortList = arrayOf( val sortList = arrayOf(
"Mais Recentes" to "latest", "Mais Recentes" to "latest",
"Mais Populares" to "popular", "Mais Populares" to "popular",