diff --git a/app/src/main/java/com/lagradost/cloudstream3/movieproviders/AkwamProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/movieproviders/AkwamProvider.kt index 326fd8c2..218650da 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/movieproviders/AkwamProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/movieproviders/AkwamProvider.kt @@ -2,7 +2,6 @@ package com.lagradost.cloudstream3.movieproviders import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.LoadResponse.Companion.addActors -import com.lagradost.cloudstream3.network.AppResponse import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.Qualities import org.jsoup.nodes.Element @@ -165,10 +164,10 @@ class AkwamProvider : MainAPI() { } - // Maybe possible to not use the url shortener but cba investigating that. - private suspend fun skipUrlShortener(url: String): AppResponse { - return app.get(app.get(url).document.select("a.download-link").attr("href")) - } +// // Maybe possible to not use the url shortener but cba investigating that. +// private suspend fun skipUrlShortener(url: String): AppResponse { +// return app.get(app.get(url).document.select("a.download-link").attr("href")) +// } private fun getQualityFromId(id: Int?): Qualities { return when (id) { @@ -190,14 +189,15 @@ class AkwamProvider : MainAPI() { val links = doc.select("div.tab-content.quality").map { val quality = getQualityFromId(it.attr("id").getIntFromText()) - it.select(".col-lg-6 > a").map { linkElement -> - linkElement.attr("href") to quality - // Only uses the download links, primarily to prevent unnecessary duplicate requests. - }.filter { link -> link.first.contains("/link/") } + it.select(".col-lg-6 > a:contains(تحميل)").map { linkElement -> + if(linkElement.attr("href").contains("/download/")) { linkElement.attr("href") to quality } else { + "$mainUrl/download${linkElement.attr("href").split("/link")[1]}${data.split("/movie|/episode|/show/episode".toRegex())[1]}" to quality // just in case if they add the shorts urls again + } + } }.flatten() links.map { - val linkDoc = skipUrlShortener(it.first).document + val linkDoc = app.get(it.first).document val button = linkDoc.select("div.btn-loader > a") val url = button.attr("href") diff --git a/app/src/main/java/com/lagradost/cloudstream3/movieproviders/MyCimaProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/movieproviders/MyCimaProvider.kt index 25b6e23c..3e65710f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/movieproviders/MyCimaProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/movieproviders/MyCimaProvider.kt @@ -13,7 +13,7 @@ class MyCimaProvider : MainAPI() { override var name = "MyCima" override val usesWebView = false override val hasMainPage = true - override val supportedTypes = setOf(TvType.TvSeries, TvType.Movie) + override val supportedTypes = setOf(TvType.TvSeries, TvType.Movie, TvType.Anime) private fun String.getImageURL(): String? { return this.replace("--im(age|g):url\\(|\\);".toRegex(), "") @@ -63,9 +63,10 @@ class MyCimaProvider : MainAPI() { override suspend fun search(query: String): List { val q = query.replace(" ","%20") val result = arrayListOf() - listOf("$mainUrl/search/$q", "$mainUrl/search/$q/list/series/").apmap { url -> + listOf("$mainUrl/search/$q", + "$mainUrl/search/$q/list/series/", + "$mainUrl/search/$q/list/anime/").apmap { url -> val d = app.get(url).document - if(d.select("a.hoverable.active").text().contains("الانيمي و الكرتون")) return@apmap null d.select("div.Grid--MycimaPosts div.GridItem").mapNotNull { if(it.text().contains("اعلان")) return@mapNotNull null it.toSearchResponse()?.let { it1 -> result.add(it1) } @@ -88,7 +89,7 @@ class MyCimaProvider : MainAPI() { val year = doc.select("div.Title--Content--Single-begin h1 a.unline")?.text()?.getIntFromText() val title = doc.select("div.Title--Content--Single-begin h1").text() .replace("($year)", "") - .replace("مشاهدة|فيلم|مسلسل|مترجم".toRegex(), "") + .replace("مشاهدة|فيلم|مسلسل|مترجم|انمي".toRegex(), "") // A bit iffy to parse twice like this, but it'll do. val duration = doc.select("ul.Terms--Content--Single-begin li").firstOrNull { @@ -106,6 +107,9 @@ class MyCimaProvider : MainAPI() { ?: return@mapNotNull null Actor(name, image) } + val recommendations = doc.select("div.Grid--MycimaPosts div.GridItem")?.mapNotNull { element -> + element.toSearchResponse() + } return if (isMovie) { newMovieLoadResponse( @@ -119,6 +123,7 @@ class MyCimaProvider : MainAPI() { this.plot = synopsis this.tags = tags this.duration = duration + this.recommendations = recommendations addActors(actors) } } else { @@ -133,14 +138,16 @@ class MyCimaProvider : MainAPI() { if(moreButton.isNotEmpty()) { val n = doc.select("div.Seasons--Episodes div.Episodes--Seasons--Episodes a").size val totals = doc.select("div.Episodes--Seasons--Episodes a").first().text().getIntFromText() - arrayListOf(n, n+40, n+80, n+120, n+160, n+200, n+240, n+280, n+320, n+360) - .apmap { it -> - if(it > totals!!) return@apmap - val ajaxURL = "$mainUrl/AjaxCenter/MoreEpisodes/${moreButton.attr("data-term")}/$it" - val jsonResponse = app.get(ajaxURL) - val json = parseJson(jsonResponse.text) - val document = Jsoup.parse(json.output?.replace("""\""", "")) - document.select("a").map { episodes.add(TvSeriesEpisode(it.text(), season, it.text().getIntFromText(), it.attr("href"), null, null)) } + val mEPS = arrayListOf(n, n+40, n+80, n+120, n+160, n+200, n+240, n+280, n+320, n+360, n+400, n+440, n+480, n+520, n+660, n+700, n+740, n+780, n+820, n+860, n+900, n+940, n+980, n+1020, n+1060, n+1100, n+1140, n+1180, n+1220, totals) + mEPS.apmap { it -> + if (it != null) { + if(it > totals!!) return@apmap + val ajaxURL = "$mainUrl/AjaxCenter/MoreEpisodes/${moreButton.attr("data-term")}/$it" + val jsonResponse = app.get(ajaxURL) + val json = parseJson(jsonResponse.text) + val document = Jsoup.parse(json.output?.replace("""\""", "")) + document.select("a").map { episodes.add(TvSeriesEpisode(it.text(), season, it.text().getIntFromText(), it.attr("href"), null, null)) } + } } } if(seasons.isNotEmpty()) { @@ -154,14 +161,16 @@ class MyCimaProvider : MainAPI() { if(fmoreButton.isNotEmpty()) { val n = seasonsite.select("div.Seasons--Episodes div.Episodes--Seasons--Episodes a").size val totals = seasonsite.select("div.Episodes--Seasons--Episodes a").first().text().getIntFromText() - arrayListOf(n, n+40, n+80, n+120, n+160, n+200, n+240, n+280, n+320, n+360) - .apmap { it -> - if(it > totals!!) return@apmap - val ajaxURL = "$mainUrl/AjaxCenter/MoreEpisodes/${fmoreButton.attr("data-term")}/$it" - val jsonResponse = app.get(ajaxURL) - val json = parseJson(jsonResponse.text) - val document = Jsoup.parse(json.output?.replace("""\""", "")) - document.select("a").map { episodes.add(TvSeriesEpisode(it.text(), fseason, it.text().getIntFromText(), it.attr("href"), null, null)) } + val mEPS = arrayListOf(n, n+40, n+80, n+120, n+160, n+200, n+240, n+280, n+320, n+360, n+400, n+440, n+480, n+520, n+660, n+700, n+740, n+780, n+820, n+860, n+900, n+940, n+980, n+1020, n+1060, n+1100, n+1140, n+1180, n+1220, totals) + mEPS.apmap { it -> + if (it != null) { + if(it > totals!!) return@apmap + val ajaxURL = "$mainUrl/AjaxCenter/MoreEpisodes/${fmoreButton.attr("data-term")}/$it" + val jsonResponse = app.get(ajaxURL) + val json = parseJson(jsonResponse.text) + val document = Jsoup.parse(json.output?.replace("""\""", "")) + document.select("a").map { episodes.add(TvSeriesEpisode(it.text(), fseason, it.text().getIntFromText(), it.attr("href"), null, null)) } + } } } else return@apmap } @@ -172,6 +181,7 @@ class MyCimaProvider : MainAPI() { this.tags = tags this.year = year this.plot = synopsis + this.recommendations = recommendations addActors(actors) } }