mirror of
https://github.com/hexated/cloudstream-extensions-hexated.git
synced 2024-08-15 00:03:22 +00:00
sora: added mMovies & fix oploverz
This commit is contained in:
parent
2d23f05fa0
commit
29c78d2468
10 changed files with 1079 additions and 2486 deletions
|
@ -1,5 +1,5 @@
|
||||||
// use an integer for version numbers
|
// use an integer for version numbers
|
||||||
version = 24
|
version = 25
|
||||||
|
|
||||||
|
|
||||||
cloudstream {
|
cloudstream {
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -7,7 +7,7 @@ import com.lagradost.cloudstream3.utils.*
|
||||||
import org.jsoup.nodes.Element
|
import org.jsoup.nodes.Element
|
||||||
|
|
||||||
class OploverzProvider : MainAPI() {
|
class OploverzProvider : MainAPI() {
|
||||||
override var mainUrl = "https://oploverz.red"
|
override var mainUrl = "https://oploverz.life"
|
||||||
override var name = "Oploverz"
|
override var name = "Oploverz"
|
||||||
override val hasMainPage = true
|
override val hasMainPage = true
|
||||||
override var lang = "id"
|
override var lang = "id"
|
||||||
|
|
|
@ -11,5 +11,6 @@ class OploverzProviderPlugin: Plugin() {
|
||||||
// All providers should be added in this manner. Please don't edit the providers list directly.
|
// All providers should be added in this manner. Please don't edit the providers list directly.
|
||||||
registerMainAPI(OploverzProvider())
|
registerMainAPI(OploverzProvider())
|
||||||
registerExtractorAPI(Qiwi())
|
registerExtractorAPI(Qiwi())
|
||||||
|
registerExtractorAPI(Mediafire())
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
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 = 211
|
version = 212
|
||||||
|
|
||||||
android {
|
android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
|
|
|
@ -339,13 +339,7 @@ open class Netembed : ExtractorApi() {
|
||||||
val script = getAndUnpack(response.text)
|
val script = getAndUnpack(response.text)
|
||||||
val m3u8 = Regex("((https:|http:)//.*\\.m3u8)").find(script)?.groupValues?.getOrNull(1) ?: return
|
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
|
@ -11,12 +11,6 @@ data class CrunchyrollAccessToken(
|
||||||
val key_pair_id: String? = null,
|
val key_pair_id: String? = null,
|
||||||
)
|
)
|
||||||
|
|
||||||
data class ShowboxMedia(
|
|
||||||
val url: String,
|
|
||||||
val title: String,
|
|
||||||
val infor: String,
|
|
||||||
val type: String,
|
|
||||||
)
|
|
||||||
data class FDMovieIFrame(
|
data class FDMovieIFrame(
|
||||||
val link: String,
|
val link: String,
|
||||||
val quality: String,
|
val quality: String,
|
||||||
|
@ -24,32 +18,20 @@ data class FDMovieIFrame(
|
||||||
val type: String,
|
val type: String,
|
||||||
)
|
)
|
||||||
|
|
||||||
data class AniIds(
|
data class AniIds(var id: Int? = null, var idMal: Int? = null)
|
||||||
var id: Int? = null,
|
|
||||||
var idMal: Int? = null
|
|
||||||
)
|
|
||||||
|
|
||||||
data class TmdbDate(
|
data class TmdbDate(
|
||||||
val today: String,
|
val today: String,
|
||||||
val nextWeek: String,
|
val nextWeek: String,
|
||||||
)
|
)
|
||||||
|
|
||||||
data class AniMedia(
|
data class AniMedia(@JsonProperty("id") var id: Int? = null, @JsonProperty("idMal") var idMal: Int? = null)
|
||||||
@JsonProperty("id") var id: Int? = null,
|
|
||||||
@JsonProperty("idMal") var idMal: Int? = null
|
|
||||||
)
|
|
||||||
|
|
||||||
data class AniPage(
|
data class AniPage(@JsonProperty("media") var media: java.util.ArrayList<AniMedia> = arrayListOf())
|
||||||
@JsonProperty("media") var media: java.util.ArrayList<AniMedia> = arrayListOf()
|
|
||||||
)
|
|
||||||
|
|
||||||
data class AniData(
|
data class AniData(@JsonProperty("Page") var Page: AniPage? = AniPage())
|
||||||
@JsonProperty("Page") var Page: AniPage? = AniPage()
|
|
||||||
)
|
|
||||||
|
|
||||||
data class AniSearch(
|
data class AniSearch(@JsonProperty("data") var data: AniData? = AniData())
|
||||||
@JsonProperty("data") var data: AniData? = AniData()
|
|
||||||
)
|
|
||||||
|
|
||||||
data class GpressSources(
|
data class GpressSources(
|
||||||
@JsonProperty("src") val src: String,
|
@JsonProperty("src") val src: String,
|
||||||
|
@ -203,17 +185,11 @@ data class AnilistExternalLinks(
|
||||||
@JsonProperty("type") var type: String? = null,
|
@JsonProperty("type") var type: String? = null,
|
||||||
)
|
)
|
||||||
|
|
||||||
data class AnilistMedia(
|
data class AnilistMedia(@JsonProperty("externalLinks") var externalLinks: ArrayList<AnilistExternalLinks> = arrayListOf())
|
||||||
@JsonProperty("externalLinks") var externalLinks: ArrayList<AnilistExternalLinks> = arrayListOf()
|
|
||||||
)
|
|
||||||
|
|
||||||
data class AnilistData(
|
data class AnilistData(@JsonProperty("Media") var Media: AnilistMedia? = AnilistMedia())
|
||||||
@JsonProperty("Media") var Media: AnilistMedia? = AnilistMedia()
|
|
||||||
)
|
|
||||||
|
|
||||||
data class AnilistResponses(
|
data class AnilistResponses(@JsonProperty("data") var data: AnilistData? = AnilistData())
|
||||||
@JsonProperty("data") var data: AnilistData? = AnilistData()
|
|
||||||
)
|
|
||||||
|
|
||||||
data class CrunchyrollToken(
|
data class CrunchyrollToken(
|
||||||
@JsonProperty("access_token") val accessToken: String? = null,
|
@JsonProperty("access_token") val accessToken: String? = null,
|
||||||
|
@ -388,10 +364,7 @@ data class SFMoviesAttributes(
|
||||||
@JsonProperty("contentId") var contentId: String? = null,
|
@JsonProperty("contentId") var contentId: String? = null,
|
||||||
)
|
)
|
||||||
|
|
||||||
data class SFMoviesData(
|
data class SFMoviesData(@JsonProperty("id") var id: Int? = null, @JsonProperty("attributes") var attributes: SFMoviesAttributes? = SFMoviesAttributes())
|
||||||
@JsonProperty("id") var id: Int? = null,
|
|
||||||
@JsonProperty("attributes") var attributes: SFMoviesAttributes? = SFMoviesAttributes()
|
|
||||||
)
|
|
||||||
|
|
||||||
data class SFMoviesSearch(
|
data class SFMoviesSearch(
|
||||||
@JsonProperty("data") var data: ArrayList<SFMoviesData>? = arrayListOf(),
|
@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,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -43,7 +43,7 @@ import com.hexated.SoraExtractor.invokeUhdmovies
|
||||||
import com.hexated.SoraExtractor.invokeVegamovies
|
import com.hexated.SoraExtractor.invokeVegamovies
|
||||||
import com.hexated.SoraExtractor.invokeVidsrcto
|
import com.hexated.SoraExtractor.invokeVidsrcto
|
||||||
import com.hexated.SoraExtractor.invokeCinemaTv
|
import com.hexated.SoraExtractor.invokeCinemaTv
|
||||||
import com.hexated.SoraExtractor.invokeFebbox
|
import com.hexated.SoraExtractor.invokeMMovies
|
||||||
import com.hexated.SoraExtractor.invokeOmovies
|
import com.hexated.SoraExtractor.invokeOmovies
|
||||||
import com.hexated.SoraExtractor.invokeWatchCartoon
|
import com.hexated.SoraExtractor.invokeWatchCartoon
|
||||||
import com.hexated.SoraExtractor.invokeWatchsomuch
|
import com.hexated.SoraExtractor.invokeWatchsomuch
|
||||||
|
@ -68,8 +68,8 @@ open class SoraStream : TmdbProvider() {
|
||||||
TvType.Anime,
|
TvType.Anime,
|
||||||
)
|
)
|
||||||
|
|
||||||
val showboxInterceptor by lazy { CloudflareKiller() }
|
|
||||||
val wpredisInterceptor by lazy { CloudflareKiller() }
|
val wpredisInterceptor by lazy { CloudflareKiller() }
|
||||||
|
val multiInterceptor by lazy { CloudflareKiller() }
|
||||||
|
|
||||||
/** AUTHOR : Hexated & Sora */
|
/** AUTHOR : Hexated & Sora */
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -114,10 +114,9 @@ open class SoraStream : TmdbProvider() {
|
||||||
const val vidsrctoAPI = "https://vidsrc.to"
|
const val vidsrctoAPI = "https://vidsrc.to"
|
||||||
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 watchflxAPI = "https://watchflx.tv"
|
|
||||||
const val showflixAPI = "https://showflix.space"
|
const val showflixAPI = "https://showflix.space"
|
||||||
const val aoneroomAPI = "https://api3.aoneroom.com"
|
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 watchCartoonAPI = "https://www1.watchcartoononline.bz"
|
||||||
|
|
||||||
const val fdMoviesAPI = "https://freedrivemovie.com"
|
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
|
return if (link.startsWith("/")) "https://image.tmdb.org/t/p/original/$link" else link
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun getMainPage(
|
override suspend fun getMainPage(page: Int, request: MainPageRequest): HomePageResponse {
|
||||||
page: Int,
|
val adultQuery = if (settingsForProvider.enableAdult) "" else "&without_keywords=190370|13059|226161|195669"
|
||||||
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 type = if (request.data.contains("/movie")) "movie" else "tv"
|
||||||
val home = app.get("${request.data}$adultQuery&page=$page")
|
val home = app.get("${request.data}$adultQuery&page=$page").parsedSafe<Results>()?.results?.mapNotNull { media ->
|
||||||
.parsedSafe<Results>()?.results
|
|
||||||
?.mapNotNull { media ->
|
|
||||||
media.toSearchResponse(type)
|
media.toSearchResponse(type)
|
||||||
} ?: throw ErrorLoadingException("Invalid Json reponse")
|
} ?: throw ErrorLoadingException("Invalid Json reponse")
|
||||||
return newHomePageResponse(request.name, home)
|
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 quickSearch(query: String): List<SearchResponse>? = search(query)
|
||||||
|
|
||||||
override suspend fun search(query: String): List<SearchResponse>? {
|
override suspend fun search(query: String): List<SearchResponse>? {
|
||||||
return app.get(
|
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 ->
|
||||||
"$tmdbAPI/search/multi?api_key=$apiKey&language=en-US&query=$query&page=1&include_adult=${settingsForProvider.enableAdult}"
|
|
||||||
).parsedSafe<Results>()?.results?.mapNotNull { media ->
|
|
||||||
media.toSearchResponse()
|
media.toSearchResponse()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -241,68 +232,27 @@ open class SoraStream : TmdbProvider() {
|
||||||
val isAsian = !isAnime && (res.original_language == "zh" || res.original_language == "ko")
|
val isAsian = !isAnime && (res.original_language == "zh" || res.original_language == "ko")
|
||||||
val isBollywood = res.production_countries?.any { it.name == "India" } ?: false
|
val isBollywood = res.production_countries?.any { it.name == "India" } ?: false
|
||||||
|
|
||||||
val keywords = res.keywords?.results?.mapNotNull { it.name }.orEmpty()
|
val keywords = res.keywords?.results?.mapNotNull { it.name }.orEmpty().ifEmpty { res.keywords?.keywords?.mapNotNull { it.name } }
|
||||||
.ifEmpty { res.keywords?.keywords?.mapNotNull { it.name } }
|
|
||||||
|
|
||||||
val actors = res.credits?.cast?.mapNotNull { cast ->
|
val actors = res.credits?.cast?.mapNotNull { cast ->
|
||||||
ActorData(
|
ActorData(Actor(cast.name ?: cast.originalName
|
||||||
Actor(
|
?: return@mapNotNull null, getImageUrl(cast.profilePath)), roleString = cast.character)
|
||||||
cast.name ?: cast.originalName ?: return@mapNotNull null,
|
|
||||||
getImageUrl(cast.profilePath)
|
|
||||||
),
|
|
||||||
roleString = cast.character
|
|
||||||
)
|
|
||||||
} ?: return null
|
} ?: return null
|
||||||
val recommendations =
|
val recommendations = res.recommendations?.results?.mapNotNull { media -> media.toSearchResponse() }
|
||||||
res.recommendations?.results?.mapNotNull { media -> media.toSearchResponse() }
|
|
||||||
|
|
||||||
val trailer = res.videos?.results?.map { "https://www.youtube.com/watch?v=${it.key}" }
|
val trailer = res.videos?.results?.map { "https://www.youtube.com/watch?v=${it.key}" }?.randomOrNull()
|
||||||
?.randomOrNull()
|
|
||||||
|
|
||||||
return if (type == TvType.TvSeries) {
|
return if (type == TvType.TvSeries) {
|
||||||
val lastSeason = res.last_episode_to_air?.season_number
|
val lastSeason = res.last_episode_to_air?.season_number
|
||||||
val episodes = res.seasons?.mapNotNull { season ->
|
val episodes = res.seasons?.mapNotNull { season ->
|
||||||
app.get("$tmdbAPI/${data.type}/${data.id}/season/${season.seasonNumber}?api_key=$apiKey")
|
app.get("$tmdbAPI/${data.type}/${data.id}/season/${season.seasonNumber}?api_key=$apiKey").parsedSafe<MediaDetailEpisodes>()?.episodes?.map { eps ->
|
||||||
.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
|
||||||
Episode(
|
?: 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 {
|
||||||
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)
|
this.addDate(eps.airDate)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}?.flatten() ?: listOf()
|
}?.flatten() ?: listOf()
|
||||||
newTvSeriesLoadResponse(
|
newTvSeriesLoadResponse(title, url, if (isAnime) TvType.Anime else TvType.TvSeries, episodes) {
|
||||||
title,
|
|
||||||
url,
|
|
||||||
if (isAnime) TvType.Anime else TvType.TvSeries,
|
|
||||||
episodes
|
|
||||||
) {
|
|
||||||
this.posterUrl = poster
|
this.posterUrl = poster
|
||||||
this.backgroundPosterUrl = bgPoster
|
this.backgroundPosterUrl = bgPoster
|
||||||
this.year = year
|
this.year = year
|
||||||
|
@ -322,20 +272,8 @@ open class SoraStream : TmdbProvider() {
|
||||||
title,
|
title,
|
||||||
url,
|
url,
|
||||||
TvType.Movie,
|
TvType.Movie,
|
||||||
LinkData(
|
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
|
||||||
data.id,
|
?: res.firstAirDate, isAsian = isAsian, isBollywood = isBollywood).toJson(),
|
||||||
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.posterUrl = poster
|
||||||
this.backgroundPosterUrl = bgPoster
|
this.backgroundPosterUrl = bgPoster
|
||||||
|
@ -355,46 +293,16 @@ open class SoraStream : TmdbProvider() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun loadLinks(
|
override suspend fun loadLinks(data: String, isCasting: Boolean, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit): Boolean {
|
||||||
data: String,
|
|
||||||
isCasting: Boolean,
|
|
||||||
subtitleCallback: (SubtitleFile) -> Unit,
|
|
||||||
callback: (ExtractorLink) -> Unit
|
|
||||||
): Boolean {
|
|
||||||
|
|
||||||
val res = parseJson<LinkData>(data)
|
val res = parseJson<LinkData>(data)
|
||||||
|
|
||||||
argamap(
|
argamap(
|
||||||
// {
|
|
||||||
// invokeFebbox(
|
|
||||||
// res.title,
|
|
||||||
// res.year,
|
|
||||||
// res.season,
|
|
||||||
// res.lastSeason,
|
|
||||||
// res.episode,
|
|
||||||
// callback
|
|
||||||
// )
|
|
||||||
// },
|
|
||||||
{
|
{
|
||||||
invokeDumpStream(
|
invokeDumpStream(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeGoku(
|
invokeGoku(res.title, res.year, res.season, res.lastSeason, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.lastSeason,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeVidSrc(res.id, res.season, res.episode, 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)
|
invokeDbgo(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeAoneroom(
|
if (!res.isAnime) invokeAoneroom(res.title, res.airedYear
|
||||||
res.title,
|
?: res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.airedYear ?: res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (res.isAnime) invokeAnimes(
|
if (res.isAnime) invokeAnimes(res.title, res.epsTitle, res.date, res.airedDate, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.epsTitle,
|
|
||||||
res.date,
|
|
||||||
res.airedDate,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeDreamfilm(
|
if (!res.isAnime) invokeDreamfilm(res.title, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
// invokeNoverse(res.title, res.season, res.episode, callback)
|
// invokeNoverse(res.title, res.season, res.episode, callback)
|
||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeFilmxy(
|
if (!res.isAnime) invokeFilmxy(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.imdbId,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime && res.isCartoon) invokeKimcartoon(
|
if (!res.isAnime && res.isCartoon) invokeKimcartoon(res.title, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime && res.isCartoon) invokeWatchCartoon(
|
if (!res.isAnime && res.isCartoon) invokeWatchCartoon(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeVidsrcto(
|
if (!res.isAnime) invokeVidsrcto(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.imdbId,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (res.isAsian || res.isAnime) invokeKisskh(
|
if (res.isAsian || res.isAnime) invokeKisskh(res.title, res.season, res.episode, res.isAnime, res.lastSeason, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
res.isAnime,
|
|
||||||
res.lastSeason,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeOmovies (
|
if (!res.isAnime) invokeOmovies(res.title, res.year, res.season, res.episode, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeLing(
|
if (!res.isAnime) invokeLing(res.title, res.airedYear
|
||||||
res.title,
|
?: res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.airedYear ?: res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeUhdmovies(
|
if (!res.isAnime) invokeUhdmovies(res.title, res.year, res.season, res.episode, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeGMovies(
|
if (!res.isAnime) invokeGMovies(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeFDMovies(
|
if (!res.isAnime) invokeFDMovies(res.title, res.season, res.episode, callback)
|
||||||
res.title,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeM4uhd(
|
if (!res.isAnime) invokeM4uhd(res.title, res.airedYear
|
||||||
res.title,
|
?: res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.airedYear ?: res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeTvMovies(res.title, res.season, res.episode, callback)
|
if (!res.isAnime) invokeTvMovies(res.title, res.season, res.episode, callback)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeMoviezAdd(
|
if (!res.isAnime) invokeMoviezAdd(moviezAddAPI, "MoviezAdd", res.title, res.year, res.season, res.episode, callback)
|
||||||
moviezAddAPI,
|
|
||||||
"MoviezAdd",
|
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime && res.isBollywood) invokeBollyMaza(
|
if (!res.isAnime && res.isBollywood) invokeBollyMaza(bollyMazaAPI, "BollyMaza", res.title, res.year, res.season, res.episode, callback)
|
||||||
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) invokeRStream(res.id, res.season, res.episode, callback)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeFlixon(
|
if (!res.isAnime) invokeFlixon(res.id, res.imdbId, res.season, res.episode, callback)
|
||||||
res.id,
|
|
||||||
res.imdbId,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeSmashyStream(
|
if (!res.isAnime) invokeSmashyStream(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.imdbId,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeWatchsomuch(
|
if (!res.isAnime) invokeWatchsomuch(res.imdbId, res.season, res.episode, subtitleCallback)
|
||||||
res.imdbId,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeNinetv(
|
if (!res.isAnime) invokeNinetv(res.id, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.id,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeDahmerMovies(
|
invokeDahmerMovies(res.title, res.year, res.season, res.episode, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeCinemaTv(
|
invokeCinemaTv(res.imdbId, res.title, res.airedYear
|
||||||
res.imdbId,
|
?: res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
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) invokeNowTv(res.id, res.imdbId, res.season, res.episode, callback)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime && res.season == null) invokeRidomovies(
|
if (!res.isAnime && res.season == null) invokeRidomovies(res.id, res.imdbId, callback)
|
||||||
res.id,
|
|
||||||
res.imdbId,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeAllMovieland(res.imdbId, res.season, res.episode, callback)
|
if (!res.isAnime) invokeAllMovieland(res.imdbId, res.season, res.episode, callback)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeEmovies(
|
if (!res.isAnime) invokeEmovies(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeVegamovies(
|
if (!res.isAnime) invokeVegamovies(res.title, res.year, res.season, res.lastSeason, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.lastSeason,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime && res.isBollywood) invokeDotmovies(
|
if (!res.isAnime && res.isBollywood) invokeDotmovies(res.title, res.year, res.season, res.lastSeason, res.episode, subtitleCallback, callback)
|
||||||
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)
|
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)
|
if (res.isBollywood) invokeMultimovies(multimovies2API, res.title, res.season, res.episode, subtitleCallback, callback)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeNetmovies(
|
invokeNetmovies(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime && res.season == null) invokeDoomovies(
|
if (!res.isAnime && res.season == null) invokeDoomovies(res.title, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (res.isAsian) invokeDramaday(
|
if (res.isAsian) invokeDramaday(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
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)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeHdmovies4u(
|
if (!res.isAnime) invokeHdmovies4u(res.title, res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.imdbId,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeZshow(
|
invokeZshow(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeShowflix(
|
if (!res.isAnime) invokeShowflix(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeSFMovies(
|
if (!res.isAnime) invokeSFMovies(res.id, res.title, res.airedYear
|
||||||
res.id,
|
?: res.year, res.season, res.episode, callback)
|
||||||
res.title,
|
},
|
||||||
res.airedYear ?: res.year,
|
{
|
||||||
res.season,
|
invokeMMovies(res.title, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.episode,
|
},
|
||||||
callback
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
|
@ -29,7 +29,7 @@ import com.hexated.SoraExtractor.invokeShowflix
|
||||||
import com.hexated.SoraExtractor.invokeVidSrc
|
import com.hexated.SoraExtractor.invokeVidSrc
|
||||||
import com.hexated.SoraExtractor.invokeVidsrcto
|
import com.hexated.SoraExtractor.invokeVidsrcto
|
||||||
import com.hexated.SoraExtractor.invokeCinemaTv
|
import com.hexated.SoraExtractor.invokeCinemaTv
|
||||||
import com.hexated.SoraExtractor.invokeFebbox
|
import com.hexated.SoraExtractor.invokeMMovies
|
||||||
import com.hexated.SoraExtractor.invokeOmovies
|
import com.hexated.SoraExtractor.invokeOmovies
|
||||||
import com.hexated.SoraExtractor.invokeWatchCartoon
|
import com.hexated.SoraExtractor.invokeWatchCartoon
|
||||||
import com.hexated.SoraExtractor.invokeWatchsomuch
|
import com.hexated.SoraExtractor.invokeWatchsomuch
|
||||||
|
@ -42,63 +42,22 @@ import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||||
class SoraStreamLite : SoraStream() {
|
class SoraStreamLite : SoraStream() {
|
||||||
override var name = "SoraStream-Lite"
|
override var name = "SoraStream-Lite"
|
||||||
|
|
||||||
override suspend fun loadLinks(
|
override suspend fun loadLinks(data: String, isCasting: Boolean, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit): Boolean {
|
||||||
data: String,
|
|
||||||
isCasting: Boolean,
|
|
||||||
subtitleCallback: (SubtitleFile) -> Unit,
|
|
||||||
callback: (ExtractorLink) -> Unit
|
|
||||||
): Boolean {
|
|
||||||
|
|
||||||
val res = AppUtils.parseJson<LinkData>(data)
|
val res = AppUtils.parseJson<LinkData>(data)
|
||||||
|
|
||||||
argamap(
|
argamap(
|
||||||
// {
|
|
||||||
// invokeFebbox(
|
|
||||||
// res.title,
|
|
||||||
// res.year,
|
|
||||||
// res.season,
|
|
||||||
// res.lastSeason,
|
|
||||||
// res.episode,
|
|
||||||
// callback
|
|
||||||
// )
|
|
||||||
// },
|
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeWatchsomuch(
|
if (!res.isAnime) invokeWatchsomuch(res.imdbId, res.season, res.episode, subtitleCallback)
|
||||||
res.imdbId,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeDumpStream(
|
invokeDumpStream(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeNinetv(
|
if (!res.isAnime) invokeNinetv(res.id, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.id,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeGoku(
|
invokeGoku(res.title, res.year, res.season, res.lastSeason, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.lastSeason,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeVidSrc(res.id, res.season, res.episode, 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)
|
invokeDbgo(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime && res.isCartoon) invokeWatchCartoon(
|
if (!res.isAnime && res.isCartoon) invokeWatchCartoon(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (res.isAnime) invokeAnimes(
|
if (res.isAnime) invokeAnimes(res.title, res.epsTitle, res.date, res.airedDate, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.epsTitle,
|
|
||||||
res.date,
|
|
||||||
res.airedDate,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeDreamfilm(
|
if (!res.isAnime) invokeDreamfilm(res.title, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeFilmxy(
|
if (!res.isAnime) invokeFilmxy(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.imdbId,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeOmovies(
|
if (!res.isAnime) invokeOmovies(res.title, res.year, res.season, res.episode, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime && res.isCartoon) invokeKimcartoon(
|
if (!res.isAnime && res.isCartoon) invokeKimcartoon(res.title, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeSmashyStream(
|
if (!res.isAnime) invokeSmashyStream(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.imdbId,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeVidsrcto(
|
if (!res.isAnime) invokeVidsrcto(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.imdbId,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (res.isAsian || res.isAnime) invokeKisskh(
|
if (res.isAsian || res.isAnime) invokeKisskh(res.title, res.season, res.episode, res.isAnime, res.lastSeason, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
res.isAnime,
|
|
||||||
res.lastSeason,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeLing(
|
if (!res.isAnime) invokeLing(res.title, res.airedYear
|
||||||
res.title,
|
?: res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.airedYear ?: res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if(!res.isAnime) invokeM4uhd(
|
if (!res.isAnime) invokeM4uhd(res.title, res.airedYear
|
||||||
res.title,
|
?: res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.airedYear ?: res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeRStream(res.id, res.season, res.episode, 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)
|
if (!res.isAnime) invokeFlixon(res.id, res.imdbId, res.season, res.episode, callback)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeCinemaTv(
|
invokeCinemaTv(res.imdbId, res.title, res.airedYear
|
||||||
res.imdbId,
|
?: res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
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) invokeNowTv(res.id, res.imdbId, res.season, res.episode, callback)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeAoneroom(
|
if (!res.isAnime) invokeAoneroom(res.title, res.airedYear
|
||||||
res.title,
|
?: res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.airedYear ?: res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime && res.season == null) invokeRidomovies(
|
if (!res.isAnime && res.season == null) invokeRidomovies(res.id, res.imdbId, callback)
|
||||||
res.id,
|
|
||||||
res.imdbId,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeEmovies(
|
if (!res.isAnime) invokeEmovies(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (res.isBollywood) invokeMultimovies(multimoviesAPI, res.title, 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)
|
if (res.isBollywood) invokeMultimovies(multimovies2API, res.title, res.season, res.episode, subtitleCallback, callback)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeNetmovies(
|
invokeNetmovies(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeAllMovieland(res.imdbId, res.season, res.episode, callback)
|
if (!res.isAnime) invokeAllMovieland(res.imdbId, res.season, res.episode, callback)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime && res.season == null) invokeDoomovies(
|
if (!res.isAnime && res.season == null) invokeDoomovies(res.title, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if(res.isAsian) invokeDramaday(
|
if (res.isAsian) invokeDramaday(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if(!res.isAnime) invoke2embed(
|
if (!res.isAnime) invoke2embed(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.imdbId,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeZshow(
|
invokeZshow(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime) invokeShowflix(
|
if (!res.isAnime) invokeShowflix(res.title, res.year, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.title,
|
|
||||||
res.year,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if(!res.isAnime) invokeSFMovies(
|
if (!res.isAnime) invokeSFMovies(res.id, res.title, res.airedYear
|
||||||
res.id,
|
?: res.year, res.season, res.episode, callback)
|
||||||
res.title,
|
},
|
||||||
res.airedYear ?: res.year,
|
{
|
||||||
res.season,
|
invokeMMovies(res.title, res.season, res.episode, subtitleCallback, callback)
|
||||||
res.episode,
|
},
|
||||||
callback
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
Loading…
Reference in a new issue