sora: added mMovies & fix oploverz

This commit is contained in:
alex 2024-01-03 06:57:41 +07:00
parent 2d23f05fa0
commit 29c78d2468
10 changed files with 1079 additions and 2486 deletions

View file

@ -1,5 +1,5 @@
// use an integer for version numbers
version = 24
version = 25
cloudstream {

View file

@ -43,3 +43,38 @@ open class Qiwi : ExtractorApi() {
}
}
open class Mediafire : ExtractorApi() {
override val name = "Mediafire"
override val mainUrl = "https://www.mediafire.com"
override val requiresReferer = true
override suspend fun getUrl(
url: String,
referer: String?,
subtitleCallback: (SubtitleFile) -> Unit,
callback: (ExtractorLink) -> Unit
) {
val res = app.get(url, referer = referer).document
val title = res.select("div.dl-btn-label").text()
val video = res.selectFirst("a#downloadButton")?.attr("href")
callback.invoke(
ExtractorLink(
this.name,
this.name,
video ?: return,
"",
getQuality(title),
INFER_TYPE
)
)
}
private fun getQuality(str: String?): Int {
return Regex("(\\d{3,4})[pP]").find(str ?: "")?.groupValues?.getOrNull(1)?.toIntOrNull()
?: Qualities.Unknown.value
}
}

View file

@ -7,7 +7,7 @@ import com.lagradost.cloudstream3.utils.*
import org.jsoup.nodes.Element
class OploverzProvider : MainAPI() {
override var mainUrl = "https://oploverz.red"
override var mainUrl = "https://oploverz.life"
override var name = "Oploverz"
override val hasMainPage = true
override var lang = "id"

View file

@ -11,5 +11,6 @@ class OploverzProviderPlugin: Plugin() {
// All providers should be added in this manner. Please don't edit the providers list directly.
registerMainAPI(OploverzProvider())
registerExtractorAPI(Qiwi())
registerExtractorAPI(Mediafire())
}
}

View file

