movies4u: add support for tv-shows (#283)

* Update build.gradle

* Update Movies4U.kt
This commit is contained in:
Ahmed gamal
2022-02-02 12:11:30 +02:00
committed by GitHub
parent 27b09e943b
commit 8d65c797b1
2 changed files with 64 additions and 12 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'موفيز فور يو'
pkgNameSuffix = 'ar.movies4u'
extClass = '.Movies4U'
extVersionCode = 1
extVersionCode = 2
libVersion = '12'
}

View File

@ -62,18 +62,60 @@ class Movies4U : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun popularAnimeNextPageSelector(): String = "ul.paginator li.paginator__item paginator__item--next a"
// episodes
// Episodes
override fun episodeListSelector() = "link[rel=canonical]"
override fun episodeListSelector() = throw Exception("not used")
override fun episodeFromElement(element: Element): SEpisode {
override fun episodeListParse(response: Response): List<SEpisode> {
val document = response.asJsoup()
val episodeList = mutableListOf<SEpisode>()
val seriesLink = document.select("link[rel=canonical]").attr("href")
if (seriesLink.contains("/series/")) {
val seasonUrl = seriesLink
val seasonsHtml = client.newCall(
GET(
seasonUrl,
headers = Headers.headersOf("Referer", document.location())
)
).execute().asJsoup()
val seasonsElements = seasonsHtml.select("div.col-6.col-sm-4.col-md-3.col-xl-2 div.card")
seasonsElements.forEach {
val seasonEpList = parseEpisodesFromSeries(it)
episodeList.addAll(seasonEpList)
}
} else {
val movieUrl = seriesLink
val episode = SEpisode.create()
episode.name = document.select("div.col-12 > h1").text().replace("مشاهدة", "").replace("فيلم", "").replace("مترجم", "")
episode.episode_number = 1F
episode.setUrlWithoutDomain(movieUrl)
episodeList.add(episode)
}
return episodeList
}
override fun episodeFromElement(element: Element): SEpisode = throw Exception("not used")
private fun parseEpisodesFromSeries(element: Element): List<SEpisode> {
val seasonId = element.select("div.card__content h3.card__title a").attr("href")
val seasonName = element.select("div.card__content h3.card__title a").text()
Log.i("seasonname", seasonName)
val episodesUrl = seasonId
val episodesHtml = client.newCall(
GET(
episodesUrl,
)
).execute().asJsoup()
val episodeElements = episodesHtml.select("div.col-6.col-sm-4.col-md-3.col-xl-2")
return episodeElements.map { episodeFromElement(it, seasonName) }
}
private fun episodeFromElement(element: Element, seasonName: String): SEpisode {
val episode = SEpisode.create()
episode.setUrlWithoutDomain(element.attr("href"))
Log.i("lol", episode.url)
// episode.episode_number = element.select("span:nth-child(3)").text().replace(" - ", "").toFloat()
episode.name = element.ownerDocument().select("div.col-12 > h1").text().replace("مشاهدة", "").replace("فيلم", "").replace("مترجم", "")
episode.date_upload = System.currentTimeMillis()
episode.episode_number = element.select("h3.card__title a").attr("abs:href").substringAfter("episode-").toFloat()
// val SeasonNum = element.ownerDocument().select("div.Title span").text()
episode.name = "$seasonName" + ": " + element.select("h3.card__title a").text()
episode.setUrlWithoutDomain(element.select("h3.card__title a").attr("abs:href"))
return episode
}
@ -164,7 +206,7 @@ class Movies4U : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
val url = if (query.isNotBlank()) {
"$baseUrl/search/auto-complete?_token=${loadToken()}&q=$query"
"$baseUrl/search/auto-complete?_token=${loadToken()}&q=$query".replace(" ", "%20")
} else {
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
when (filter) {
@ -176,6 +218,14 @@ class Movies4U : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
return GET(genreUrl, headers)
}
}
is GenreList2 -> {
if (filter.state > 0) {
val GenreN = getGenreList()[filter.state].query
val genreUrl = "$baseUrl/series?category=$GenreN&quality=undefined&imdb=0.0|10.0&year=1900|2021&page=$page"
Log.i("lol", genreUrl)
return GET(genreUrl, headers)
}
}
}
}
throw Exception("اختر فلتر")
@ -249,16 +299,18 @@ class Movies4U : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun getFilterList() = AnimeFilterList(
AnimeFilter.Header("الفلترات مش هتشتغل لو بتبحث او وهي فاضيه"),
GenreList(genresName),
GenreList2(genresName),
)
private class GenreList(genres: Array<String>) : AnimeFilter.Select<String>("تصنيف الافلام", genres)
private class GenreList2(genres: Array<String>) : AnimeFilter.Select<String>("تصنيف المسلسلات", genres)
private data class Genre(val name: String, val query: String)
private val genresName = getGenreList().map {
it.name
}.toTypedArray()
private fun getGenreList() = listOf(
Genre("أختر", ""),
Genre("الكل", ""),
Genre("أثارة", "22"),
Genre("اكشن", "23"),
Genre("انيميشن", "24"),