diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt index 0e1517f0..f9368228 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt @@ -582,8 +582,8 @@ object SoraExtractor : SoraStream() { callback.invoke( ExtractorLink( - "Filmxy $size ($server)", - "Filmxy $size ($server)", + "Filmxy", + "Filmxy $server [$size]", link ?: return@map, "$filmxyAPI/", getQualityFromName(quality) @@ -1791,6 +1791,7 @@ object SoraExtractor : SoraStream() { ?.attr("onclick") ?.substringAfter("('")?.substringBefore("')") + delay(1000) val unPacker = app.get( iframe ?: return, @@ -2710,13 +2711,13 @@ object SoraExtractor : SoraStream() { } - //TODO add subtitle suspend fun invokeWatchOnline( imdbId: String? = null, title: String? = null, year: Int? = null, season: Int? = null, episode: Int? = null, + subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit, ) { val slug = title.createSlug() @@ -2742,19 +2743,33 @@ object SoraExtractor : SoraStream() { "$watchOnlineAPI/api/v1/security/episode-access?id=$episodeId" } - app.get(videoUrl, referer = url) - .parsedSafe()?.streams?.mapKeys { source -> - callback.invoke( - ExtractorLink( - "WatchOnline", - "WatchOnline", - source.value, - "$watchOnlineAPI/", - getQualityFromName(source.key), - true - ) + val json = app.get(videoUrl, referer = url) + .parsedSafe() + + json?.streams?.mapKeys { source -> + callback.invoke( + ExtractorLink( + "WatchOnline", + "WatchOnline", + source.value, + "$watchOnlineAPI/", + getQualityFromName(source.key), + true ) - } + ) + } + + //TODO find better way + val subtitles = json?.subtitles as ArrayList> + + subtitles.map { sub -> + subtitleCallback.invoke( + SubtitleFile( + sub["language"] ?: return@map, + fixUrl(sub["url"] ?: return@map, watchOnlineAPI) + ) + ) + } } @@ -3141,4 +3156,5 @@ data class BiliBiliSourcesResponse( data class WatchOnlineResponse( @JsonProperty("streams") val streams: HashMap? = null, + @JsonProperty("subtitles") val subtitles: Any? = null, ) \ No newline at end of file diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt index fb7a0595..b070da1b 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt @@ -796,6 +796,7 @@ open class SoraStream : TmdbProvider() { res.airedYear ?: res.year, res.season, res.episode, + subtitleCallback, callback ) }, diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt b/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt index 86de35c8..9bb802e2 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt @@ -230,6 +230,7 @@ class SoraStreamLite : SoraStream() { res.airedYear ?: res.year, res.season, res.episode, + subtitleCallback, callback ) },