From afa6956717bfc965ecdc3a573bb7f20f6f70f49f Mon Sep 17 00:00:00 2001 From: hexated Date: Thu, 22 Dec 2022 14:01:10 +0700 Subject: [PATCH] [Sora] removed Dub from Crunchy --- SoraStream/build.gradle.kts | 2 +- .../main/kotlin/com/hexated/SoraExtractor.kt | 47 ++++++++++--------- .../src/main/kotlin/com/hexated/SoraStream.kt | 2 + 3 files changed, 27 insertions(+), 24 deletions(-) diff --git a/SoraStream/build.gradle.kts b/SoraStream/build.gradle.kts index 06eaf774..bab61cf2 100644 --- a/SoraStream/build.gradle.kts +++ b/SoraStream/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 61 +version = 62 cloudstream { diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt index 37d82857..efeb2ab6 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt @@ -1461,44 +1461,45 @@ object SoraExtractor : SoraStream() { suspend fun invokeCrunchyroll( title: String? = null, epsTitle: String? = null, + season: Int? = null, + episode: Int? = null, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { val id = app.get("$consumetCrunchyrollAPI/$title") .parsedSafe()?.results?.find { it.title.equals( - title, true + title, + true ) && it.type.equals("series") } ?: return val detail = app.get("$consumetCrunchyrollAPI/info?id=${id.id}&mediaType=series").text val episodeId = tryParseJson(detail)?.episodes?.filter { - it.title.equals(epsTitle, true) && (it.type == "Subbed" || it.type == "English Dub") - }?.map { it.id to it.type } ?: return + (it.number == episode || it.title.equals(epsTitle, true)) && it.type == "Subbed" + }?.map { it.id }?.getOrNull(season?.minus(1) ?: 0) ?: return - episodeId.apmap { (id, type) -> - val json = app.get("$consumetCrunchyrollAPI/watch?episodeId=$id&format=srt") - .parsedSafe() - - json?.sources?.map source@{ source -> - M3u8Helper.generateM3u8( - "Crunchyroll [$type]", - source.url ?: return@source null, - "", - ).forEach(callback) - } - - json?.subtitles?.map subtitle@{ sub -> - subtitleCallback.invoke( - SubtitleFile( - sub.lang?.replace(Regex("\\[\\S+]"), "")?.trim() ?: "", - sub.url ?: return@subtitle null - ) - ) - } + val json = app.get("$consumetCrunchyrollAPI/watch?episodeId=$episodeId&format=srt") + .parsedSafe() + json?.sources?.map source@{ source -> + M3u8Helper.generateM3u8( + "Crunchyroll", + source.url ?: return@source null, + "", + ).forEach(callback) } + json?.subtitles?.map subtitle@{ sub -> + subtitleCallback.invoke( + SubtitleFile( + sub.lang?.replace(Regex("\\[\\S+]"), "")?.trim() ?: "", + sub.url ?: return@subtitle null + ) + ) + } + + } } diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt index c9ad0b11..e1ae6536 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt @@ -351,6 +351,8 @@ open class SoraStream : TmdbProvider() { if (res.season != null && res.isAnime) invokeCrunchyroll( res.title, res.epsTitle, + res.season, + res.episode, subtitleCallback, callback )