From cbdf11386c3245410541da6ccae4ef0a4109acb9 Mon Sep 17 00:00:00 2001 From: helo Date: Mon, 9 Oct 2023 15:44:32 +0700 Subject: [PATCH] optimize code --- .github/workflows/build.yml | 2 + SoraStream/build.gradle.kts | 3 +- .../main/kotlin/com/hexated/SoraExtractor.kt | 93 +++++++++---------- .../src/main/kotlin/com/hexated/SoraParser.kt | 30 +++--- .../src/main/kotlin/com/hexated/SoraStream.kt | 21 +++-- .../main/kotlin/com/hexated/SoraStreamLite.kt | 36 +++---- .../src/main/kotlin/com/hexated/SoraUtils.kt | 19 ---- 7 files changed, 96 insertions(+), 108 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b81dbfd7..df343b8e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -56,6 +56,7 @@ jobs: ANICHI_APP: ${{ secrets.ANICHI_APP }} PRIMEWIRE_KEY: ${{ secrets.PRIMEWIRE_KEY }} ZSHOW_API: ${{ secrets.ZSHOW_API }} + VATIC_API: ${{ secrets.VATIC_API }} run: | cd $GITHUB_WORKSPACE/src echo SORA_API=$SORA_API >> local.properties @@ -72,6 +73,7 @@ jobs: echo ANICHI_APP=$ANICHI_APP >> local.properties echo PRIMEWIRE_KEY=$PRIMEWIRE_KEY >> local.properties echo ZSHOW_API=$ZSHOW_API >> local.properties + echo VATIC_API=$VATIC_API >> local.properties - name: Build Plugins run: | diff --git a/SoraStream/build.gradle.kts b/SoraStream/build.gradle.kts index e4b66320..905055d0 100644 --- a/SoraStream/build.gradle.kts +++ b/SoraStream/build.gradle.kts @@ -1,13 +1,14 @@ import org.jetbrains.kotlin.konan.properties.Properties // use an integer for version numbers -version = 180 +version = 181 android { defaultConfig { val properties = Properties() properties.load(project.rootProject.file("local.properties").inputStream()) + buildConfigField("String", "VATIC_API", "\"${properties.getProperty("VATIC_API")}\"") buildConfigField("String", "ZSHOW_API", "\"${properties.getProperty("ZSHOW_API")}\"") buildConfigField("String", "SORA_API", "\"${properties.getProperty("SORA_API")}\"") buildConfigField("String", "SORAHE", "\"${properties.getProperty("SORAHE")}\"") diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt index c72b6156..9d674413 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt @@ -34,8 +34,8 @@ object SoraExtractor : SoraStream() { "X-Requested-With" to "XMLHttpRequest" ) - fun Document.getServers(): List { - return this.select("a").map { it.attr("data-id") } + fun Document.getServers(): List> { + return this.select("a").map { it.attr("data-id") to it.text() } } val media = app.get( @@ -83,12 +83,12 @@ object SoraExtractor : SoraStream() { ).document.getServers() } - serversId.apmap { id -> + serversId.apmap { (id, name) -> val iframe = app.get("$gokuAPI/ajax/movie/episode/server/sources/$id", headers = headers) .parsedSafe()?.data?.link ?: return@apmap loadCustomExtractor( - if (iframe.contains("rabbitstream")) "Vidcloud" else "Upcloud", + name, iframe, "$gokuAPI/", subtitleCallback, @@ -2501,49 +2501,6 @@ object SoraExtractor : SoraStream() { } - suspend fun invokeSusflix( - tmdbId: Int? = null, - season: Int? = null, - episode: Int? = null, - subtitleCallback: (SubtitleFile) -> Unit, - callback: (ExtractorLink) -> Unit, - ) { - val url = if (season == null) { - "$susflixAPI/view/movie/$tmdbId" - } else { - "$susflixAPI/view/tv/$tmdbId/$season/$episode" - } - - val res = app.get( - url, cookies = mapOf( - "session" to "eyJfZnJlc2giOmZhbHNlLCJwaG9uZV9udW1iZXIiOiJzdXNoZXg5OCJ9.ZO6CsA.XUs6Y5gna8ExAUX55-myMi1QpYU" - ) - ).text.substringAfter("response = {").substringBefore("};").replace("\'", "\"") - - val sources = tryParseJson("{$res}") - sources?.qualities?.map { source -> - callback.invoke( - ExtractorLink( - "Susflix", - "Susflix", - source.path ?: return@map, - "$susflixAPI/", - getQualityFromName(source.quality) - ) - ) - } - - sources?.srtfiles?.map { sub -> - subtitleCallback.invoke( - SubtitleFile( - sub.caption ?: return@map, - sub.url ?: return@map, - ) - ) - } - - } - suspend fun invokeJump1( tmdbId: Int? = null, tvdbId: Int? = null, @@ -2587,5 +2544,47 @@ object SoraExtractor : SoraStream() { ) } + suspend fun invokeVatic( + tmdbId: Int? = null, + season: Int? = null, + episode: Int? = null, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit, + ) { + val vaticAPI = BuildConfig.VATIC_API + val url = if (season == null) { + "$vaticAPI/api/movie?id=$tmdbId" + } else { + "$vaticAPI/api/tv?id=$tmdbId&s=$season&e=$episode" + } + + val res = app.get( + url + ).parsedSafe() + + res?.qualities?.map { source -> + callback.invoke( + ExtractorLink( + "Vatic", + "Vatic", + source.path ?: return@map, + "$vaticAPI/", + if(source.quality.equals("auto", true)) Qualities.P1080.value else getQualityFromName(source.quality), + INFER_TYPE + ) + ) + } + + res?.srtfiles?.map { sub -> + subtitleCallback.invoke( + SubtitleFile( + sub.caption ?: return@map, + sub.url ?: return@map, + ) + ) + } + + } + } diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt b/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt index ac1ca13d..06d47891 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt @@ -67,21 +67,6 @@ data class KisskhDetail( @JsonProperty("episodes") val episodes: ArrayList? = arrayListOf(), ) -data class SusflixSrtfiles( - @JsonProperty("caption") val caption: String? = null, - @JsonProperty("url") val url: String? = null, -) - -data class SusflixQualities( - @JsonProperty("path") val path: String? = null, - @JsonProperty("quality") val quality: String? = null, -) - -data class SusflixSources( - @JsonProperty("Qualities") val qualities: ArrayList? = arrayListOf(), - @JsonProperty("Srtfiles") val srtfiles: ArrayList? = arrayListOf(), -) - data class KisskhResults( @JsonProperty("id") val id: Int?, @JsonProperty("title") val title: String?, @@ -415,4 +400,19 @@ data class ShowflixSearchMovies( data class ShowflixSearchSeries( @JsonProperty("results") val resultsSeries: ArrayList? = arrayListOf(), +) + +data class VaticSrtfiles( + @JsonProperty("caption") var caption: String? = null, + @JsonProperty("url") var url: String? = null, +) + +data class VaticQualities( + @JsonProperty("path") var path: String? = null, + @JsonProperty("quality") var quality: String? = null, +) + +data class VaticSources( + @JsonProperty("Qualities") var qualities: ArrayList = arrayListOf(), + @JsonProperty("Srtfiles") var srtfiles: 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 4ec882f9..995509c9 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt @@ -46,10 +46,10 @@ import com.hexated.SoraExtractor.invokePutactor import com.hexated.SoraExtractor.invokeShowflix import com.hexated.SoraExtractor.invokeTvMovies import com.hexated.SoraExtractor.invokeUhdmovies +import com.hexated.SoraExtractor.invokeVatic import com.hexated.SoraExtractor.invokeVegamovies import com.hexated.SoraExtractor.invokeVidsrcto import com.hexated.SoraExtractor.invokeWatchOnline -import com.hexated.SoraExtractor.invokeWatchflx import com.hexated.SoraExtractor.invokeWatchsomuch import com.hexated.SoraExtractor.invokeZshow import com.lagradost.cloudstream3.LoadResponse.Companion.addImdbId @@ -123,7 +123,6 @@ open class SoraStream : TmdbProvider() { const val dramadayAPI = "https://dramaday.me" const val animetoshoAPI = "https://animetosho.org" const val putactorAPI = "https://putlocker.actor" - const val susflixAPI = "https://susflix.tv" const val jump1API = "https://ca.jump1.net" const val vegaMoviesAPI = "https://vegamovies.id" const val hdmovies4uAPI = "https://hdmovies4u.name" @@ -699,9 +698,6 @@ open class SoraStream : TmdbProvider() { { if (!res.isAnime) invoke2embed(res.imdbId, res.season, res.episode, callback) }, -// { -// invokeSusflix(res.id,res.season,res.episode,subtitleCallback,callback) -// }, { if (!res.isAnime) invokeJump1( res.id, @@ -723,9 +719,9 @@ open class SoraStream : TmdbProvider() { callback ) }, - { - if (!res.isAnime) invokeWatchflx(res.id, res.season, res.episode, callback) - }, +// { +// if (!res.isAnime) invokeWatchflx(res.id, res.season, res.episode, callback) +// }, { invokeZshow( res.title, @@ -755,6 +751,15 @@ open class SoraStream : TmdbProvider() { callback ) }, + { + if (!res.isAnime) invokeVatic( + res.id, + 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 433fe7f8..63676c76 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt @@ -29,10 +29,10 @@ import com.hexated.SoraExtractor.invokeNetmovies import com.hexated.SoraExtractor.invokeGomovies import com.hexated.SoraExtractor.invokePutactor import com.hexated.SoraExtractor.invokeShowflix +import com.hexated.SoraExtractor.invokeVatic import com.hexated.SoraExtractor.invokeVidSrc import com.hexated.SoraExtractor.invokeVidsrcto import com.hexated.SoraExtractor.invokeWatchOnline -import com.hexated.SoraExtractor.invokeWatchflx import com.hexated.SoraExtractor.invokeWatchsomuch import com.hexated.SoraExtractor.invokeZshow import com.lagradost.cloudstream3.SubtitleFile @@ -56,15 +56,6 @@ class SoraStreamLite : SoraStream() { { if(!res.isAnime) invokeJump1(res.id,res.tvdbId,res.title,res.year,res.season,res.episode,callback) }, -// { -// invokeSusflix( -// res.id, -// res.season, -// res.episode, -// subtitleCallback, -// callback -// ) -// }, { if (!res.isAnime) invokeBlackvid( res.id, @@ -285,14 +276,14 @@ class SoraStreamLite : SoraStream() { callback ) }, - { - if (!res.isAnime) invokeWatchflx( - res.id, - res.season, - res.episode, - callback - ) - }, +// { +// if (!res.isAnime) invokeWatchflx( +// res.id, +// res.season, +// res.episode, +// callback +// ) +// }, { if(!res.isAnime) invoke2embed( res.imdbId, @@ -321,6 +312,15 @@ class SoraStreamLite : SoraStream() { callback ) }, + { + if (!res.isAnime) invokeVatic( + res.id, + res.season, + res.episode, + subtitleCallback, + callback + ) + }, ) return true diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt b/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt index 18c542ca..df26e04e 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt @@ -151,25 +151,6 @@ fun Document.getMirrorServer(server: Int): String { return this.select("div.text-center a:contains(Server $server)").attr("href") } -suspend fun request( - url: String, - allowRedirects: Boolean = true, - timeout: Long = 30L -): Response { - val client = OkHttpClient().newBuilder() - .connectTimeout(timeout, TimeUnit.SECONDS) - .readTimeout(timeout, TimeUnit.SECONDS) - .writeTimeout(timeout, TimeUnit.SECONDS) - .followRedirects(allowRedirects) - .followSslRedirects(allowRedirects) - .build() - - val request: Request = Request.Builder() - .url(url) - .build() - return client.newCall(request).await() -} - suspend fun extractMirrorUHD(url: String, ref: String): String? { var baseDoc = app.get(fixUrl(url, ref)).document var downLink = baseDoc.getMirrorLink()