From 3b907e3d5a384ae3e7bbb12c47b7818b14e29c1f Mon Sep 17 00:00:00 2001 From: hexated Date: Fri, 21 Jul 2023 16:55:03 +0700 Subject: [PATCH] sora: fixed Smashy and Fdmovies --- SoraStream/build.gradle.kts | 2 +- .../main/kotlin/com/hexated/SoraExtractor.kt | 11 ++++++- .../src/main/kotlin/com/hexated/SoraUtils.kt | 33 +++++++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/SoraStream/build.gradle.kts b/SoraStream/build.gradle.kts index c770eba3..f035b3fd 100644 --- a/SoraStream/build.gradle.kts +++ b/SoraStream/build.gradle.kts @@ -1,7 +1,7 @@ import org.jetbrains.kotlin.konan.properties.Properties // use an integer for version numbers -version = 144 +version = 145 android { defaultConfig { diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt index 933475ca..ad127d88 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt @@ -1491,7 +1491,13 @@ object SoraExtractor : SoraStream() { extractGdflix(gdBotLink ?: return@apmap null) } type.contains("oiya") -> { - extractOiya(fdLink ?: return@apmap null, qualities) + val oiyaLink = extractOiya(fdLink ?: return@apmap null, qualities) + if(oiyaLink?.contains("gdtot") == true) { + val gdBotLink = extractGdbot(oiyaLink) + extractGdflix(gdBotLink ?: return@apmap null) + } else { + oiyaLink + } } else -> { return@apmap null @@ -2041,6 +2047,9 @@ object SoraExtractor : SoraStream() { it.first.contains("/rip") -> { invokeSmashyRip(it.second, it.first, subtitleCallback, callback) } + it.first.contains("/im.php") && !isAnime -> { + invokeSmashyIm(it.second, it.first, subtitleCallback, callback) + } else -> return@apmap } } diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt b/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt index 524470c6..38416433 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt @@ -563,6 +563,39 @@ suspend fun invokeSmashyRip( } +suspend fun invokeSmashyIm( + name: String, + url: String, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit, +) { + val script = + app.get(url).document.selectFirst("script:containsData(player =)")?.data() ?: return + + val sources = + Regex("['\"]?file['\"]?:\\s*\"([^\"]+)").find(script)?.groupValues?.get(1) ?: return + val subtitles = + Regex("['\"]?subtitle['\"]?:\\s*\"([^\"]+)").find(script)?.groupValues?.get(1) ?: return + + M3u8Helper.generateM3u8( + name, + sources, + "" + ).forEach(callback) + + subtitles.split(",").map { sub -> + val lang = Regex("\\[(.*?)]").find(sub)?.groupValues?.getOrNull(1)?.trim() + val trimmedSubLink = sub.removePrefix("[$lang]").trim().substringAfter("?url=") + subtitleCallback.invoke( + SubtitleFile( + lang.takeIf { !it.isNullOrEmpty() } ?: return@map, + trimmedSubLink + ) + ) + } + +} + suspend fun getDumpIdAndType(title: String?, year: Int?, season: Int?): Pair { val res = tryParseJson( queryApi(