mirror of
https://github.com/recloudstream/cloudstream-extensions-multilingual.git
synced 2024-08-15 03:15:14 +00:00
Add EjaTV and remove redundant folder
This commit is contained in:
parent
b3f33b368a
commit
f004a4afe9
5 changed files with 136 additions and 1 deletions
120
EjaTv/src/main/kotlin/com/lagradost/EjaTv.kt
Normal file
120
EjaTv/src/main/kotlin/com/lagradost/EjaTv.kt
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
package com.lagradost
|
||||||
|
|
||||||
|
import com.lagradost.cloudstream3.*
|
||||||
|
import com.lagradost.cloudstream3.utils.AppUtils.parseJson
|
||||||
|
import com.lagradost.cloudstream3.utils.AppUtils.toJson
|
||||||
|
import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||||
|
import com.lagradost.cloudstream3.utils.Qualities
|
||||||
|
import org.jsoup.nodes.Element
|
||||||
|
|
||||||
|
class EjaTv : MainAPI() {
|
||||||
|
override var mainUrl = "https://eja.tv"
|
||||||
|
override var name = "Eja.tv"
|
||||||
|
|
||||||
|
// Universal language?
|
||||||
|
override var lang = "en"
|
||||||
|
override val hasDownloadSupport = false
|
||||||
|
|
||||||
|
override val hasMainPage = true
|
||||||
|
override val supportedTypes = setOf(
|
||||||
|
TvType.Live
|
||||||
|
)
|
||||||
|
|
||||||
|
private fun Element.toSearchResponse(): LiveSearchResponse? {
|
||||||
|
val link = this.select("div.alternative a").last() ?: return null
|
||||||
|
val href = fixUrl(link.attr("href"))
|
||||||
|
val img = this.selectFirst("div.thumb img")
|
||||||
|
val lang = this.selectFirst(".card-title > a")?.attr("href")?.removePrefix("?country=")
|
||||||
|
?.replace("int", "eu") //international -> European Union 🇪🇺
|
||||||
|
return LiveSearchResponse(
|
||||||
|
// Kinda hack way to get the title
|
||||||
|
img?.attr("alt")?.replaceFirst("Watch ", "") ?: return null,
|
||||||
|
href,
|
||||||
|
this@EjaTv.name,
|
||||||
|
TvType.Live,
|
||||||
|
fixUrl(img.attr("src")),
|
||||||
|
lang = lang
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun getMainPage(page: Int, request : MainPageRequest): HomePageResponse {
|
||||||
|
// Maybe this based on app language or as setting?
|
||||||
|
val language = "English"
|
||||||
|
val dataMap = mapOf(
|
||||||
|
"News" to mapOf("language" to language, "category" to "News"),
|
||||||
|
"Sports" to mapOf("language" to language, "category" to "Sports"),
|
||||||
|
"Entertainment" to mapOf("language" to language, "category" to "Entertainment")
|
||||||
|
)
|
||||||
|
return HomePageResponse(dataMap.apmap { (title, data) ->
|
||||||
|
val document = app.post(mainUrl, data = data).document
|
||||||
|
val shows = document.select("div.card-body").mapNotNull {
|
||||||
|
it.toSearchResponse()
|
||||||
|
}
|
||||||
|
HomePageList(
|
||||||
|
title,
|
||||||
|
shows,
|
||||||
|
isHorizontalImages = true
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun search(query: String): List<SearchResponse> {
|
||||||
|
return app.post(
|
||||||
|
mainUrl, data = mapOf("search" to query)
|
||||||
|
).document.select("div.card-body").mapNotNull {
|
||||||
|
it.toSearchResponse()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun load(url: String): LoadResponse {
|
||||||
|
val doc = app.get(url).document
|
||||||
|
val sections =
|
||||||
|
doc.select("li.list-group-item.d-flex.justify-content-between.align-items-center")
|
||||||
|
|
||||||
|
val link = fixUrl(sections.last()!!.select("a").attr("href"))
|
||||||
|
|
||||||
|
val title = doc.select("h5.text-center").text()
|
||||||
|
val poster = fixUrl(doc.select("p.text-center img").attr("src"))
|
||||||
|
|
||||||
|
val summary = sections.subList(0, 3).joinToString("<br>") {
|
||||||
|
val innerText = it.ownText().trim()
|
||||||
|
val outerText = it.select("a").text().trim()
|
||||||
|
"$innerText: $outerText"
|
||||||
|
}
|
||||||
|
|
||||||
|
return LiveStreamLoadResponse(
|
||||||
|
title,
|
||||||
|
url,
|
||||||
|
this.name,
|
||||||
|
LoadData(link, title).toJson(),
|
||||||
|
poster,
|
||||||
|
plot = summary
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
data class LoadData(
|
||||||
|
val url: String,
|
||||||
|
val title: String
|
||||||
|
)
|
||||||
|
|
||||||
|
override suspend fun loadLinks(
|
||||||
|
data: String,
|
||||||
|
isCasting: Boolean,
|
||||||
|
subtitleCallback: (SubtitleFile) -> Unit,
|
||||||
|
callback: (ExtractorLink) -> Unit
|
||||||
|
): Boolean {
|
||||||
|
val loadData = parseJson<LoadData>(data)
|
||||||
|
|
||||||
|
callback.invoke(
|
||||||
|
ExtractorLink(
|
||||||
|
this.name,
|
||||||
|
loadData.title,
|
||||||
|
loadData.url,
|
||||||
|
"",
|
||||||
|
Qualities.Unknown.value,
|
||||||
|
isM3u8 = true
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
14
EjaTv/src/main/kotlin/com/lagradost/EjaTvPlugin.kt
Normal file
14
EjaTv/src/main/kotlin/com/lagradost/EjaTvPlugin.kt
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
|
||||||
|
package com.lagradost
|
||||||
|
|
||||||
|
import com.lagradost.cloudstream3.plugins.CloudstreamPlugin
|
||||||
|
import com.lagradost.cloudstream3.plugins.Plugin
|
||||||
|
import android.content.Context
|
||||||
|
|
||||||
|
@CloudstreamPlugin
|
||||||
|
class EjaTvPlugin: Plugin() {
|
||||||
|
override fun load(context: Context) {
|
||||||
|
// All providers should be added in this manner. Please don't edit the providers list directly.
|
||||||
|
registerMainAPI(EjaTv())
|
||||||
|
}
|
||||||
|
}
|
|
@ -97,5 +97,6 @@ include(
|
||||||
"JKAnimeProvider",
|
"JKAnimeProvider",
|
||||||
"AnimekisaProvider",
|
"AnimekisaProvider",
|
||||||
"AnimeIndoProvider",
|
"AnimeIndoProvider",
|
||||||
"KuronimeProvider"
|
"KuronimeProvider",
|
||||||
|
"EjaTv",
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue