diff --git a/EneyidaProvider/build.gradle.kts b/EneyidaProvider/build.gradle.kts deleted file mode 100644 index 76ce47c..0000000 --- a/EneyidaProvider/build.gradle.kts +++ /dev/null @@ -1,27 +0,0 @@ -// use an integer for version numbers -version = 2 - - -cloudstream { - language = "uk" - // All of these properties are optional, you can safely remove them - - description = "Мета проекту «Енеїда» - популяризація української мови, демонстрація її різнобарвності та сучасності. Ми плануємо робити це через ретрансляцію якісного кіно, мультфільмів, телесеріалів та різноманітних телешоу в якісному українському перекладі. Тож, у добрий шлях дорогі конфіденти!." - authors = listOf("CakesTwix") - - /** - * Status int as the following: - * 0: Down - * 1: Ok - * 2: Slow - * 3: Beta only - * */ - status = 3 // will be 3 if unspecified - tvTypes = listOf( - "Anime", - "TvSeries", - "Movie", - ) - - iconUrl = "https://www.google.com/s2/favicons?domain=eneyida.tv&sz=%size%" -} \ No newline at end of file diff --git a/EneyidaProvider/src/main/AndroidManifest.xml b/EneyidaProvider/src/main/AndroidManifest.xml deleted file mode 100644 index 29aec9d..0000000 --- a/EneyidaProvider/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/EneyidaProvider/src/main/kotlin/com/lagradost/EneyidaProvider.kt b/EneyidaProvider/src/main/kotlin/com/lagradost/EneyidaProvider.kt deleted file mode 100644 index 9fbd996..0000000 --- a/EneyidaProvider/src/main/kotlin/com/lagradost/EneyidaProvider.kt +++ /dev/null @@ -1,187 +0,0 @@ -package com.lagradost - -import com.lagradost.models.PlayerJson -import com.lagradost.cloudstream3.* -import com.lagradost.cloudstream3.LoadResponse.Companion.addActors -import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer -import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.M3u8Helper -import org.jsoup.nodes.Element - -class EneyidaProvider : MainAPI() { - - // Basic Info - override var mainUrl = "https://eneyida.tv" - override var name = "Eneyida" - override val hasMainPage = true - override var lang = "uk" - override val hasDownloadSupport = true - override val supportedTypes = setOf( - TvType.Movie, - TvType.TvSeries, - TvType.Anime, - ) - - // Sections - override val mainPage = mainPageOf( - "$mainUrl/films/page/" to "Фільми", - "$mainUrl/series/page/" to "Серіали", - "$mainUrl/anime/page/" to "Аніме", - "$mainUrl/cartoon/page/" to "Мультфільми", - "$mainUrl/cartoon-series/page/" to "Мультсеріали", - ) - - override suspend fun getMainPage( - page: Int, - request: MainPageRequest - ): HomePageResponse { - val document = app.get(request.data + page).document - - val home = document.select("article.short").map { - it.toSearchResponse() - } - return newHomePageResponse(request.name, home) - } - - private fun Element.toSearchResponse(): SearchResponse { - val title = this.selectFirst("a.short_title")?.text()?.trim().toString() - val href = this.selectFirst("a.short_title")?.attr("href").toString() - val posterUrl = mainUrl + this.selectFirst("a.short_img img")?.attr("data-src") - - return newMovieSearchResponse(title, href, TvType.Movie) { - this.posterUrl = posterUrl - } - - } - - override suspend fun search(query: String): List { - val document = app.post( - url = mainUrl, - data = mapOf( - "do" to "search", - "subaction" to "search", - "story" to query.replace(" ", "+") - ) - ).document - - return document.select("article.short").map { - it.toSearchResponse() - } - } - - // Detailed information - override suspend fun load(url: String): LoadResponse { - val document = app.get(url).document - // Parse info - val fullInfo = document.select(".full_info li") - val title = document.selectFirst("div.full_header-title h1")?.text()?.trim().toString() - val poster = mainUrl + document.selectFirst(".full_content-poster img")?.attr("src") - val tags = fullInfo[1].select("a").map { it.text() } - val year = fullInfo[0].select("a").text().toIntOrNull() - val playerUrl = document.select(".tabs_b.visible iframe").attr("src") - - val tvType = if (tags.contains("фільм") or playerUrl.contains("/vod/")) TvType.Movie else TvType.TvSeries - val description = document.selectFirst(".full_content-desc p")?.text()?.trim() - val trailer = document.selectFirst("div#trailer_place iframe")?.attr("src").toString() - val rating = document.selectFirst(".r_kp span, .r_imdb span")?.text().toRatingInt() - val actors = fullInfo[4].select("a").map { it.text() } - - val recommendations = document.select(".short.related_item").map { - it.toSearchResponse() - } - - // Return to app - // Parse Episodes as Series - return if (tvType == TvType.TvSeries) { - val episodes = mutableListOf() - val playerRawJson = app.get(playerUrl).document.select("script").html() - .substringAfterLast("file:\'") - .substringBefore("\',") - - tryParseJson>(playerRawJson)?.map { dubs -> // Dubs - for(season in dubs.folder){ // Seasons - for(episode in season.folder){ // Episodes - episodes.add( - Episode( - "${season.title}, ${episode.title}, $playerUrl", - episode.title, - season.title.replace(" Сезон ","").toIntOrNull(), - episode.title.replace("Серія ","").toIntOrNull(), - episode.poster - ) - ) - } - } - } - newTvSeriesLoadResponse(title, url, TvType.TvSeries, episodes) { - this.posterUrl = poster - this.year = year - this.plot = description - this.tags = tags - this.rating = rating - addActors(actors) - this.recommendations = recommendations - addTrailer(trailer) - } - } else { // Parse as Movie. - newMovieLoadResponse(title, url, TvType.Movie, "$title, $playerUrl") { - this.posterUrl = poster - this.year = year - this.plot = description - this.tags = tags - this.rating = rating - addActors(actors) - this.recommendations = recommendations - addTrailer(trailer) - } - } - } - - // It works when I click to view the series - override suspend fun loadLinks( - data: String, // (Serisl) [Season, Episode, Player Url] | (Film) [Title, Player Url] - isCasting: Boolean, - subtitleCallback: (SubtitleFile) -> Unit, - callback: (ExtractorLink) -> Unit - ): Boolean { - val dataList = data.split(", ") - - // Its film, parse one m3u8 - if(dataList.size == 2){ - val m3u8Url = app.get(dataList[1]).document.select("script").html() - .substringAfterLast("file:\"") - .substringBefore("\",") - M3u8Helper.generateM3u8( - source = dataList[0], - streamUrl = m3u8Url, - referer = "https://tortuga.wtf/" - ).forEach(callback) - - return true - } - - val playerRawJson = app.get(dataList[2]).document.select("script").html() - .substringAfterLast("file:\'") - .substringBefore("\',") - - tryParseJson>(playerRawJson)?.map { dubs -> // Dubs - for(season in dubs.folder){ // Seasons - if(season.title == dataList[0]){ - for(episode in season.folder){ // Episodes - if(episode.title == dataList[1]){ - // Add as source - M3u8Helper.generateM3u8( - source = dubs.title, - streamUrl = episode.file, - referer = "https://tortuga.wtf/" - ).forEach(callback) - } - } - } - } - } - return true - } - -} \ No newline at end of file diff --git a/EneyidaProvider/src/main/kotlin/com/lagradost/EneyidaProviderPlugin.kt b/EneyidaProvider/src/main/kotlin/com/lagradost/EneyidaProviderPlugin.kt deleted file mode 100644 index 70c405b..0000000 --- a/EneyidaProvider/src/main/kotlin/com/lagradost/EneyidaProviderPlugin.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.lagradost - -import com.lagradost.cloudstream3.plugins.CloudstreamPlugin -import com.lagradost.cloudstream3.plugins.Plugin -import android.content.Context - -@CloudstreamPlugin -class EneyidaProviderPlugin: Plugin() { - override fun load(context: Context) { - // All providers should be added in this manner. Please don't edit the providers list directly. - registerMainAPI(EneyidaProvider()) - } -} \ No newline at end of file diff --git a/EneyidaProvider/src/main/kotlin/com/lagradost/models/PlayerJson.kt b/EneyidaProvider/src/main/kotlin/com/lagradost/models/PlayerJson.kt deleted file mode 100644 index 163dd77..0000000 --- a/EneyidaProvider/src/main/kotlin/com/lagradost/models/PlayerJson.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.lagradost.models - -data class PlayerJson ( - - val title : String, - val folder : List -) - -data class Season ( - - val title : String, - val folder : List -) - -data class Episode ( - - val title : String, - val file : String, - val id : String, - val poster : String, - val subtitle : String, -)