diff --git a/src/en/allmovies/build.gradle b/src/en/allmovies/build.gradle index 053bf3cfa..5469a10de 100644 --- a/src/en/allmovies/build.gradle +++ b/src/en/allmovies/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'AllMovies' pkgNameSuffix = 'en.allmovies' extClass = '.AllMovies' - extVersionCode = 5 + extVersionCode = 6 libVersion = '12' } diff --git a/src/en/allmovies/src/eu/kanade/tachiyomi/animeextension/en/allmovies/AllMovies.kt b/src/en/allmovies/src/eu/kanade/tachiyomi/animeextension/en/allmovies/AllMovies.kt index fe8996d08..bc9afba00 100644 --- a/src/en/allmovies/src/eu/kanade/tachiyomi/animeextension/en/allmovies/AllMovies.kt +++ b/src/en/allmovies/src/eu/kanade/tachiyomi/animeextension/en/allmovies/AllMovies.kt @@ -27,7 +27,7 @@ import java.lang.Exception class AllMovies : ConfigurableAnimeSource, ParsedAnimeHttpSource() { - override val name = "AllMovies" + override val name = "AllMoviesForYou" override val baseUrl = "https://allmoviesforyou.net" @@ -45,7 +45,7 @@ class AllMovies : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override fun popularAnimeSelector(): String = "article.TPost > a" - override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/movies/page/$page") + override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/shows/page/$page") override fun popularAnimeFromElement(element: Element): SAnime { val anime = SAnime.create() @@ -60,12 +60,58 @@ class AllMovies : ConfigurableAnimeSource, ParsedAnimeHttpSource() { // 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 { + val document = response.asJsoup() + val episodeList = mutableListOf() + 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("section.SeasonBx.AACrdn a") + seasonsElements.forEach { + val seasonEpList = parseEpisodesFromSeries(it) + episodeList.addAll(seasonEpList) + } + } else { + val movieUrl = seriesLink + val episode = SEpisode.create() + episode.name = document.select("div.TPMvCn h1.Title").text() + 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 { + val seasonId = element.attr("href") + val seasonName = element.text() + Log.i("seasonname", seasonName) + val episodesUrl = seasonId + val episodesHtml = client.newCall( + GET( + episodesUrl, + ) + ).execute().asJsoup() + val episodeElements = episodesHtml.select("tr.Viewed") + return episodeElements.map { episodeFromElement(it, seasonName) } + } + + private fun episodeFromElement(element: Element, seasonName: String): SEpisode { val episode = SEpisode.create() - episode.setUrlWithoutDomain("allmoviesforyou.net" + element.attr("href")) - episode.name = element.ownerDocument().select("div.TPMvCn h1.Title").text() + episode.episode_number = element.select("td > span.Num").text().toFloat() + val SeasonNum = element.ownerDocument().select("div.Title span").text() + episode.name = "Season $SeasonNum" + "x" + element.select("td span.Num").text() + " : " + element.select("td.MvTbTtl > a").text() + episode.setUrlWithoutDomain(element.select("td.MvTbPly > a.ClA").attr("abs:href")) return episode } @@ -182,14 +228,21 @@ class AllMovies : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override fun animeDetailsParse(document: Document): SAnime { val anime = SAnime.create() - anime.title = document.select("div.TPMvCn a h1.Title").text() + anime.title = document.select("div.TPMvCn h1.Title").text() anime.genre = document.select("p.Genre a").joinToString(", ") { it.text() } - anime.status = SAnime.COMPLETED + Log.i("status", document.select("div.Info").text()) + anime.status = parseStatus(document.select("div.Info").text()) // span.Qlty anime.author = document.select("p.Director span a").joinToString(", ") { it.text() } anime.description = document.select("div.TPMvCn div.Description p:first-of-type").text() return anime } + private fun parseStatus(status: String?) = when { + status == null -> SAnime.UNKNOWN + status.contains("AIR", ignoreCase = true) -> SAnime.ONGOING + else -> SAnime.COMPLETED + } + // Latest override fun latestUpdatesNextPageSelector(): String? = throw Exception("Not used") @@ -208,7 +261,7 @@ class AllMovies : ConfigurableAnimeSource, ParsedAnimeHttpSource() { GenreFilter(getGenreList()) ) - private class GenreFilter(vals: Array>) : UriPartFilter("Movies Genres", vals) + private class GenreFilter(vals: Array>) : UriPartFilter("Genres", vals) private fun getGenreList() = arrayOf( Pair("Action & Adventure", "action-adventure"),