update some arabic extensions (#254)

This commit is contained in:
Ahmed gamal
2022-01-23 14:53:21 +02:00
committed by GitHub
parent 0d9cf0e4ef
commit 14301659d1
12 changed files with 119 additions and 17 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'أكوام'
pkgNameSuffix = 'ar.akwam'
extClass = '.Akwam'
extVersionCode = 2
extVersionCode = 3
libVersion = '12'
}

View File

@ -28,7 +28,7 @@ class Akwam : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override val name = "أكوام"
override val baseUrl = "https://akwam.im"
override val baseUrl = "https://akwam.us"
override val lang = "ar"
@ -72,7 +72,7 @@ class Akwam : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun videoListParse(response: Response): List<Video> {
val document = response.asJsoup()
val iframe = document.select("a.link-show").attr("href").replace("http://go.akwam.im", "https://akwam.rest") + "/" + document.ownerDocument().select("input#page_id").attr("value")
val iframe = document.select("a.link-show").attr("href").replace("http://re.two.re", "https://akwam.us") + "/" + document.ownerDocument().select("input#page_id").attr("value")
val referer = response.request.url.toString()
val refererHeaders = Headers.headersOf("referer", referer)
val iframeResponse = client.newCall(GET(iframe, refererHeaders))

View File

@ -5,7 +5,7 @@ ext {
extName = 'اكوام مسلسلات'
pkgNameSuffix = 'ar.akwams'
extClass = '.AkwamS'
extVersionCode = 1
extVersionCode = 2
libVersion = '12'
}

View File

@ -28,7 +28,7 @@ class AkwamS : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override val name = "أكوام مسلسلات"
override val baseUrl = "https://akwam.im"
override val baseUrl = "https://akwam.us"
override val lang = "ar"
@ -62,17 +62,26 @@ class AkwamS : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun episodeFromElement(element: Element): SEpisode {
val episode = SEpisode.create()
val epNum = getNumberFromEpsString(element.text())
episode.setUrlWithoutDomain(element.attr("href"))
episode.name = element.text()
episode.episode_number = when {
(epNum.isNotEmpty()) -> epNum.toFloat()
else -> 1F
}
episode.date_upload = System.currentTimeMillis()
return episode
}
private fun getNumberFromEpsString(epsStr: String): String {
return epsStr.filter { it.isDigit() }
}
// Video links
override fun videoListParse(response: Response): List<Video> {
val document = response.asJsoup()
val iframe = document.select("a.link-show").attr("href").replace("http://go.akwam.im", "https://akwam.rest") + "/" + document.ownerDocument().select("input#page_id").attr("value")
val iframe = document.select("a.link-show").attr("href").replace("http://re.two.re", "https://akwam.us") + "/" + document.ownerDocument().select("input#page_id").attr("value")
val referer = response.request.url.toString()
val refererHeaders = Headers.headersOf("referer", referer)
val iframeResponse = client.newCall(GET(iframe, refererHeaders))

View File

@ -5,7 +5,7 @@ ext {
extName = 'Anime4up'
pkgNameSuffix = 'ar.anime4up'
extClass = '.Anime4Up'
extVersionCode = 21
extVersionCode = 22
libVersion = '12'
}

View File

@ -67,14 +67,23 @@ class Anime4Up : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun episodeFromElement(element: Element): SEpisode {
val episode = SEpisode.create()
val epNum = getNumberFromEpsString(element.select("div.episodes-card-container div.episodes-card div.ehover6 h3 a").text())
episode.setUrlWithoutDomain(element.select("div.episodes-card-container div.episodes-card div.ehover6 h3 a").attr("href"))
// episode.episode_number = element.select("span:nth-child(3)").text().replace(" - ", "").toFloat()
episode.episode_number = when {
(epNum.isNotEmpty()) -> epNum.toFloat()
else -> 1F
}
episode.name = element.select("div.episodes-card-container div.episodes-card div.ehover6 h3 a").text()
episode.date_upload = System.currentTimeMillis()
return episode
}
private fun getNumberFromEpsString(epsStr: String): String {
return epsStr.filter { it.isDigit() }
}
// Video links
override fun videoListParse(response: Response): List<Video> {
@ -151,7 +160,7 @@ class Anime4Up : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
when (filter) {
is GenreList -> {
if (filter.state > 0) {
val GenreN = getGenreList()[filter.state].name
val GenreN = getGenreList()[filter.state].query
val genreUrl = "$baseUrl/anime-genre/$GenreN".toHttpUrlOrNull()!!.newBuilder()
return GET(genreUrl.toString(), headers)
}

View File

@ -5,7 +5,7 @@ ext {
extName = 'أنمي بالكوم'
pkgNameSuffix = 'ar.animeblkom'
extClass = '.AnimeBlkom'
extVersionCode = 4
extVersionCode = 5
libVersion = '12'
}

View File

@ -5,6 +5,7 @@ import android.content.SharedPreferences
import androidx.preference.ListPreference
import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
import eu.kanade.tachiyomi.animesource.model.SAnime
import eu.kanade.tachiyomi.animesource.model.SEpisode
@ -13,6 +14,7 @@ import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.Headers
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
@ -61,18 +63,44 @@ class AnimeBlkom : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
// episodes
override fun episodeListParse(response: Response): List<SEpisode> {
val document = response.asJsoup()
if (document.selectFirst(episodeListSelector()) == null) {
return oneEpisodeParse(document)
}
return document.select(episodeListSelector()).map { episodeFromElement(it) }.reversed()
}
private fun oneEpisodeParse(document: Document): List<SEpisode> {
val episode = SEpisode.create()
episode.setUrlWithoutDomain(document.location())
episode.episode_number = 1F
episode.name = document.selectFirst("div.name.col-xs-12 span h1").text()
episode.date_upload = System.currentTimeMillis()
return listOf(episode)
}
override fun episodeListSelector() = "ul.episodes-links li a"
override fun episodeFromElement(element: Element): SEpisode {
val episode = SEpisode.create()
val epNum = getNumberFromEpsString(element.select("span:nth-child(3)").text())
episode.setUrlWithoutDomain(element.attr("href"))
episode.episode_number = element.select("span:nth-child(3)").text().replace(" - ", "").toFloat()
episode.episode_number = when {
(epNum.isNotEmpty()) -> epNum.toFloat()
else -> 1F
}
// episode.episode_number = element.select("span:nth-child(3)").text().replace(" - ", "").toFloat()
episode.name = element.select("span:nth-child(3)").text() + " :" + element.select("span:nth-child(1)").text()
episode.date_upload = System.currentTimeMillis()
return episode
}
private fun getNumberFromEpsString(epsStr: String): String {
return epsStr.filter { it.isDigit() }
}
// Video links
override fun videoListParse(response: Response): List<Video> {
@ -117,7 +145,7 @@ class AnimeBlkom : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
val anime = SAnime.create()
anime.setUrlWithoutDomain(element.attr("href"))
anime.thumbnail_url = baseUrl + element.select("img").first().attr("data-original")
anime.title = element.select("img").attr("alt").removePrefix(" poster")
anime.title = element.select("img").attr("alt").replace(" poster", "")
return anime
}
@ -125,7 +153,25 @@ class AnimeBlkom : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun searchAnimeSelector(): String = "div.contents div.content div.content-inner div.poster a"
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request = GET("$baseUrl/search?query=$query&page=$page")
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
val url = if (query.isNotBlank()) {
"$baseUrl/search?query=$query&page=$page"
} else {
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
when (filter) {
is TypeList -> {
if (filter.state > 0) {
val GenreN = getTypeList()[filter.state].query
val genreUrl = "$baseUrl/$GenreN?page=$page".toHttpUrlOrNull()!!.newBuilder()
return GET(genreUrl.toString(), headers)
}
}
}
}
throw Exception("اختر فلتر")
}
return GET(url, headers)
}
// Anime Details
@ -157,6 +203,28 @@ class AnimeBlkom : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun latestUpdatesSelector(): String = throw Exception("Not used")
// Filter
override fun getFilterList() = AnimeFilterList(
AnimeFilter.Header("الفلترات مش هتشتغل لو بتبحث او وهي فاضيه"),
TypeList(typesName),
)
private class TypeList(types: Array<String>) : AnimeFilter.Select<String>("نوع الأنمي", types)
private data class Type(val name: String, val query: String)
private val typesName = getTypeList().map {
it.name
}.toTypedArray()
private fun getTypeList() = listOf(
Type("قائمة الأنمي", "anime-list"),
Type(" قائمة المسلسلات ", "series-list"),
Type(" قائمة الأفلام ", "movie-list"),
Type(" قائمة الأوفا ", "ova-list"),
Type(" قائمة الأونا ", "ona-list"),
Type(" قائمة الحلقات خاصة ", "special-list")
)
// preferred quality settings
override fun setupPreferenceScreen(screen: PreferenceScreen) {

View File

@ -5,7 +5,7 @@ ext {
extName = 'MY CIMA'
pkgNameSuffix = 'ar.mycima'
extClass = '.MyCima'
extVersionCode = 11
extVersionCode = 12
libVersion = '12'
}

View File

@ -79,17 +79,25 @@ class MyCima : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
return episodes
}
override fun episodeListSelector() = "div.Episodes--Seasons--Episodes a" // , div.List--Seasons--Episodes a.selected"
override fun episodeListSelector() = "div.Episodes--Seasons--Episodes a"
override fun episodeFromElement(element: Element): SEpisode {
val episode = SEpisode.create()
val epNum = getNumberFromEpsString(element.text())
episode.setUrlWithoutDomain(element.attr("abs:href"))
//episode.episode_number = element.text().removePrefix("موسم ").removePrefix("الحلقة ").replace("مدبلج", "").replace(" -", "").toFloat()
episode.episode_number = when {
(epNum.isNotEmpty()) -> epNum.toFloat()
else -> 1F
}
episode.name = element.ownerDocument().select("div.List--Seasons--Episodes a.selected").text() + " : " + element.text()
episode.date_upload = System.currentTimeMillis()
return episode
}
private fun getNumberFromEpsString(epsStr: String): String {
return epsStr.filter { it.isDigit() }
}
// Video urls
override fun videoListParse(response: Response): List<Video> {

View File

@ -5,7 +5,7 @@ ext {
extName = 'XS Anime'
pkgNameSuffix = 'ar.xsanime'
extClass = '.XsAnime'
extVersionCode = 6
extVersionCode = 7
libVersion = '12'
}

View File

@ -60,14 +60,22 @@ class XsAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun episodeFromElement(element: Element): SEpisode {
val episode = SEpisode.create()
val epNum = getNumberFromEpsString(element.select("a > em").text())
episode.setUrlWithoutDomain(element.attr("abs:href"))
episode.name = element.select("a > em").text()
// episode.episode_number = element.select("a > em").text().replace(" و", "").replace("الأخيرة", "").toFloat()
episode.episode_number = when {
(epNum.isNotEmpty()) -> epNum.toFloat()
else -> 1F
}
episode.date_upload = System.currentTimeMillis()
return episode
}
private fun getNumberFromEpsString(epsStr: String): String {
return epsStr.filter { it.isDigit() }
}
// Video Links
override fun videoListParse(response: Response): List<Video> {