Skip to content

Commit

Permalink
Update StreamWishExtractor (#187)
Browse files Browse the repository at this point in the history
  • Loading branch information
Dark25 authored Jan 13, 2025
1 parent 7d907f3 commit 4dee191
Showing 1 changed file with 25 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -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" }

Expand All @@ -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 {
Expand All @@ -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)
}

0 comments on commit 4dee191

Please sign in to comment.