diff --git a/src/ar/shahid4u/build.gradle b/src/ar/shahid4u/build.gradle index 7abbe5c17..bb19472ac 100644 --- a/src/ar/shahid4u/build.gradle +++ b/src/ar/shahid4u/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'شاهد فور يو' pkgNameSuffix = 'ar.shahid4u' extClass = '.Shahid4U' - extVersionCode = 1 + extVersionCode = 2 libVersion = '13' } diff --git a/src/ar/shahid4u/src/eu/kanade/tachiyomi/animeextension/ar/shahid4u/Shahid4U.kt b/src/ar/shahid4u/src/eu/kanade/tachiyomi/animeextension/ar/shahid4u/Shahid4U.kt index 01d67dde3..2a245d344 100644 --- a/src/ar/shahid4u/src/eu/kanade/tachiyomi/animeextension/ar/shahid4u/Shahid4U.kt +++ b/src/ar/shahid4u/src/eu/kanade/tachiyomi/animeextension/ar/shahid4u/Shahid4U.kt @@ -4,6 +4,10 @@ import android.app.Application import android.content.SharedPreferences import androidx.preference.ListPreference import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.animeextension.ar.shahid4u.extractors.DoodExtractor +import eu.kanade.tachiyomi.animeextension.ar.shahid4u.extractors.OkruExtractor +import eu.kanade.tachiyomi.animeextension.ar.shahid4u.extractors.UQLoadExtractor +import eu.kanade.tachiyomi.animeextension.ar.shahid4u.extractors.VidBomExtractor import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.model.AnimeFilter import eu.kanade.tachiyomi.animesource.model.AnimeFilterList @@ -29,7 +33,7 @@ class Shahid4U : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override val name = "شاهد فور يو" - override val baseUrl = "https://shahed4u.mx/" + override val baseUrl = "https://shahed4u.team/" override val lang = "ar" @@ -45,7 +49,7 @@ class Shahid4U : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override fun popularAnimeSelector(): String = "div.glide-slides div.media-block" - override fun popularAnimeRequest(page: Int): Request = GET(if (page == 1)" $baseUrl/home2/" else "$baseUrl") + override fun popularAnimeRequest(page: Int): Request = GET(if (page == 1)" $baseUrl/home2/" else baseUrl) override fun popularAnimeFromElement(element: Element): SAnime { val anime = SAnime.create() @@ -55,15 +59,25 @@ class Shahid4U : ConfigurableAnimeSource, ParsedAnimeHttpSource() { return anime } - private fun titleEdit(title: String): String { - return if (title.contains("فيلم")) - Regex("فيلم(.*?)مترجم").find(title)!!.groupValues[1] + "(فيلم)" - else if (title.contains("مسلسل")) - Regex(if (title.contains("الموسم"))"مسلسل(.*?)الموسم" else "مسلسل(.*?)الحلقة").find(title)!!.groupValues[1] + "(مسلسل)" - else if (title.contains("انمي")) - Regex(if (title.contains("الموسم"))"انمي(.*?)الموسم" else "انمي(.*?)الحلقة").find(title)!!.groupValues[1] + "(انمى)" + private fun titleEdit(title: String, details: Boolean = false): String { + return if (Regex("فيلم (.*?) مترجم").containsMatchIn(title)) + Regex("فيلم (.*?) مترجم").find(title)!!.groupValues[1] + " (فيلم)" // افلام اجنبيه مترجمه + else if (Regex("فيلم (.*?) مدبلج").containsMatchIn(title)) + Regex("فيلم (.*?) مدبلج").find(title)!!.groupValues[1] + " (مدبلج)(فيلم)" // افلام اجنبيه مدبلجه + else if (Regex("فيلم ([^a-zA-Z]+) ([0-9]+)").containsMatchIn(title)) // افلام عربى + Regex("فيلم ([^a-zA-Z]+) ([0-9]+)").find(title)!!.groupValues[1] + " (فيلم)" + else if (title.contains("مسلسل")) { + if (title.contains("الموسم") and details) { + val newTitle = Regex("مسلسل (.*?) الموسم (.*?) الحلقة ([0-9]+)").find(title) + return "${newTitle!!.groupValues[1]} (م.${newTitle.groupValues[2]})(${newTitle.groupValues[3]}ح)" + } else if (title.contains("الحلقة") and details) { + val newTitle = Regex("مسلسل (.*?) الحلقة ([0-9]+)").find(title) + return "${newTitle!!.groupValues[1]} (${newTitle.groupValues[2]}ح)" + } else Regex(if (title.contains("الموسم")) "مسلسل (.*?) الموسم" else "مسلسل (.*?) الحلقة").find(title)!!.groupValues[1] + " (مسلسل)" + } else if (title.contains("انمي")) + return Regex(if (title.contains("الموسم"))"انمي (.*?) الموسم" else "انمي (.*?) الحلقة").find(title)!!.groupValues[1] + " (انمى)" else if (title.contains("برنامج")) - Regex(if (title.contains("الموسم"))"برنامج(.*?)الموسم" else "برنامج(.*?)الحلقة").find(title)!!.groupValues[1] + "(برنامج)" + Regex(if (title.contains("الموسم"))"برنامج (.*?) الموسم" else "برنامج (.*?) الحلقة").find(title)!!.groupValues[1] + " (برنامج)" else title } @@ -76,28 +90,47 @@ class Shahid4U : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override fun episodeListParse(response: Response): List { val episodes = mutableListOf() - fun addEpisode(document: Document, season: String) { - document.select(episodeListSelector()).map { episodes.add(episodeFromElement(it, season)) } + fun addEpisodeNew(url: String, type: String, title: String = "") { + val episode = SEpisode.create() + episode.setUrlWithoutDomain(url) + if (type == "assembly") + episode.name = title.replace("فيلم", "").trim() + else if (type == "movie") + episode.name = "شاهد" + else + episode.name = title + + episodes.add(episode) } - fun addEpisodes(document: Document, url: String) { + fun addEpisodes(response: Response) { + val document = response.asJsoup() + val url = response.request.url.toString() if (url.contains("assemblies")) { for (movie in document.select(popularAnimeSelector())) { - addEpisode(client.newCall(GET(movie.select("a.fullClick").attr("href") + "watch/", headers)).execute().asJsoup(), "assembly") + addEpisodeNew( + movie.select("a.fullClick").attr("href") + "watch/", + "assembly", + movie.select("h3").text() + ) } return } if (document.select("div.seasons--episodes").isNullOrEmpty()) { // Movies - addEpisode(document, "0") + addEpisodeNew(url, "movie") } else { // Series // look for what is wrong for (season in document.select(seasonsNextPageSelector())) { - val seasonNum = season.text().replace("الموسم ", "") - if (season.attr("class").contains("active")) { + val seasonNum = season.text() + if (season.hasClass("active")) { // get episodes from page for (episode in document.select("ul.episodes-list li a")) { - addEpisode(client.newCall(GET(episode.attr("href"), headers)).execute().asJsoup(), seasonNum) + addEpisodeNew( + episode.attr("href"), + "series", + seasonNum + " " + episode.text() + ) } } else { // send request to get episodes @@ -106,13 +139,17 @@ class Shahid4U : ConfigurableAnimeSource, ParsedAnimeHttpSource() { val requestBody = FormBody.Builder().add("season", seasonData).build() val getEpisodes = client.newCall(POST("$baseUrl/wp-content/themes/Shahid4u-WP_HOME/Ajaxat/Single/Episodes.php", refererHeaders, requestBody)).execute().asJsoup() for (episode in getEpisodes.select("li a")) { - addEpisode(client.newCall(GET(episode.attr("href"), headers)).execute().asJsoup(), seasonNum) + addEpisodeNew( + episode.attr("href"), + "series", + seasonNum + " " + episode.text() + ) } } } } } - addEpisodes(response.asJsoup(), response.request.url.toString()) + addEpisodes(response) return episodes } @@ -120,41 +157,47 @@ class Shahid4U : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override fun episodeFromElement(element: Element): SEpisode = throw Exception("not used") - private fun episodeFromElement(element: Element, season: String): SEpisode { - val episode = SEpisode.create() - episode.setUrlWithoutDomain(element.attr("href")) - episode.name = element.ownerDocument().select("meta[property=og:title]").attr("content") - if (season != "assembly") - if (episode.name.contains("فيلم")) - episode.name = "watch" - else - episode.name = "S" + season + ".E" + episode.name.replace("[^0-9]".toRegex(), "").trim() - return episode - } // Video links override fun videoListParse(response: Response): List