@ -1,7 +1,7 @@
import org.jetbrains.kotlin.konan.properties.Properties
// use an integer for version numbers
version = 211
version = 212
android {
defaultConfig {

View file

@ -339,13 +339,7 @@ open class Netembed : ExtractorApi() {
val script = getAndUnpack(response.text)
val m3u8 = Regex("((https:|http:)//.*\\.m3u8)").find(script)?.groupValues?.getOrNull(1) ?: return
if (!m3u8.startsWith("https://www.febbox.com")) {
M3u8Helper.generateM3u8(
this.name,
m3u8,
"$mainUrl/",
).forEach(callback)
}
M3u8Helper.generateM3u8(this.name, m3u8, "$mainUrl/", ).forEach(callback)
}
}

File diff suppressed because it is too large Load diff

View file

@ -11,12 +11,6 @@ data class CrunchyrollAccessToken(
val key_pair_id: String? = null,
)
data class ShowboxMedia(
val url: String,
val title: String,
val infor: String,
val type: String,
)
data class FDMovieIFrame(
val link: String,
val quality: String,
@ -24,32 +18,20 @@ data class FDMovieIFrame(
val type: String,
)
data class AniIds(
var id: Int? = null,
var idMal: Int? = null
)
data class AniIds(var id: Int? = null, var idMal: Int? = null)
data class TmdbDate(
val today: String,
val nextWeek: String,
)
data class AniMedia(
@JsonProperty("id") var id: Int? = null,
@JsonProperty("idMal") var idMal: Int? = null
)
data class AniMedia(@JsonProperty("id") var id: Int? = null, @JsonProperty("idMal") var idMal: Int? = null)
data class AniPage(
@JsonProperty("media") var media: java.util.ArrayList<AniMedia> = arrayListOf()
)
data class AniPage(@JsonProperty("media") var media: java.util.ArrayList<AniMedia> = arrayListOf())
data class AniData(
@JsonProperty("Page") var Page: AniPage? = AniPage()
)
data class AniData(@JsonProperty("Page") var Page: AniPage? = AniPage())
data class AniSearch(
@JsonProperty("data") var data: AniData? = AniData()
)
data class AniSearch(@JsonProperty("data") var data: AniData? = AniData())
data class GpressSources(
@JsonProperty("src") val src: String,
@ -203,17 +185,11 @@ data class AnilistExternalLinks(
@JsonProperty("type") var type: String? = null,
)
data class AnilistMedia(
@JsonProperty("externalLinks") var externalLinks: ArrayList<AnilistExternalLinks> = arrayListOf()
)
data class AnilistMedia(@JsonProperty("externalLinks") var externalLinks: ArrayList<AnilistExternalLinks> = arrayListOf())
data class AnilistData(
@JsonProperty("Media") var Media: AnilistMedia? = AnilistMedia()
)
data class AnilistData(@JsonProperty("Media") var Media: AnilistMedia? = AnilistMedia())
data class AnilistResponses(
@JsonProperty("data") var data: AnilistData? = AnilistData()
)
data class AnilistResponses(@JsonProperty("data") var data: AnilistData? = AnilistData())
data class CrunchyrollToken(
@JsonProperty("access_token") val accessToken: String? = null,
@ -388,10 +364,7 @@ data class SFMoviesAttributes(
@JsonProperty("contentId") var contentId: String? = null,
)
data class SFMoviesData(
@JsonProperty("id") var id: Int? = null,
@JsonProperty("attributes") var attributes: SFMoviesAttributes? = SFMoviesAttributes()
)
data class SFMoviesData(@JsonProperty("id") var id: Int? = null, @JsonProperty("attributes") var attributes: SFMoviesAttributes? = SFMoviesAttributes())
data class SFMoviesSearch(
@JsonProperty("data") var data: ArrayList<SFMoviesData>? = arrayListOf(),
@ -461,18 +434,3 @@ data class AoneroomResponse(
}
}
}
data class FebboxResponse(
@JsonProperty("data") val data: Data? = null,
) {
data class Data(
@JsonProperty("link") val link: String? = null,
@JsonProperty("file_list") val file_list: ArrayList<FileList>? = arrayListOf(),
) {
data class FileList(
@JsonProperty("fid") val fid: Long? = null,
@JsonProperty("file_name") val file_name: String? = null,
@JsonProperty("oss_fid") val oss_fid: Long? = null,
)
}
}

View file

@ -43,7 +43,7 @@ import com.hexated.SoraExtractor.invokeUhdmovies
import com.hexated.SoraExtractor.invokeVegamovies
import com.hexated.SoraExtractor.invokeVidsrcto
import com.hexated.SoraExtractor.invokeCinemaTv
import com.hexated.SoraExtractor.invokeFebbox
import com.hexated.SoraExtractor.invokeMMovies
import com.hexated.SoraExtractor.invokeOmovies
import com.hexated.SoraExtractor.invokeWatchCartoon
import com.hexated.SoraExtractor.invokeWatchsomuch
@ -68,8 +68,8 @@ open class SoraStream : TmdbProvider() {
TvType.Anime,
)
val showboxInterceptor by lazy { CloudflareKiller() }
val wpredisInterceptor by lazy { CloudflareKiller() }
val multiInterceptor by lazy { CloudflareKiller() }
/** AUTHOR : Hexated & Sora */
companion object {
@ -114,10 +114,9 @@ open class SoraStream : TmdbProvider() {
const val vidsrctoAPI = "https://vidsrc.to"
const val dramadayAPI = "https://dramaday.me"
const val animetoshoAPI = "https://animetosho.org"
const val watchflxAPI = "https://watchflx.tv"
const val showflixAPI = "https://showflix.space"
const val aoneroomAPI = "https://api3.aoneroom.com"
const val febboxAPI = "https://www.febbox.com"
const val mMoviesAPI = "https://multimovies.uno"
const val watchCartoonAPI = "https://www1.watchcartoononline.bz"
const val fdMoviesAPI = "https://freedrivemovie.com"
@ -180,16 +179,10 @@ open class SoraStream : TmdbProvider() {
return if (link.startsWith("/")) "https://image.tmdb.org/t/p/original/$link" else link
}
override suspend fun getMainPage(
page: Int,
request: MainPageRequest
): HomePageResponse {
val adultQuery =
if (settingsForProvider.enableAdult) "" else "&without_keywords=190370|13059|226161|195669"
override suspend fun getMainPage(page: Int, request: MainPageRequest): HomePageResponse {
val adultQuery = if (settingsForProvider.enableAdult) "" else "&without_keywords=190370|13059|226161|195669"
val type = if (request.data.contains("/movie")) "movie" else "tv"
val home = app.get("${request.data}$adultQuery&page=$page")
.parsedSafe<Results>()?.results
?.mapNotNull { media ->
val home = app.get("${request.data}$adultQuery&page=$page").parsedSafe<Results>()?.results?.mapNotNull { media ->
media.toSearchResponse(type)
} ?: throw ErrorLoadingException("Invalid Json reponse")
return newHomePageResponse(request.name, home)
@ -208,9 +201,7 @@ open class SoraStream : TmdbProvider() {
override suspend fun quickSearch(query: String): List<SearchResponse>? = search(query)
override suspend fun search(query: String): List<SearchResponse>? {
return app.get(
"$tmdbAPI/search/multi?api_key=$apiKey&language=en-US&query=$query&page=1&include_adult=${settingsForProvider.enableAdult}"
).parsedSafe<Results>()?.results?.mapNotNull { media ->
return app.get("$tmdbAPI/search/multi?api_key=$apiKey&language=en-US&query=$query&page=1&include_adult=${settingsForProvider.enableAdult}").parsedSafe<Results>()?.results?.mapNotNull { media ->
media.toSearchResponse()
}
}
@ -241,68 +232,27 @@ open class SoraStream : TmdbProvider() {
val isAsian = !isAnime && (res.original_language == "zh" || res.original_language == "ko")
val isBollywood = res.production_countries?.any { it.name == "India" } ?: false
val keywords = res.keywords?.results?.mapNotNull { it.name }.orEmpty()
.ifEmpty { res.keywords?.keywords?.mapNotNull { it.name } }
val keywords = res.keywords?.results?.mapNotNull { it.name }.orEmpty().ifEmpty { res.keywords?.keywords?.mapNotNull { it.name } }
val actors = res.credits?.cast?.mapNotNull { cast ->
ActorData(
Actor(
cast.name ?: cast.originalName ?: return@mapNotNull null,
getImageUrl(cast.profilePath)
),
roleString = cast.character
)
ActorData(Actor(cast.name ?: cast.originalName
?: return@mapNotNull null, getImageUrl(cast.profilePath)), roleString = cast.character)
} ?: return null
val recommendations =
res.recommendations?.results?.mapNotNull { media -> media.toSearchResponse() }
val recommendations = res.recommendations?.results?.mapNotNull { media -> media.toSearchResponse() }
val trailer = res.videos?.results?.map { "https://www.youtube.com/watch?v=${it.key}" }
?.randomOrNull()
val trailer = res.videos?.results?.map { "https://www.youtube.com/watch?v=${it.key}" }?.randomOrNull()
return if (type == TvType.TvSeries) {
val lastSeason = res.last_episode_to_air?.season_number
val episodes = res.seasons?.mapNotNull { season ->
app.get("$tmdbAPI/${data.type}/${data.id}/season/${season.seasonNumber}?api_key=$apiKey")
.parsedSafe<MediaDetailEpisodes>()?.episodes?.map { eps ->
Episode(
LinkData(
data.id,
res.external_ids?.imdb_id,
res.external_ids?.tvdb_id,
data.type,
eps.seasonNumber,
eps.episodeNumber,
title = title,
year = season.airDate?.split("-")?.first()?.toIntOrNull(),
orgTitle = orgTitle,
isAnime = isAnime,
airedYear = year,
lastSeason = lastSeason,
epsTitle = eps.name,
jpTitle = res.alternative_titles?.results?.find { it.iso_3166_1 == "JP" }?.title,
date = season.airDate,
airedDate = res.releaseDate ?: res.firstAirDate,
isAsian = isAsian,
isBollywood = isBollywood,
isCartoon = isCartoon
).toJson(),
name = eps.name + if (isUpcoming(eps.airDate)) " - [UPCOMING]" else "",
season = eps.seasonNumber,
episode = eps.episodeNumber,
posterUrl = getImageUrl(eps.stillPath),
rating = eps.voteAverage?.times(10)?.roundToInt(),
description = eps.overview
).apply {
app.get("$tmdbAPI/${data.type}/${data.id}/season/${season.seasonNumber}?api_key=$apiKey").parsedSafe<MediaDetailEpisodes>()?.episodes?.map { eps ->
Episode(LinkData(data.id, res.external_ids?.imdb_id, res.external_ids?.tvdb_id, data.type, eps.seasonNumber, eps.episodeNumber, title = title, year = season.airDate?.split("-")?.first()?.toIntOrNull(), orgTitle = orgTitle, isAnime = isAnime, airedYear = year, lastSeason = lastSeason, epsTitle = eps.name, jpTitle = res.alternative_titles?.results?.find { it.iso_3166_1 == "JP" }?.title, date = season.airDate, airedDate = res.releaseDate
?: res.firstAirDate, isAsian = isAsian, isBollywood = isBollywood, isCartoon = isCartoon).toJson(), name = eps.name + if (isUpcoming(eps.airDate)) " - [UPCOMING]" else "", season = eps.seasonNumber, episode = eps.episodeNumber, posterUrl = getImageUrl(eps.stillPath), rating = eps.voteAverage?.times(10)?.roundToInt(), description = eps.overview).apply {
this.addDate(eps.airDate)
}
}
}?.flatten() ?: listOf()
newTvSeriesLoadResponse(
title,
url,
if (isAnime) TvType.Anime else TvType.TvSeries,
episodes
) {
newTvSeriesLoadResponse(title, url, if (isAnime) TvType.Anime else TvType.TvSeries, episodes) {
this.posterUrl = poster
this.backgroundPosterUrl = bgPoster
this.year = year
@ -322,20 +272,8 @@ open class SoraStream : TmdbProvider() {
title,
url,
TvType.Movie,
LinkData(
data.id,
res.external_ids?.imdb_id,
res.external_ids?.tvdb_id,
data.type,
title = title,
year = year,
orgTitle = orgTitle,
isAnime = isAnime,
jpTitle = res.alternative_titles?.results?.find { it.iso_3166_1 == "JP" }?.title,
airedDate = res.releaseDate ?: res.firstAirDate,
isAsian = isAsian,
isBollywood = isBollywood
).toJson(),
LinkData(data.id, res.external_ids?.imdb_id, res.external_ids?.tvdb_id, data.type, title = title, year = year, orgTitle = orgTitle, isAnime = isAnime, jpTitle = res.alternative_titles?.results?.find { it.iso_3166_1 == "JP" }?.title, airedDate = res.releaseDate
?: res.firstAirDate, isAsian = isAsian, isBollywood = isBollywood).toJson(),
) {
this.posterUrl = poster
this.backgroundPosterUrl = bgPoster
@ -355,46 +293,16 @@ open class SoraStream : TmdbProvider() {
}
}
override suspend fun loadLinks(
data: String,
isCasting: Boolean,
subtitleCallback: (SubtitleFile) -> Unit,
callback: (ExtractorLink) -> Unit
): Boolean {
override suspend fun loadLinks(data: String, isCasting: Boolean, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit): Boolean {
val res = parseJson<LinkData>(data)
argamap(
// {
// invokeFebbox(
// res.title,
// res.year,
// res.season,
// res.lastSeason,
// res.episode,
// callback
// )
// },
{
invokeDumpStream(
res.title,
res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
invokeDumpStream(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
},
{
invokeGoku(
res.title,
res.year,
res.season,
res.lastSeason,
res.episode,
subtitleCallback,
callback
)
invokeGoku(res.title, res.year, res.season, res.lastSeason, res.episode, subtitleCallback, callback)
},
{
invokeVidSrc(res.id, res.season, res.episode, callback)
@ -403,270 +311,101 @@ open class SoraStream : TmdbProvider() {
invokeDbgo(res.imdbId, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeAoneroom(
res.title,
res.airedYear ?: res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeAoneroom(res.title, res.airedYear
?: res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (res.isAnime) invokeAnimes(
res.title,
res.epsTitle,
res.date,
res.airedDate,
res.season,
res.episode,
subtitleCallback,
callback
)
if (res.isAnime) invokeAnimes(res.title, res.epsTitle, res.date, res.airedDate, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeDreamfilm(
res.title,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeDreamfilm(res.title, res.season, res.episode, subtitleCallback, callback)
},
// {
// invokeNoverse(res.title, res.season, res.episode, callback)
// },
{
if (!res.isAnime) invokeFilmxy(
res.imdbId,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeFilmxy(res.imdbId, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime && res.isCartoon) invokeKimcartoon(
res.title,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime && res.isCartoon) invokeKimcartoon(res.title, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime && res.isCartoon) invokeWatchCartoon(
res.title,
res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime && res.isCartoon) invokeWatchCartoon(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeVidsrcto(
res.imdbId,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeVidsrcto(res.imdbId, res.season, res.episode, subtitleCallback, callback)
},
{
if (res.isAsian || res.isAnime) invokeKisskh(
res.title,
res.season,
res.episode,
res.isAnime,
res.lastSeason,
subtitleCallback,
callback
)
if (res.isAsian || res.isAnime) invokeKisskh(res.title, res.season, res.episode, res.isAnime, res.lastSeason, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeOmovies (
res.title,
res.year,
res.season,
res.episode,
callback
)
if (!res.isAnime) invokeOmovies(res.title, res.year, res.season, res.episode, callback)
},
{
if (!res.isAnime) invokeLing(
res.title,
res.airedYear ?: res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeLing(res.title, res.airedYear
?: res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeUhdmovies(
res.title,
res.year,
res.season,
res.episode,
callback
)
if (!res.isAnime) invokeUhdmovies(res.title, res.year, res.season, res.episode, callback)
},
{
if (!res.isAnime) invokeGMovies(
res.title,
res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeGMovies(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeFDMovies(
res.title,
res.season,
res.episode,
callback
)
if (!res.isAnime) invokeFDMovies(res.title, res.season, res.episode, callback)
},
{
if (!res.isAnime) invokeM4uhd(
res.title,
res.airedYear ?: res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeM4uhd(res.title, res.airedYear
?: res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeTvMovies(res.title, res.season, res.episode, callback)
},
{
if (!res.isAnime) invokeMoviezAdd(
moviezAddAPI,
"MoviezAdd",
res.title,
res.year,
res.season,
res.episode,
callback
)
if (!res.isAnime) invokeMoviezAdd(moviezAddAPI, "MoviezAdd", res.title, res.year, res.season, res.episode, callback)
},
{
if (!res.isAnime && res.isBollywood) invokeBollyMaza(
bollyMazaAPI,
"BollyMaza",
res.title,
res.year,
res.season,
res.episode,
callback
)
if (!res.isAnime && res.isBollywood) invokeBollyMaza(bollyMazaAPI, "BollyMaza", res.title, res.year, res.season, res.episode, callback)
},
{
if (!res.isAnime) invokeRStream(res.id, res.season, res.episode, callback)
},
{
if (!res.isAnime) invokeFlixon(
res.id,
res.imdbId,
res.season,
res.episode,
callback
)
if (!res.isAnime) invokeFlixon(res.id, res.imdbId, res.season, res.episode, callback)
},
{
if (!res.isAnime) invokeSmashyStream(
res.imdbId,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeSmashyStream(res.imdbId, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeWatchsomuch(
res.imdbId,
res.season,
res.episode,
subtitleCallback
)
if (!res.isAnime) invokeWatchsomuch(res.imdbId, res.season, res.episode, subtitleCallback)
},
{
if (!res.isAnime) invokeNinetv(
res.id,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeNinetv(res.id, res.season, res.episode, subtitleCallback, callback)
},
{
invokeDahmerMovies(
res.title,
res.year,
res.season,
res.episode,
callback
)
invokeDahmerMovies(res.title, res.year, res.season, res.episode, callback)
},
{
invokeCinemaTv(
res.imdbId,
res.title,
res.airedYear ?: res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
invokeCinemaTv(res.imdbId, res.title, res.airedYear
?: res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeNowTv(res.id, res.imdbId, res.season, res.episode, callback)
},
{
if (!res.isAnime && res.season == null) invokeRidomovies(
res.id,
res.imdbId,
callback
)
if (!res.isAnime && res.season == null) invokeRidomovies(res.id, res.imdbId, callback)
},
{
if (!res.isAnime) invokeAllMovieland(res.imdbId, res.season, res.episode, callback)
},
{
if (!res.isAnime) invokeEmovies(
res.title,
res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeEmovies(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeVegamovies(
res.title,
res.year,
res.season,
res.lastSeason,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeVegamovies(res.title, res.year, res.season, res.lastSeason, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime && res.isBollywood) invokeDotmovies(
res.title,
res.year,
res.season,
res.lastSeason,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime && res.isBollywood) invokeDotmovies(res.title, res.year, res.season, res.lastSeason, res.episode, subtitleCallback, callback)
},
{
if (res.isBollywood) invokeMultimovies(multimoviesAPI, res.title, res.season, res.episode, subtitleCallback, callback)
@ -675,75 +414,33 @@ open class SoraStream : TmdbProvider() {
if (res.isBollywood) invokeMultimovies(multimovies2API, res.title, res.season, res.episode, subtitleCallback, callback)
},
{
invokeNetmovies(
res.title,
res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
invokeNetmovies(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime && res.season == null) invokeDoomovies(
res.title,
subtitleCallback,
callback
)
if (!res.isAnime && res.season == null) invokeDoomovies(res.title, subtitleCallback, callback)
},
{
if (res.isAsian) invokeDramaday(
res.title,
res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
if (res.isAsian) invokeDramaday(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invoke2embed(res.imdbId, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeHdmovies4u(
res.title,
res.imdbId,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeHdmovies4u(res.title, res.imdbId, res.season, res.episode, subtitleCallback, callback)
},
{
invokeZshow(
res.title,
res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
invokeZshow(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeShowflix(
res.title,
res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeShowflix(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeSFMovies(
res.id,
res.title,
res.airedYear ?: res.year,
res.season,
res.episode,
callback
)
}
if (!res.isAnime) invokeSFMovies(res.id, res.title, res.airedYear
?: res.year, res.season, res.episode, callback)
},
{
invokeMMovies(res.title, res.season, res.episode, subtitleCallback, callback)
},
)
return true

View file

@ -29,7 +29,7 @@ import com.hexated.SoraExtractor.invokeShowflix
import com.hexated.SoraExtractor.invokeVidSrc
import com.hexated.SoraExtractor.invokeVidsrcto
import com.hexated.SoraExtractor.invokeCinemaTv
import com.hexated.SoraExtractor.invokeFebbox
import com.hexated.SoraExtractor.invokeMMovies
import com.hexated.SoraExtractor.invokeOmovies
import com.hexated.SoraExtractor.invokeWatchCartoon
import com.hexated.SoraExtractor.invokeWatchsomuch
@ -42,63 +42,22 @@ import com.lagradost.cloudstream3.utils.ExtractorLink
class SoraStreamLite : SoraStream() {
override var name = "SoraStream-Lite"
override suspend fun loadLinks(
data: String,
isCasting: Boolean,
subtitleCallback: (SubtitleFile) -> Unit,
callback: (ExtractorLink) -> Unit
): Boolean {
override suspend fun loadLinks(data: String, isCasting: Boolean, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit): Boolean {
val res = AppUtils.parseJson<LinkData>(data)
argamap(
// {
// invokeFebbox(
// res.title,
// res.year,
// res.season,
// res.lastSeason,
// res.episode,
// callback
// )
// },
{
if (!res.isAnime) invokeWatchsomuch(
res.imdbId,
res.season,
res.episode,
subtitleCallback
)
if (!res.isAnime) invokeWatchsomuch(res.imdbId, res.season, res.episode, subtitleCallback)
},
{
invokeDumpStream(
res.title,
res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
invokeDumpStream(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeNinetv(
res.id,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeNinetv(res.id, res.season, res.episode, subtitleCallback, callback)
},
{
invokeGoku(
res.title,
res.year,
res.season,
res.lastSeason,
res.episode,
subtitleCallback,
callback
)
invokeGoku(res.title, res.year, res.season, res.lastSeason, res.episode, subtitleCallback, callback)
},
{
invokeVidSrc(res.id, res.season, res.episode, callback)
@ -107,111 +66,39 @@ class SoraStreamLite : SoraStream() {
invokeDbgo(res.imdbId, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime && res.isCartoon) invokeWatchCartoon(
res.title,
res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime && res.isCartoon) invokeWatchCartoon(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (res.isAnime) invokeAnimes(
res.title,
res.epsTitle,
res.date,
res.airedDate,
res.season,
res.episode,
subtitleCallback,
callback
)
if (res.isAnime) invokeAnimes(res.title, res.epsTitle, res.date, res.airedDate, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeDreamfilm(
res.title,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeDreamfilm(res.title, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeFilmxy(
res.imdbId,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeFilmxy(res.imdbId, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeOmovies(
res.title,
res.year,
res.season,
res.episode,
callback
)
if (!res.isAnime) invokeOmovies(res.title, res.year, res.season, res.episode, callback)
},
{
if (!res.isAnime && res.isCartoon) invokeKimcartoon(
res.title,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime && res.isCartoon) invokeKimcartoon(res.title, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeSmashyStream(
res.imdbId,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeSmashyStream(res.imdbId, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeVidsrcto(
res.imdbId,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeVidsrcto(res.imdbId, res.season, res.episode, subtitleCallback, callback)
},
{
if (res.isAsian || res.isAnime) invokeKisskh(
res.title,
res.season,
res.episode,
res.isAnime,
res.lastSeason,
subtitleCallback,
callback
)
if (res.isAsian || res.isAnime) invokeKisskh(res.title, res.season, res.episode, res.isAnime, res.lastSeason, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeLing(
res.title,
res.airedYear ?: res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeLing(res.title, res.airedYear
?: res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if(!res.isAnime) invokeM4uhd(
res.title,
res.airedYear ?: res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeM4uhd(res.title, res.airedYear
?: res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeRStream(res.id, res.season, res.episode, callback)
@ -220,45 +107,21 @@ class SoraStreamLite : SoraStream() {
if (!res.isAnime) invokeFlixon(res.id, res.imdbId, res.season, res.episode, callback)
},
{
invokeCinemaTv(
res.imdbId,
res.title,
res.airedYear ?: res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
invokeCinemaTv(res.imdbId, res.title, res.airedYear
?: res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeNowTv(res.id, res.imdbId, res.season, res.episode, callback)
},
{
if (!res.isAnime) invokeAoneroom(
res.title,
res.airedYear ?: res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeAoneroom(res.title, res.airedYear
?: res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime && res.season == null) invokeRidomovies(
res.id,
res.imdbId,
callback
)
if (!res.isAnime && res.season == null) invokeRidomovies(res.id, res.imdbId, callback)
},
{
if (!res.isAnime) invokeEmovies(
res.title,
res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeEmovies(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (res.isBollywood) invokeMultimovies(multimoviesAPI, res.title, res.season, res.episode, subtitleCallback, callback)
@ -267,74 +130,33 @@ class SoraStreamLite : SoraStream() {
if (res.isBollywood) invokeMultimovies(multimovies2API, res.title, res.season, res.episode, subtitleCallback, callback)
},
{
invokeNetmovies(
res.title,
res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
invokeNetmovies(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeAllMovieland(res.imdbId, res.season, res.episode, callback)
},
{
if (!res.isAnime && res.season == null) invokeDoomovies(
res.title,
subtitleCallback,
callback
)
if (!res.isAnime && res.season == null) invokeDoomovies(res.title, subtitleCallback, callback)
},
{
if(res.isAsian) invokeDramaday(
res.title,
res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
if (res.isAsian) invokeDramaday(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if(!res.isAnime) invoke2embed(
res.imdbId,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invoke2embed(res.imdbId, res.season, res.episode, subtitleCallback, callback)
},
{
invokeZshow(
res.title,
res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
invokeZshow(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if (!res.isAnime) invokeShowflix(
res.title,
res.year,
res.season,
res.episode,
subtitleCallback,
callback
)
if (!res.isAnime) invokeShowflix(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
},
{
if(!res.isAnime) invokeSFMovies(
res.id,
res.title,
res.airedYear ?: res.year,
res.season,
res.episode,
callback
)
}
if (!res.isAnime) invokeSFMovies(res.id, res.title, res.airedYear
?: res.year, res.season, res.episode, callback)
},
{
invokeMMovies(res.title, res.season, res.episode, subtitleCallback, callback)
},
)
return true