fix(src/es): JkAnime fixes #504
1 changed files with 25 additions and 1 deletions
|
@ -1,15 +1,20 @@
|
||||||
package eu.kanade.tachiyomi.lib.streamwishextractor
|
package eu.kanade.tachiyomi.lib.streamwishextractor
|
||||||
|
|
||||||
import dev.datlag.jsunpacker.JsUnpacker
|
import dev.datlag.jsunpacker.JsUnpacker
|
||||||
|
import eu.kanade.tachiyomi.animesource.model.Track
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.lib.playlistutils.PlaylistUtils
|
import eu.kanade.tachiyomi.lib.playlistutils.PlaylistUtils
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
import kotlinx.serialization.SerializationException
|
||||||
|
import kotlinx.serialization.json.Json
|
||||||
import okhttp3.Headers
|
import okhttp3.Headers
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
|
|
||||||
class StreamWishExtractor(private val client: OkHttpClient, private val headers: Headers) {
|
class StreamWishExtractor(private val client: OkHttpClient, private val headers: Headers) {
|
||||||
private val playlistUtils by lazy { PlaylistUtils(client, 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" }
|
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)
|
?.takeIf(String::isNotBlank)
|
||||||
?: return emptyList()
|
?: 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 {
|
private fun getEmbedUrl(url: String): String {
|
||||||
|
@ -43,4 +50,21 @@ class StreamWishExtractor(private val client: OkHttpClient, private val headers:
|
||||||
url
|
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)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue