From d7c2ecbebdd7a6a50b100084258d21356ca2a070 Mon Sep 17 00:00:00 2001 From: hexated Date: Sun, 8 Oct 2023 08:32:01 +0700 Subject: [PATCH] fixed #306 --- SoraStream/build.gradle.kts | 2 +- .../main/kotlin/com/hexated/SoraExtractor.kt | 50 +++++++++++++++++++ .../src/main/kotlin/com/hexated/SoraParser.kt | 22 ++++++++ .../src/main/kotlin/com/hexated/SoraStream.kt | 20 ++++++-- .../main/kotlin/com/hexated/SoraStreamLite.kt | 13 ++++- 5 files changed, 101 insertions(+), 6 deletions(-) diff --git a/SoraStream/build.gradle.kts b/SoraStream/build.gradle.kts index b4b784d7..e4b66320 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 = 179 +version = 180 android { defaultConfig { diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt index 04bf21bb..540ff735 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt @@ -2159,6 +2159,56 @@ object SoraExtractor : SoraStream() { } + suspend fun invokeShowflix( + title: String? = null, + year: Int? = null, + season: Int? = null, + episode: Int? = null, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit, + ) { + val where = if(season==null) "movieName" else "seriesName" + val classes = if(season==null) "movies" else "series" + val body = """ + { + "where": { + "$where": { + "${'$'}regex": "$title", + "${'$'}options": "i" + } + }, + "order": "-updatedAt", + "_method": "GET", + "_ApplicationId": "SHOWFLIXAPPID", + "_JavaScriptKey": "SHOWFLIXMASTERKEY", + "_ClientVersion": "js3.4.1", + "_InstallationId": "6d19fd87-a0e8-47b2-a3c0-48c16add928b" + } + """.trimIndent().toRequestBody(RequestBodyTypes.JSON.toMediaTypeOrNull()) + + val data = app.post("https://parse.showflix.tk/parse/classes/$classes", requestBody = body).text + val iframes = if(season==null) { + val result = tryParseJson(data)?.resultsMovies?.find { it.movieName.equals("$title ($year)", true) } + listOf( + "https://streamwish.to/e/${result?.streamwish}", + "https://filelions.to/v/${result?.filelions}.html", + "https://streamruby.com/e/${result?.streamruby}.html", + ) + } else { + val result = tryParseJson(data)?.resultsSeries?.find { it.seriesName.equals(title, true) } + listOf( + result?.streamwish?.get("Season $season")?.get(episode!!), + result?.filelions?.get("Season $season")?.get(episode!!), + result?.streamruby?.get("Season $season")?.get(episode!!), + ) + } + + iframes.apmap { iframe -> + loadExtractor(iframe ?: return@apmap, "$showflixAPI/", subtitleCallback, callback) + } + + } + suspend fun invokeWatchOnline( imdbId: String? = null, title: String? = null, diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt b/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt index 4dae7cd9..ac1ca13d 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt @@ -393,4 +393,26 @@ data class BlackvidSources( data class BlackvidResponses( @JsonProperty("sources") var sources: ArrayList = arrayListOf(), @JsonProperty("subtitles") var subtitles: ArrayList = arrayListOf() +) + +data class ShowflixResultsMovies( + @JsonProperty("movieName") val movieName: String? = null, + @JsonProperty("streamwish") val streamwish: String? = null, + @JsonProperty("filelions") val filelions: String? = null, + @JsonProperty("streamruby") val streamruby: String? = null, +) + +data class ShowflixResultsSeries( + @JsonProperty("seriesName") val seriesName: String? = null, + @JsonProperty("streamwish") val streamwish: HashMap>? = hashMapOf(), + @JsonProperty("filelions") val filelions: HashMap>? = hashMapOf(), + @JsonProperty("streamruby") val streamruby: HashMap>? = hashMapOf(), +) + +data class ShowflixSearchMovies( + @JsonProperty("results") val resultsMovies: ArrayList? = arrayListOf(), +) + +data class ShowflixSearchSeries( + @JsonProperty("results") val resultsSeries: ArrayList? = arrayListOf(), ) \ 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 fd3fbd3d..4ec882f9 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt @@ -43,6 +43,7 @@ import com.hexated.SoraExtractor.invokeNetmovies import com.hexated.SoraExtractor.invokePobmovies import com.hexated.SoraExtractor.invokeGomovies import com.hexated.SoraExtractor.invokePutactor +import com.hexated.SoraExtractor.invokeShowflix import com.hexated.SoraExtractor.invokeTvMovies import com.hexated.SoraExtractor.invokeUhdmovies import com.hexated.SoraExtractor.invokeVegamovies @@ -95,7 +96,7 @@ open class SoraStream : TmdbProvider() { const val crunchyrollAPI = "https://beta-api.crunchyroll.com" const val kissKhAPI = "https://kisskh.co" const val lingAPI = "https://ling-online.net" - const val uhdmoviesAPI = "https://uhdmovies.store" + const val uhdmoviesAPI = "https://uhdmovies.click" const val gMoviesAPI = "https://gdrivemovies.xyz" const val fdMoviesAPI = "https://freedrivemovie.lol" const val m4uhdAPI = "https://ww2.m4ufree.com" @@ -124,12 +125,13 @@ open class SoraStream : TmdbProvider() { const val putactorAPI = "https://putlocker.actor" const val susflixAPI = "https://susflix.tv" const val jump1API = "https://ca.jump1.net" - const val vegaMoviesAPI = "https://vegamovies.im" + const val vegaMoviesAPI = "https://vegamovies.id" const val hdmovies4uAPI = "https://hdmovies4u.name" const val watchflxAPI = "https://watchflx.tv" const val gomoviesAPI = "https://gomovies-online.cam" - const val dotmoviesAPI = "https://dotmovies.today" + const val dotmoviesAPI = "https://dotmovies.monster" const val blackvidAPI = "https://prod.api.blackvid.space" + const val showflixAPI = "https://showflix.online" // INDEX SITE const val dahmerMoviesAPI = "https://edytjedhgmdhm.abfhaqrhbnf.workers.dev" @@ -742,7 +744,17 @@ open class SoraStream : TmdbProvider() { subtitleCallback, callback ) - } + }, + { + if (!res.isAnime) invokeShowflix( + res.title, + res.year, + res.season, + res.episode, + subtitleCallback, + callback + ) + }, ) return true diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt b/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt index 4c423d7c..433fe7f8 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt @@ -28,6 +28,7 @@ import com.hexated.SoraExtractor.invokeMultimovies import com.hexated.SoraExtractor.invokeNetmovies import com.hexated.SoraExtractor.invokeGomovies import com.hexated.SoraExtractor.invokePutactor +import com.hexated.SoraExtractor.invokeShowflix import com.hexated.SoraExtractor.invokeVidSrc import com.hexated.SoraExtractor.invokeVidsrcto import com.hexated.SoraExtractor.invokeWatchOnline @@ -309,7 +310,17 @@ class SoraStreamLite : SoraStream() { subtitleCallback, callback ) - } + }, + { + if (!res.isAnime) invokeShowflix( + res.title, + res.year, + res.season, + res.episode, + subtitleCallback, + callback + ) + }, ) return true