From 6dba40b2f3a5e18c10467483ea543a8d3a052555 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Fri, 1 Sep 2023 18:44:18 +0300 Subject: [PATCH] All Servers Support --- ElOstora/build.gradle.kts | 2 +- .../main/kotlin/com/elostoratv/ElOstoraTV.kt | 97 +++++++++++++------ 2 files changed, 66 insertions(+), 33 deletions(-) diff --git a/ElOstora/build.gradle.kts b/ElOstora/build.gradle.kts index ee152c52..085c66b0 100644 --- a/ElOstora/build.gradle.kts +++ b/ElOstora/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 2 +version = 3 cloudstream { diff --git a/ElOstora/src/main/kotlin/com/elostoratv/ElOstoraTV.kt b/ElOstora/src/main/kotlin/com/elostoratv/ElOstoraTV.kt index e9dabc3f..73d4c06f 100644 --- a/ElOstora/src/main/kotlin/com/elostoratv/ElOstoraTV.kt +++ b/ElOstora/src/main/kotlin/com/elostoratv/ElOstoraTV.kt @@ -23,15 +23,14 @@ class ElOstoraTV : MainAPI() { ) private val APIurl = "https://z420572.radwan.shop/api/v4_8.php" - override val mainPage = generateHomePage() - - private fun generateHomePage() : List { + //override val mainPage = generateHomePage() + override val mainPage = generateServersHomePage() + private fun generateServersHomePage() : List { val homepage = mutableListOf() val data = mapOf( - "main_id" to "1", + "main" to "1", "id" to "", - "sub_id" to "0" ) val decodedbody = getDecoded(data) //Log.d("King", "decodedbody:$decodedbody") @@ -39,50 +38,75 @@ class ElOstoraTV : MainAPI() { parseJson(decodedbody).results?.map { element -> homepage.add(mainPage(name = element.category_name, url = element.cid)) } ?: throw ErrorLoadingException("Invalid Json response") - + //Log.d("King", "homepage:$homepage") return homepage } - override suspend fun getMainPage(page: Int, request: MainPageRequest): HomePageResponse { val items = mutableListOf() if (page <= 1) { - //Log.d("King", "request:$request") + //Log.d("King", "getMainPage:$request") val data = mapOf( + "main_id" to request.data, "id" to "", - "cat_id" to request.data + "sub_id" to "0" ) val decodedbody = getDecoded(data) - //Log.d("King", "decodedbody:$decodedbody") - val list = parseJson(decodedbody).results?.map { element -> + //Log.d("King", "getMaindecodedbody:$decodedbody") + val list = parseJson(decodedbody).results?.map { element -> element.toSearchResponse(request) } ?: throw ErrorLoadingException("Invalid Json response") - if (list.isNotEmpty()) items.add(HomePageList(request.name, list, true)) + if (list.isNotEmpty()) items.add(HomePageList(request.name, list, false)) } + //Log.d("King", "items:$items") return newHomePageResponse(items) } - - private fun Channel.toSearchResponse(request: MainPageRequest): SearchResponse { + private fun Category.toSearchResponse(request: MainPageRequest): SearchResponse { return LiveSearchResponse( - name = this.channel_title, - url = Data(id = id, channel_title = this.channel_title, channel_thumbnail = this.channel_thumbnail, category = request.name, channel_url = this.channel_url).toJson(), + name = this.category_name, + url = Data(id = cid, channel_title = this.category_name, channel_thumbnail = this.image, category = request.name, channel_url = cid).toJson(), this@ElOstoraTV.name, TvType.Live, - this.channel_thumbnail, + this.image, ) } - override suspend fun load(url: String): LoadResponse { - //Log.d("King", "Load:$url") + Log.d("King", "Load:$url") val data = parseJson(url) - return LiveStreamLoadResponse( - name = data.channel_title, - url = Data(id = data.id, channel_title = data.channel_title, channel_thumbnail = data.channel_thumbnail, category = data.category, channel_url = urlfix(data.channel_url)).toJson(), - dataUrl = Data(id = data.id, channel_title = data.channel_title, channel_thumbnail = data.channel_thumbnail, category = data.category, channel_url = urlfix(data.channel_url)).toJson(), - apiName = name, - posterUrl = data.channel_thumbnail, - type = TvType.Live, + val Postdata = mapOf( + "id" to "", + "cat_id" to data.id ) + val decodedbody = getDecoded(Postdata) + Log.d("King", "decodedbody:$decodedbody") + var channels = parseJson(decodedbody).results?.map { element -> + Episode( + name = element.channel_title, + posterUrl = element.channel_thumbnail, + data = Data( + id = element.id, + channel_title = element.channel_title, + channel_thumbnail = element.channel_thumbnail, + category = data.category, + channel_url = element.channel_url, + ).toJson(), + ) + } ?: throw ErrorLoadingException("Invalid Json response") + return newTvSeriesLoadResponse( + name = data.channel_title, + url = Data( + id = data.id, + channel_title = data.channel_title, + channel_thumbnail = data.channel_thumbnail, + category = data.category, + channel_url = data.channel_url, + ).toJson(), + type = TvType.TvSeries, + episodes = channels, + ) { + this.posterUrl = data.channel_thumbnail + this.plot = "${data.channel_title} - ${data.category}." + } } override suspend fun loadLinks( data: String, @@ -90,13 +114,13 @@ class ElOstoraTV : MainAPI() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ): Boolean { - //Log.d("King", "loadLinks:$data") + Log.d("King", "loadLinks:$data") val data = parseJson(data) callback.invoke( ExtractorLink( source = data.channel_title, name = data.channel_title, - url = data.channel_url, + url = fixurl(data.channel_url), referer = "", quality = Qualities.Unknown.value, isM3u8 = true, @@ -105,8 +129,8 @@ class ElOstoraTV : MainAPI() { return true } - private fun urlfix(url: String): String { - return url.replace("https://raw.githubusercontent.com/ostoratv/m3u8/master/update.m3u8?302","") + private fun fixurl(url: String): String { + return url.substring(url.lastIndexOf("http")) } private fun getDecoded(payload: Map): String { @@ -163,9 +187,18 @@ class ElOstoraTV : MainAPI() { @JsonProperty("image") val image: String, @JsonProperty("adp") val adp: String, ) - + data class Servers( + @JsonProperty("data") val results: ArrayList? = arrayListOf(), + ) + data class Server( + @JsonProperty("cid") val cid: String, + @JsonProperty("cat") val cat: String, + @JsonProperty("category_name") val category_name: String, + @JsonProperty("image") val image: String, + @JsonProperty("adp") val adp: String, + ) data class Data( - val id: String? = null, + val id: String, val channel_title: String, val channel_thumbnail: String, val category: String,