mirror of
https://github.com/hexated/cloudstream-extensions-hexated.git
synced 2024-08-15 00:03:22 +00:00
sora/goku: fix missing shows
This commit is contained in:
parent
05f2bce9a8
commit
a61bbf7dab
5 changed files with 63 additions and 174 deletions
|
@ -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 = 151
|
version = 152
|
||||||
|
|
||||||
android {
|
android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
|
|
|
@ -8,6 +8,7 @@ import com.lagradost.nicehttp.Session
|
||||||
import com.hexated.RabbitStream.extractRabbitStream
|
import com.hexated.RabbitStream.extractRabbitStream
|
||||||
import com.lagradost.cloudstream3.extractors.Filesim
|
import com.lagradost.cloudstream3.extractors.Filesim
|
||||||
import com.lagradost.cloudstream3.extractors.StreamSB
|
import com.lagradost.cloudstream3.extractors.StreamSB
|
||||||
|
import com.lagradost.cloudstream3.extractors.Voe
|
||||||
import com.lagradost.cloudstream3.extractors.helper.GogoHelper
|
import com.lagradost.cloudstream3.extractors.helper.GogoHelper
|
||||||
import com.lagradost.cloudstream3.network.CloudflareKiller
|
import com.lagradost.cloudstream3.network.CloudflareKiller
|
||||||
import com.lagradost.nicehttp.RequestBodyTypes
|
import com.lagradost.nicehttp.RequestBodyTypes
|
||||||
|
@ -42,18 +43,18 @@ object SoraExtractor : SoraStream() {
|
||||||
val media = app.get(
|
val media = app.get(
|
||||||
"$gokuAPI/ajax/movie/search?keyword=$title", headers = headers
|
"$gokuAPI/ajax/movie/search?keyword=$title", headers = headers
|
||||||
).document.select("div.item").find { ele ->
|
).document.select("div.item").find { ele ->
|
||||||
val url = ele.selectFirst("a")?.attr("href")
|
val url = ele.selectFirst("a.movie-link")?.attr("href")
|
||||||
val titleMedia = ele.select("h3.movie-name").text()
|
val titleMedia = ele.select("h3.movie-name").text()
|
||||||
val yearMedia =
|
val titleSlug = title.createSlug()
|
||||||
ele.select("div.info-split > div:first-child").text().toIntOrNull()
|
val yearMedia = ele.select("div.info-split > div:first-child").text().toIntOrNull()
|
||||||
val lastSeasonMedia =
|
val lastSeasonMedia = ele.select("div.info-split > div:nth-child(2)").text().substringAfter("SS")
|
||||||
ele.select("div.info-split > div:nth-child(2)").text().substringAfter("SS")
|
|
||||||
.substringBefore("/").trim().toIntOrNull()
|
.substringBefore("/").trim().toIntOrNull()
|
||||||
(titleMedia.equals(title, true) || titleMedia.createSlug().equals(title.createSlug())) &&
|
(titleMedia.equals(title, true) || titleMedia.createSlug()
|
||||||
|
.equals(titleSlug) || url?.contains("$titleSlug-") == true) &&
|
||||||
(if (season == null) {
|
(if (season == null) {
|
||||||
yearMedia == year && url?.contains("/watch-movie/") == true
|
yearMedia == year && url?.contains("/movie/") == true
|
||||||
} else {
|
} else {
|
||||||
lastSeasonMedia == lastSeason && url?.contains("/watch-series/") == true
|
lastSeasonMedia == lastSeason && url?.contains("/series/") == true
|
||||||
})
|
})
|
||||||
} ?: return
|
} ?: return
|
||||||
|
|
||||||
|
@ -479,6 +480,34 @@ object SoraExtractor : SoraStream() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
suspend fun invokeDoomovies(
|
||||||
|
title: String? = null,
|
||||||
|
subtitleCallback: (SubtitleFile) -> Unit,
|
||||||
|
callback: (ExtractorLink) -> Unit
|
||||||
|
) {
|
||||||
|
val res = app.get("$doomoviesAPI/movies/${title.createSlug()}/")
|
||||||
|
val host = getBaseUrl(res.url)
|
||||||
|
val document = res.document
|
||||||
|
document.select("ul#playeroptionsul > li")
|
||||||
|
.filter { element -> element.select("span.flag img").attr("src").contains("/en.") }
|
||||||
|
.map {
|
||||||
|
Triple(
|
||||||
|
it.attr("data-post"),
|
||||||
|
it.attr("data-nume"),
|
||||||
|
it.attr("data-type")
|
||||||
|
)
|
||||||
|
}.apmap { (id, nume, type) ->
|
||||||
|
val source = app.get(
|
||||||
|
"$host/wp-json/dooplayer/v2/${id}/${type}/${nume}",
|
||||||
|
headers = mapOf("X-Requested-With" to "XMLHttpRequest"),
|
||||||
|
referer = "$host/"
|
||||||
|
).parsed<ResponseHash>().embed_url
|
||||||
|
if (!source.contains("youtube")) {
|
||||||
|
loadExtractor(source, "$host/", subtitleCallback, callback)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
suspend fun invokeUniqueStream(
|
suspend fun invokeUniqueStream(
|
||||||
title: String? = null,
|
title: String? = null,
|
||||||
year: Int? = null,
|
year: Int? = null,
|
||||||
|
@ -1080,70 +1109,6 @@ object SoraExtractor : SoraStream() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun invokeAnimeKaizoku(
|
|
||||||
malId: Int? = null,
|
|
||||||
epsTitle: String? = null,
|
|
||||||
season: Int? = null,
|
|
||||||
episode: Int? = null,
|
|
||||||
callback: (ExtractorLink) -> Unit
|
|
||||||
) {
|
|
||||||
val search = app.get("$animeKaizokuAPI/?s=${malId ?: return}").document
|
|
||||||
val detailHref =
|
|
||||||
search.select("ul#posts-container li").map { it.selectFirst("a")?.attr("href") }
|
|
||||||
.find {
|
|
||||||
it?.contains("$malId") == true
|
|
||||||
}?.let { fixUrl(it, animeKaizokuAPI) }
|
|
||||||
|
|
||||||
val detail = app.get(detailHref ?: return).document
|
|
||||||
val postId =
|
|
||||||
detail.selectFirst("link[rel=shortlink]")?.attr("href")?.substringAfter("?p=") ?: return
|
|
||||||
val script = detail.selectFirst("script:containsData(DDL)")?.data()?.splitData() ?: return
|
|
||||||
|
|
||||||
val media = fetchingKaizoku(animeKaizokuAPI, postId, script, detailHref).document
|
|
||||||
val iframe = media.select("tbody td[colspan=2]").map { it.attr("onclick") to it.text() }
|
|
||||||
.filter { it.second.contains("1080p", true) }
|
|
||||||
|
|
||||||
val eps = if (season == null) {
|
|
||||||
null
|
|
||||||
} else {
|
|
||||||
if (episode!! < 10) "0$episode" else episode
|
|
||||||
}
|
|
||||||
|
|
||||||
iframe.apmap { (data, name) ->
|
|
||||||
val worker =
|
|
||||||
fetchingKaizoku(animeKaizokuAPI, postId, data.splitData(), detailHref).document
|
|
||||||
.select("tbody td")
|
|
||||||
.map { Triple(it.attr("onclick"), it.text(), it.nextElementSibling()?.text()) }
|
|
||||||
|
|
||||||
val episodeData = worker.let { list ->
|
|
||||||
if (season == null) list.firstOrNull() else list.find {
|
|
||||||
it.second.contains(
|
|
||||||
Regex("($eps\\.)|(-\\s$eps)")
|
|
||||||
) || it.second.contains("$epsTitle", true)
|
|
||||||
}
|
|
||||||
} ?: return@apmap null
|
|
||||||
|
|
||||||
val ouo = fetchingKaizoku(
|
|
||||||
animeKaizokuAPI,
|
|
||||||
postId,
|
|
||||||
episodeData.first.splitData(),
|
|
||||||
detailHref
|
|
||||||
).text.substringAfter("openInNewTab(\"")
|
|
||||||
.substringBefore("\")").let { base64Decode(it) }
|
|
||||||
|
|
||||||
if (!ouo.startsWith("https://ouo")) return@apmap null
|
|
||||||
callback.invoke(
|
|
||||||
ExtractorLink(
|
|
||||||
"AnimeKaizoku",
|
|
||||||
"AnimeKaizoku [${episodeData.third}]",
|
|
||||||
bypassOuo(ouo) ?: return@apmap null,
|
|
||||||
"$animeKaizokuAPI/",
|
|
||||||
Qualities.P1080.value,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun invokeLing(
|
suspend fun invokeLing(
|
||||||
title: String? = null,
|
title: String? = null,
|
||||||
year: Int? = null,
|
year: Int? = null,
|
||||||
|
@ -1960,81 +1925,6 @@ object SoraExtractor : SoraStream() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun invokeMovie123Net(
|
|
||||||
title: String? = null,
|
|
||||||
season: Int? = null,
|
|
||||||
episode: Int? = null,
|
|
||||||
subtitleCallback: (SubtitleFile) -> Unit,
|
|
||||||
callback: (ExtractorLink) -> Unit,
|
|
||||||
) {
|
|
||||||
val server = "https://vidcloud9.org"
|
|
||||||
val fixTitle = title.createSlug()
|
|
||||||
val m = app.get("$movie123NetAPI/searching?q=$title&limit=40")
|
|
||||||
.parsedSafe<Movie123Search>()?.data?.find {
|
|
||||||
if (season == null) {
|
|
||||||
(it.t.equals(title, true) || it.t.createSlug()
|
|
||||||
.equals(fixTitle)) && it.t?.contains("season", true) == false
|
|
||||||
} else {
|
|
||||||
it.t?.equals(
|
|
||||||
"$title - Season $season",
|
|
||||||
true
|
|
||||||
) == true || it.s?.contains("$fixTitle-season-$season-", true) == true
|
|
||||||
}
|
|
||||||
}?.s?.substringAfterLast("-") ?: return
|
|
||||||
|
|
||||||
listOf(
|
|
||||||
"1",
|
|
||||||
"2"
|
|
||||||
).apmap { serverNum ->
|
|
||||||
val media = app.post(
|
|
||||||
"$movie123NetAPI/datas",
|
|
||||||
requestBody = """{"m":$m,"e":${episode ?: 1},"s":$serverNum}""".toRequestBody(
|
|
||||||
RequestBodyTypes.JSON.toMediaTypeOrNull()
|
|
||||||
)
|
|
||||||
).parsedSafe<Movie123Media>()?.url ?: return@apmap null
|
|
||||||
|
|
||||||
val serverUrl = "$server/watch?v=$media"
|
|
||||||
val token =
|
|
||||||
app.get(serverUrl).document.selectFirst("script:containsData(setRequestHeader)")
|
|
||||||
?.data()?.let {
|
|
||||||
Regex("\\('0x1f2'\\),'(\\S+?)'\\)").find(it)?.groupValues?.getOrNull(1)
|
|
||||||
} ?: return@apmap null
|
|
||||||
|
|
||||||
val videoUrl = app.post(
|
|
||||||
"$server/data",
|
|
||||||
requestBody = """{"doc":"$media"}""".toRequestBody(
|
|
||||||
RequestBodyTypes.JSON.toMediaTypeOrNull()
|
|
||||||
),
|
|
||||||
headers = mapOf(
|
|
||||||
"x-csrf-token" to token
|
|
||||||
),
|
|
||||||
).parsedSafe<Movie123Media>()?.url ?: return@apmap null
|
|
||||||
|
|
||||||
if (videoUrl.startsWith("https")) {
|
|
||||||
loadExtractor(videoUrl, movie123NetAPI, subtitleCallback, callback)
|
|
||||||
} else {
|
|
||||||
callback.invoke(
|
|
||||||
ExtractorLink(
|
|
||||||
"123Movies",
|
|
||||||
"123Movies",
|
|
||||||
fixUrl(base64Decode(videoUrl), server),
|
|
||||||
serverUrl,
|
|
||||||
Qualities.P720.value,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
subtitleCallback.invoke(
|
|
||||||
SubtitleFile(
|
|
||||||
"English",
|
|
||||||
"https://sub.vxdn.net/sub/$m-${episode ?: 1}.vtt"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun invokeSmashyStream(
|
suspend fun invokeSmashyStream(
|
||||||
imdbId: String? = null,
|
imdbId: String? = null,
|
||||||
season: Int? = null,
|
season: Int? = null,
|
||||||
|
@ -3291,3 +3181,8 @@ class MultimoviesSB : StreamSB() {
|
||||||
override var mainUrl = "https://multimovies.website"
|
override var mainUrl = "https://multimovies.website"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Yipsu : Voe() {
|
||||||
|
override val name = "Yipsu"
|
||||||
|
override var mainUrl = "https://yip.su"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ import com.lagradost.cloudstream3.*
|
||||||
import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer
|
import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer
|
||||||
import com.lagradost.cloudstream3.metaproviders.TmdbProvider
|
import com.lagradost.cloudstream3.metaproviders.TmdbProvider
|
||||||
import com.hexated.SoraExtractor.invokeDahmerMovies
|
import com.hexated.SoraExtractor.invokeDahmerMovies
|
||||||
|
import com.hexated.SoraExtractor.invokeDoomovies
|
||||||
import com.hexated.SoraExtractor.invokeDreamfilm
|
import com.hexated.SoraExtractor.invokeDreamfilm
|
||||||
import com.hexated.SoraExtractor.invokeEdithxmovies
|
import com.hexated.SoraExtractor.invokeEdithxmovies
|
||||||
import com.hexated.SoraExtractor.invokeFDMovies
|
import com.hexated.SoraExtractor.invokeFDMovies
|
||||||
|
@ -34,7 +35,6 @@ import com.hexated.SoraExtractor.invokeJmdkhMovies
|
||||||
import com.hexated.SoraExtractor.invokeKisskh
|
import com.hexated.SoraExtractor.invokeKisskh
|
||||||
import com.hexated.SoraExtractor.invokeLing
|
import com.hexated.SoraExtractor.invokeLing
|
||||||
import com.hexated.SoraExtractor.invokeM4uhd
|
import com.hexated.SoraExtractor.invokeM4uhd
|
||||||
import com.hexated.SoraExtractor.invokeMovie123Net
|
|
||||||
import com.hexated.SoraExtractor.invokeMoviesbay
|
import com.hexated.SoraExtractor.invokeMoviesbay
|
||||||
import com.hexated.SoraExtractor.invokeMoviezAdd
|
import com.hexated.SoraExtractor.invokeMoviezAdd
|
||||||
import com.hexated.SoraExtractor.invokeNavy
|
import com.hexated.SoraExtractor.invokeNavy
|
||||||
|
@ -116,7 +116,6 @@ open class SoraStream : TmdbProvider() {
|
||||||
const val moviesbayAPI = "https://moviesbay.live"
|
const val moviesbayAPI = "https://moviesbay.live"
|
||||||
const val rStreamAPI = "https://remotestre.am"
|
const val rStreamAPI = "https://remotestre.am"
|
||||||
const val flixonAPI = "https://flixon.lol"
|
const val flixonAPI = "https://flixon.lol"
|
||||||
const val movie123NetAPI = "https://ww8.0123movie.net"
|
|
||||||
const val smashyStreamAPI = "https://embed.smashystream.com"
|
const val smashyStreamAPI = "https://embed.smashystream.com"
|
||||||
const val watchSomuchAPI = "https://watchsomuch.tv" // sub only
|
const val watchSomuchAPI = "https://watchsomuch.tv" // sub only
|
||||||
val gomoviesAPI =
|
val gomoviesAPI =
|
||||||
|
@ -137,6 +136,7 @@ open class SoraStream : TmdbProvider() {
|
||||||
const val multimoviesAPI = "https://multimovies.xyz"
|
const val multimoviesAPI = "https://multimovies.xyz"
|
||||||
const val netmoviesAPI = "https://netmovies.to"
|
const val netmoviesAPI = "https://netmovies.to"
|
||||||
const val momentAPI = "https://moment-explanation-i-244.site"
|
const val momentAPI = "https://moment-explanation-i-244.site"
|
||||||
|
const val doomoviesAPI = "https://doomovies.net"
|
||||||
|
|
||||||
// INDEX SITE
|
// INDEX SITE
|
||||||
const val blackMoviesAPI = "https://dl.blacklistedbois.workers.dev/0:"
|
const val blackMoviesAPI = "https://dl.blacklistedbois.workers.dev/0:"
|
||||||
|
@ -162,7 +162,6 @@ open class SoraStream : TmdbProvider() {
|
||||||
const val baymoviesAPI = "https://opengatewayindex.pages.dev"
|
const val baymoviesAPI = "https://opengatewayindex.pages.dev"
|
||||||
const val papaonMovies1API = "https://m.papaonwork.workers.dev/0:"
|
const val papaonMovies1API = "https://m.papaonwork.workers.dev/0:"
|
||||||
const val papaonMovies2API = "https://m.papaonwork.workers.dev/1:"
|
const val papaonMovies2API = "https://m.papaonwork.workers.dev/1:"
|
||||||
const val animeKaizokuAPI = "https://animekaizoku.com"
|
|
||||||
const val xMovieAPI = "https://xemovies.to"
|
const val xMovieAPI = "https://xemovies.to"
|
||||||
|
|
||||||
fun getType(t: String?): TvType {
|
fun getType(t: String?): TvType {
|
||||||
|
@ -643,9 +642,6 @@ open class SoraStream : TmdbProvider() {
|
||||||
{
|
{
|
||||||
invokeFlixon(res.id, res.imdbId, res.season, res.episode, callback)
|
invokeFlixon(res.id, res.imdbId, res.season, res.episode, callback)
|
||||||
},
|
},
|
||||||
{
|
|
||||||
invokeMovie123Net(res.title, res.season, res.episode, subtitleCallback, callback)
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
invokeSmashyStream(
|
invokeSmashyStream(
|
||||||
res.imdbId,
|
res.imdbId,
|
||||||
|
@ -878,7 +874,14 @@ open class SoraStream : TmdbProvider() {
|
||||||
subtitleCallback,
|
subtitleCallback,
|
||||||
callback
|
callback
|
||||||
)
|
)
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
if (!res.isAnime && res.season == null) invokeDoomovies(
|
||||||
|
res.title,
|
||||||
|
subtitleCallback,
|
||||||
|
callback
|
||||||
|
)
|
||||||
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
@ -1033,13 +1036,6 @@ open class SoraStream : TmdbProvider() {
|
||||||
@JsonProperty("alternative_titles") val alternative_titles: ResultsAltTitles? = null,
|
@JsonProperty("alternative_titles") val alternative_titles: ResultsAltTitles? = null,
|
||||||
)
|
)
|
||||||
|
|
||||||
data class EmbedJson(
|
|
||||||
@JsonProperty("type") val type: String? = null,
|
|
||||||
@JsonProperty("link") val link: String? = null,
|
|
||||||
@JsonProperty("sources") val sources: List<String?> = arrayListOf(),
|
|
||||||
@JsonProperty("tracks") val tracks: List<String>? = null,
|
|
||||||
)
|
|
||||||
|
|
||||||
data class MovieHabData(
|
data class MovieHabData(
|
||||||
@JsonProperty("link") val link: String? = null,
|
@JsonProperty("link") val link: String? = null,
|
||||||
@JsonProperty("token") val token: String? = null,
|
@JsonProperty("token") val token: String? = null,
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.hexated
|
||||||
import com.hexated.SoraExtractor.invokeAnimes
|
import com.hexated.SoraExtractor.invokeAnimes
|
||||||
import com.hexated.SoraExtractor.invokeAsk4Movies
|
import com.hexated.SoraExtractor.invokeAsk4Movies
|
||||||
import com.hexated.SoraExtractor.invokeDbgo
|
import com.hexated.SoraExtractor.invokeDbgo
|
||||||
|
import com.hexated.SoraExtractor.invokeDoomovies
|
||||||
import com.hexated.SoraExtractor.invokeDreamfilm
|
import com.hexated.SoraExtractor.invokeDreamfilm
|
||||||
import com.hexated.SoraExtractor.invokeFilmxy
|
import com.hexated.SoraExtractor.invokeFilmxy
|
||||||
import com.hexated.SoraExtractor.invokeFlixon
|
import com.hexated.SoraExtractor.invokeFlixon
|
||||||
|
@ -16,7 +17,6 @@ import com.hexated.SoraExtractor.invokeKimcartoon
|
||||||
import com.hexated.SoraExtractor.invokeKisskh
|
import com.hexated.SoraExtractor.invokeKisskh
|
||||||
import com.hexated.SoraExtractor.invokeLing
|
import com.hexated.SoraExtractor.invokeLing
|
||||||
import com.hexated.SoraExtractor.invokeM4uhd
|
import com.hexated.SoraExtractor.invokeM4uhd
|
||||||
import com.hexated.SoraExtractor.invokeMovie123Net
|
|
||||||
import com.hexated.SoraExtractor.invokeMovieHab
|
import com.hexated.SoraExtractor.invokeMovieHab
|
||||||
import com.hexated.SoraExtractor.invokeNavy
|
import com.hexated.SoraExtractor.invokeNavy
|
||||||
import com.hexated.SoraExtractor.invokeNinetv
|
import com.hexated.SoraExtractor.invokeNinetv
|
||||||
|
@ -35,7 +35,6 @@ import com.hexated.SoraExtractor.invokeNetmovies
|
||||||
import com.hexated.SoraExtractor.invokeVidSrc
|
import com.hexated.SoraExtractor.invokeVidSrc
|
||||||
import com.hexated.SoraExtractor.invokeWatchOnline
|
import com.hexated.SoraExtractor.invokeWatchOnline
|
||||||
import com.hexated.SoraExtractor.invokeWatchsomuch
|
import com.hexated.SoraExtractor.invokeWatchsomuch
|
||||||
import com.hexated.SoraExtractor.invokeXmovies
|
|
||||||
import com.lagradost.cloudstream3.SubtitleFile
|
import com.lagradost.cloudstream3.SubtitleFile
|
||||||
import com.lagradost.cloudstream3.argamap
|
import com.lagradost.cloudstream3.argamap
|
||||||
import com.lagradost.cloudstream3.utils.AppUtils
|
import com.lagradost.cloudstream3.utils.AppUtils
|
||||||
|
@ -107,15 +106,6 @@ class SoraStreamLite : SoraStream() {
|
||||||
{
|
{
|
||||||
invokeDbgo(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
invokeDbgo(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
||||||
},
|
},
|
||||||
{
|
|
||||||
invokeMovie123Net(
|
|
||||||
res.title,
|
|
||||||
res.season,
|
|
||||||
res.episode,
|
|
||||||
subtitleCallback,
|
|
||||||
callback
|
|
||||||
)
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
invokeMovieHab(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
invokeMovieHab(res.imdbId, res.season, res.episode, subtitleCallback, callback)
|
||||||
},
|
},
|
||||||
|
@ -350,6 +340,13 @@ class SoraStreamLite : SoraStream() {
|
||||||
{
|
{
|
||||||
invokeMoment(res.imdbId, res.season, res.episode, callback)
|
invokeMoment(res.imdbId, res.season, res.episode, callback)
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
if (!res.isAnime && res.season == null) invokeDoomovies(
|
||||||
|
res.title,
|
||||||
|
subtitleCallback,
|
||||||
|
callback
|
||||||
|
)
|
||||||
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
|
@ -14,5 +14,6 @@ class SoraStreamPlugin: Plugin() {
|
||||||
registerExtractorAPI(Animefever())
|
registerExtractorAPI(Animefever())
|
||||||
registerExtractorAPI(Multimovies())
|
registerExtractorAPI(Multimovies())
|
||||||
registerExtractorAPI(MultimoviesSB())
|
registerExtractorAPI(MultimoviesSB())
|
||||||
|
registerExtractorAPI(Yipsu())
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue