optimize code

This commit is contained in:
helo 2023-10-09 15:44:32 +07:00
parent 039de442da
commit cbdf11386c
7 changed files with 96 additions and 108 deletions

View File

@ -56,6 +56,7 @@ jobs:
ANICHI_APP: ${{ secrets.ANICHI_APP }} ANICHI_APP: ${{ secrets.ANICHI_APP }}
PRIMEWIRE_KEY: ${{ secrets.PRIMEWIRE_KEY }} PRIMEWIRE_KEY: ${{ secrets.PRIMEWIRE_KEY }}
ZSHOW_API: ${{ secrets.ZSHOW_API }} ZSHOW_API: ${{ secrets.ZSHOW_API }}
VATIC_API: ${{ secrets.VATIC_API }}
run: | run: |
cd $GITHUB_WORKSPACE/src cd $GITHUB_WORKSPACE/src
echo SORA_API=$SORA_API >> local.properties echo SORA_API=$SORA_API >> local.properties
@ -72,6 +73,7 @@ jobs:
echo ANICHI_APP=$ANICHI_APP >> local.properties echo ANICHI_APP=$ANICHI_APP >> local.properties
echo PRIMEWIRE_KEY=$PRIMEWIRE_KEY >> local.properties echo PRIMEWIRE_KEY=$PRIMEWIRE_KEY >> local.properties
echo ZSHOW_API=$ZSHOW_API >> local.properties echo ZSHOW_API=$ZSHOW_API >> local.properties
echo VATIC_API=$VATIC_API >> local.properties
- name: Build Plugins - name: Build Plugins
run: | run: |

View File

@ -1,13 +1,14 @@
import org.jetbrains.kotlin.konan.properties.Properties import org.jetbrains.kotlin.konan.properties.Properties
// use an integer for version numbers // use an integer for version numbers
version = 180 version = 181
android { android {
defaultConfig { defaultConfig {
val properties = Properties() val properties = Properties()
properties.load(project.rootProject.file("local.properties").inputStream()) 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", "ZSHOW_API", "\"${properties.getProperty("ZSHOW_API")}\"")
buildConfigField("String", "SORA_API", "\"${properties.getProperty("SORA_API")}\"") buildConfigField("String", "SORA_API", "\"${properties.getProperty("SORA_API")}\"")
buildConfigField("String", "SORAHE", "\"${properties.getProperty("SORAHE")}\"") buildConfigField("String", "SORAHE", "\"${properties.getProperty("SORAHE")}\"")

View File

@ -34,8 +34,8 @@ object SoraExtractor : SoraStream() {
"X-Requested-With" to "XMLHttpRequest" "X-Requested-With" to "XMLHttpRequest"
) )
fun Document.getServers(): List<String> { fun Document.getServers(): List<Pair<String,String>> {
return this.select("a").map { it.attr("data-id") } return this.select("a").map { it.attr("data-id") to it.text() }
} }
val media = app.get( val media = app.get(
@ -83,12 +83,12 @@ object SoraExtractor : SoraStream() {
).document.getServers() ).document.getServers()
} }
serversId.apmap { id -> serversId.apmap { (id, name) ->
val iframe = val iframe =
app.get("$gokuAPI/ajax/movie/episode/server/sources/$id", headers = headers) app.get("$gokuAPI/ajax/movie/episode/server/sources/$id", headers = headers)
.parsedSafe<GokuServer>()?.data?.link ?: return@apmap .parsedSafe<GokuServer>()?.data?.link ?: return@apmap
loadCustomExtractor( loadCustomExtractor(
if (iframe.contains("rabbitstream")) "Vidcloud" else "Upcloud", name,
iframe, iframe,
"$gokuAPI/", "$gokuAPI/",
subtitleCallback, 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<SusflixSources>("{$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( suspend fun invokeJump1(
tmdbId: Int? = null, tmdbId: Int? = null,
tvdbId: 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<VaticSources>()
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,
)
)
}
}
} }

View File

