fix(src/es): JkAnime fixes (#504)

* JkAnime fixes

Closes #355

* Update StreamWishExtractor.kt
This commit is contained in:
imper1aldev 2025-01-09 05:34:54 -06:00 committed by GitHub
parent 48f1bac534
commit f9650081e1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 101 additions and 27 deletions

View file

@ -1,15 +1,20 @@
package eu.kanade.tachiyomi.lib.streamwishextractor
import dev.datlag.jsunpacker.JsUnpacker
import eu.kanade.tachiyomi.animesource.model.Track
import eu.kanade.tachiyomi.animesource.model.Video
import eu.kanade.tachiyomi.lib.playlistutils.PlaylistUtils
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.util.asJsoup
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerializationException
import kotlinx.serialization.json.Json
import okhttp3.Headers
import okhttp3.OkHttpClient
class StreamWishExtractor(private val client: OkHttpClient, private val headers: Headers) {
private val playlistUtils by lazy { PlaylistUtils(client, headers) }
private val json = Json { isLenient = true; ignoreUnknownKeys = true }
fun videosFromUrl(url: String, prefix: String) = videosFromUrl(url) { "$prefix - $it" }
@ -32,7 +37,9 @@ class StreamWishExtractor(private val client: OkHttpClient, private val headers:
?.takeIf(String::isNotBlank)
?: return emptyList()
return playlistUtils.extractFromHls(masterUrl, url, videoNameGen = videoNameGen)
val subtitleList = extractSubtitles(scriptBody)
return playlistUtils.extractFromHls(masterUrl, url, videoNameGen = videoNameGen, subtitleList = subtitleList)
}
private fun getEmbedUrl(url: String): String {
@ -43,4 +50,21 @@ class StreamWishExtractor(private val client: OkHttpClient, private val headers:
url
}
}
private fun extractSubtitles(script: String): List<Track> {
return try {
val subtitleStr = script
.substringAfter("tracks")
.substringAfter("[")
.substringBefore("]")
json.decodeFromString<List<TrackDto>>("[$subtitleStr]")
.filter { it.kind.equals("captions", true) }
.map { Track(it.file, it.label ?: "") }
} catch (e: SerializationException) {
emptyList()
}
}
@Serializable
private data class TrackDto(val file: String, val kind: String, val label: String? = null)
}