mirror of
https://github.com/hexated/cloudstream-extensions-hexated.git
synced 2024-08-15 00:03:22 +00:00
sora: added navy
This commit is contained in:
parent
13c9debd62
commit
3a89c83ae7
4 changed files with 82 additions and 4 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 = 139
|
version = 140
|
||||||
|
|
||||||
android {
|
android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
|
|
|
@ -2993,6 +2993,50 @@ object SoraExtractor : SoraStream() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
suspend fun invokeNavy(
|
||||||
|
imdbId: String? = null,
|
||||||
|
season: Int? = null,
|
||||||
|
episode: Int? = null,
|
||||||
|
callback: (ExtractorLink) -> Unit,
|
||||||
|
) {
|
||||||
|
val res = app.get(
|
||||||
|
"$navyAPI/play/$imdbId",
|
||||||
|
referer = "$navyAPI/"
|
||||||
|
).document.selectFirst("script:containsData(player =)")?.data()?.substringAfter("{")
|
||||||
|
?.substringBefore(";")?.substringBefore(")")
|
||||||
|
val json = tryParseJson<NavyPlaylist>("{${res ?: return}")
|
||||||
|
val headers = mapOf(
|
||||||
|
"X-CSRF-TOKEN" to "${json?.key}"
|
||||||
|
)
|
||||||
|
val serverRes = app.get(
|
||||||
|
fixUrl(json?.file ?: return, navyAPI), headers = headers, referer = "$navyAPI/"
|
||||||
|
).text.replace(Regex(""",\s*\[]"""), "")
|
||||||
|
val server = tryParseJson<ArrayList<NavyServer>>(serverRes).let { server ->
|
||||||
|
if (season == null) {
|
||||||
|
server?.find { it.title == "English" }?.file
|
||||||
|
} else {
|
||||||
|
server?.find { it.id.equals("$season") }?.folder?.find { it.episode.equals("$episode") }?.folder?.find {
|
||||||
|
it.title.equals(
|
||||||
|
"English"
|
||||||
|
)
|
||||||
|
}?.file
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val path = app.post(
|
||||||
|
"${navyAPI}/playlist/${server ?: return}.txt",
|
||||||
|
headers = headers,
|
||||||
|
referer = "$navyAPI/"
|
||||||
|
).text
|
||||||
|
|
||||||
|
M3u8Helper.generateM3u8(
|
||||||
|
"Navy",
|
||||||
|
path,
|
||||||
|
"${navyAPI}/"
|
||||||
|
).forEach(callback)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3449,3 +3493,28 @@ data class GokuData(
|
||||||
data class GokuServer(
|
data class GokuServer(
|
||||||
@JsonProperty("data") val data: GokuData? = GokuData(),
|
@JsonProperty("data") val data: GokuData? = GokuData(),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
data class NavyEpisodeFolder(
|
||||||
|
@JsonProperty("title") val title: String? = null,
|
||||||
|
@JsonProperty("id") val id: String? = null,
|
||||||
|
@JsonProperty("file") val file: String? = null,
|
||||||
|
)
|
||||||
|
|
||||||
|
data class NavySeasonFolder(
|
||||||
|
@JsonProperty("episode") val episode: String? = null,
|
||||||
|
@JsonProperty("id") val id: String? = null,
|
||||||
|
@JsonProperty("folder") val folder: ArrayList<NavyEpisodeFolder>? = arrayListOf(),
|
||||||
|
)
|
||||||
|
|
||||||
|
data class NavyServer(
|
||||||
|
@JsonProperty("title") val title: String? = null,
|
||||||
|
@JsonProperty("id") val id: String? = null,
|
||||||
|
@JsonProperty("file") val file: String? = null,
|
||||||
|
@JsonProperty("folder") val folder: ArrayList<NavySeasonFolder>? = arrayListOf(),
|
||||||
|
)
|
||||||
|
|
||||||
|
data class NavyPlaylist(
|
||||||
|
@JsonProperty("file") val file: String? = null,
|
||||||
|
@JsonProperty("key") val key: String? = null,
|
||||||
|
@JsonProperty("href") val href: String? = null,
|
||||||
|
)
|
|
@ -38,6 +38,7 @@ import com.hexated.SoraExtractor.invokeM4uhd
|
||||||
import com.hexated.SoraExtractor.invokeMovie123Net
|
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.invokeNinetv
|
import com.hexated.SoraExtractor.invokeNinetv
|
||||||
import com.hexated.SoraExtractor.invokeNowTv
|
import com.hexated.SoraExtractor.invokeNowTv
|
||||||
import com.hexated.SoraExtractor.invokePutlocker
|
import com.hexated.SoraExtractor.invokePutlocker
|
||||||
|
@ -126,6 +127,7 @@ open class SoraStream : TmdbProvider() {
|
||||||
const val nowTvAPI = "https://myfilestorage.xyz"
|
const val nowTvAPI = "https://myfilestorage.xyz"
|
||||||
const val gokuAPI = "https://goku.sx"
|
const val gokuAPI = "https://goku.sx"
|
||||||
const val ridomoviesAPI = "https://ridomovies.pw"
|
const val ridomoviesAPI = "https://ridomovies.pw"
|
||||||
|
const val navyAPI = "https://navy-issue-i-239.site"
|
||||||
|
|
||||||
// INDEX SITE
|
// INDEX SITE
|
||||||
const val blackMoviesAPI = "https://dl.blacklistedbois.workers.dev/0:"
|
const val blackMoviesAPI = "https://dl.blacklistedbois.workers.dev/0:"
|
||||||
|
@ -794,11 +796,14 @@ open class SoraStream : TmdbProvider() {
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime && res.season == null) invokeNowTv(res.id, res.season, res.episode, callback)
|
if (!res.isAnime) invokeNowTv(res.id, res.season, res.episode, callback)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (res.season == null) invokeRidomovies(res.title, res.year, callback)
|
if (res.season == null) invokeRidomovies(res.title, res.year, callback)
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
invokeNavy(res.imdbId, res.season, res.episode, callback)
|
||||||
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
|
@ -18,6 +18,7 @@ import com.hexated.SoraExtractor.invokeLing
|
||||||
import com.hexated.SoraExtractor.invokeM4uhd
|
import com.hexated.SoraExtractor.invokeM4uhd
|
||||||
import com.hexated.SoraExtractor.invokeMovie123Net
|
import com.hexated.SoraExtractor.invokeMovie123Net
|
||||||
import com.hexated.SoraExtractor.invokeMovieHab
|
import com.hexated.SoraExtractor.invokeMovieHab
|
||||||
|
import com.hexated.SoraExtractor.invokeNavy
|
||||||
import com.hexated.SoraExtractor.invokeNinetv
|
import com.hexated.SoraExtractor.invokeNinetv
|
||||||
import com.hexated.SoraExtractor.invokeNowTv
|
import com.hexated.SoraExtractor.invokeNowTv
|
||||||
import com.hexated.SoraExtractor.invokePutlocker
|
import com.hexated.SoraExtractor.invokePutlocker
|
||||||
|
@ -275,7 +276,10 @@ class SoraStreamLite : SoraStream() {
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (!res.isAnime && res.season == null) invokeNowTv(res.id, res.season, res.episode, callback)
|
if (!res.isAnime) invokeNowTv(res.id, res.season, res.episode, callback)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
invokeNavy(res.imdbId, res.season, res.episode, callback)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if (res.season == null) invokeRidomovies(
|
if (res.season == null) invokeRidomovies(
|
||||||
|
|
Loading…
Reference in a new issue