@ -67,21 +67,6 @@ data class KisskhDetail(
@JsonProperty("episodes") val episodes: ArrayList<KisskhEpisodes>? = arrayListOf(), @JsonProperty("episodes") val episodes: ArrayList<KisskhEpisodes>? = 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<SusflixQualities>? = arrayListOf(),
@JsonProperty("Srtfiles") val srtfiles: ArrayList<SusflixSrtfiles>? = arrayListOf(),
)
data class KisskhResults( data class KisskhResults(
@JsonProperty("id") val id: Int?, @JsonProperty("id") val id: Int?,
@JsonProperty("title") val title: String?, @JsonProperty("title") val title: String?,
@ -415,4 +400,19 @@ data class ShowflixSearchMovies(
data class ShowflixSearchSeries( data class ShowflixSearchSeries(
@JsonProperty("results") val resultsSeries: ArrayList<ShowflixResultsSeries>? = arrayListOf(), @JsonProperty("results") val resultsSeries: ArrayList<ShowflixResultsSeries>? = 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<VaticQualities> = arrayListOf(),
@JsonProperty("Srtfiles") var srtfiles: ArrayList<VaticSrtfiles> = arrayListOf(),
) )

View File

@ -46,10 +46,10 @@ import com.hexated.SoraExtractor.invokePutactor
import com.hexated.SoraExtractor.invokeShowflix import com.hexated.SoraExtractor.invokeShowflix
import com.hexated.SoraExtractor.invokeTvMovies import com.hexated.SoraExtractor.invokeTvMovies
import com.hexated.SoraExtractor.invokeUhdmovies import com.hexated.SoraExtractor.invokeUhdmovies
import com.hexated.SoraExtractor.invokeVatic
import com.hexated.SoraExtractor.invokeVegamovies import com.hexated.SoraExtractor.invokeVegamovies
import com.hexated.SoraExtractor.invokeVidsrcto import com.hexated.SoraExtractor.invokeVidsrcto
import com.hexated.SoraExtractor.invokeWatchOnline import com.hexated.SoraExtractor.invokeWatchOnline
import com.hexated.SoraExtractor.invokeWatchflx
import com.hexated.SoraExtractor.invokeWatchsomuch import com.hexated.SoraExtractor.invokeWatchsomuch
import com.hexated.SoraExtractor.invokeZshow import com.hexated.SoraExtractor.invokeZshow
import com.lagradost.cloudstream3.LoadResponse.Companion.addImdbId import com.lagradost.cloudstream3.LoadResponse.Companion.addImdbId
@ -123,7 +123,6 @@ open class SoraStream : TmdbProvider() {
const val dramadayAPI = "https://dramaday.me" const val dramadayAPI = "https://dramaday.me"
const val animetoshoAPI = "https://animetosho.org" const val animetoshoAPI = "https://animetosho.org"
const val putactorAPI = "https://putlocker.actor" const val putactorAPI = "https://putlocker.actor"
const val susflixAPI = "https://susflix.tv"
const val jump1API = "https://ca.jump1.net" const val jump1API = "https://ca.jump1.net"
const val vegaMoviesAPI = "https://vegamovies.id" const val vegaMoviesAPI = "https://vegamovies.id"
const val hdmovies4uAPI = "https://hdmovies4u.name" 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) if (!res.isAnime) invoke2embed(res.imdbId, res.season, res.episode, callback)
}, },
// {
// invokeSusflix(res.id,res.season,res.episode,subtitleCallback,callback)
// },
{ {
if (!res.isAnime) invokeJump1( if (!res.isAnime) invokeJump1(
res.id, res.id,
@ -723,9 +719,9 @@ open class SoraStream : TmdbProvider() {
callback callback
) )
}, },
{ // {
if (!res.isAnime) invokeWatchflx(res.id, res.season, res.episode, callback) // if (!res.isAnime) invokeWatchflx(res.id, res.season, res.episode, callback)
}, // },
{ {
invokeZshow( invokeZshow(
res.title, res.title,
@ -755,6 +751,15 @@ open class SoraStream : TmdbProvider() {
callback callback
) )
}, },
{
if (!res.isAnime) invokeVatic(
res.id,
res.season,
res.episode,
subtitleCallback,
callback
)
},
) )
return true return true

View File

@ -29,10 +29,10 @@ import com.hexated.SoraExtractor.invokeNetmovies
import com.hexated.SoraExtractor.invokeGomovies import com.hexated.SoraExtractor.invokeGomovies
import com.hexated.SoraExtractor.invokePutactor import com.hexated.SoraExtractor.invokePutactor
import com.hexated.SoraExtractor.invokeShowflix import com.hexated.SoraExtractor.invokeShowflix
import com.hexated.SoraExtractor.invokeVatic
import com.hexated.SoraExtractor.invokeVidSrc import com.hexated.SoraExtractor.invokeVidSrc
import com.hexated.SoraExtractor.invokeVidsrcto import com.hexated.SoraExtractor.invokeVidsrcto
import com.hexated.SoraExtractor.invokeWatchOnline import com.hexated.SoraExtractor.invokeWatchOnline
import com.hexated.SoraExtractor.invokeWatchflx
import com.hexated.SoraExtractor.invokeWatchsomuch import com.hexated.SoraExtractor.invokeWatchsomuch
import com.hexated.SoraExtractor.invokeZshow import com.hexated.SoraExtractor.invokeZshow
import com.lagradost.cloudstream3.SubtitleFile 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) 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( if (!res.isAnime) invokeBlackvid(
res.id, res.id,
@ -285,14 +276,14 @@ class SoraStreamLite : SoraStream() {
callback callback
) )
}, },
{ // {
if (!res.isAnime) invokeWatchflx( // if (!res.isAnime) invokeWatchflx(
res.id, // res.id,
res.season, // res.season,
res.episode, // res.episode,
callback // callback
) // )
}, // },
{ {
if(!res.isAnime) invoke2embed( if(!res.isAnime) invoke2embed(
res.imdbId, res.imdbId,
@ -321,6 +312,15 @@ class SoraStreamLite : SoraStream() {
callback callback
) )
}, },
{
if (!res.isAnime) invokeVatic(
res.id,
res.season,
res.episode,
subtitleCallback,
callback
)
},
) )
return true return true

View File

@ -151,25 +151,6 @@ fun Document.getMirrorServer(server: Int): String {
return this.select("div.text-center a:contains(Server $server)").attr("href") 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? { suspend fun extractMirrorUHD(url: String, ref: String): String? {
var baseDoc = app.get(fixUrl(url, ref)).document var baseDoc = app.get(fixUrl(url, ref)).document
var downLink = baseDoc.getMirrorLink() var downLink = baseDoc.getMirrorLink()