fix movizland and tuktukcinema (#1025)
This commit is contained in:
@ -5,7 +5,7 @@ ext {
|
||||
extName = 'موفيزلاند'
|
||||
pkgNameSuffix = 'ar.movizland'
|
||||
extClass = '.Movizland'
|
||||
extVersionCode = 9
|
||||
extVersionCode = 10
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
|
@ -29,13 +29,13 @@ import org.jsoup.nodes.Element
|
||||
import org.jsoup.select.Elements
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import java.lang.Exception
|
||||
import kotlin.Exception
|
||||
|
||||
class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override val name = "موفيزلاند"
|
||||
|
||||
override val baseUrl = "https://watch.movizland.cyou"
|
||||
override val baseUrl = "https://movizland.icu"
|
||||
|
||||
override val lang = "ar"
|
||||
|
||||
@ -47,45 +47,24 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
|
||||
}
|
||||
|
||||
// Popular
|
||||
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)
|
||||
"${newTitle!!.groupValues[1]} (م.${newTitle.groupValues[2]})(${newTitle.groupValues[3]}ح)"
|
||||
} else if (title.contains("الحلقة")and details) {
|
||||
val newTitle = Regex("مسلسل (.*?) الحلقة ([0-9]+)").find(title)
|
||||
"${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] + " (برنامج)"
|
||||
else
|
||||
title
|
||||
}
|
||||
// ============================= popular =============================
|
||||
|
||||
override fun popularAnimeSelector(): String = "div.BlockItem"
|
||||
override fun popularAnimeSelector(): String = "div.BlockItem a"
|
||||
|
||||
override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/page/$page/")
|
||||
|
||||
override fun popularAnimeFromElement(element: Element): SAnime {
|
||||
val anime = SAnime.create()
|
||||
anime.thumbnail_url = element.select("a div.BlockImageItem img").attr("data-src")
|
||||
anime.setUrlWithoutDomain(element.select("a").attr("href"))
|
||||
anime.title = titleEdit(element.select("a div.BlockImageItem img").attr("alt"))
|
||||
anime.thumbnail_url = element.select("div.BlockImageItem img").attr("data-src")
|
||||
anime.setUrlWithoutDomain(element.attr("href"))
|
||||
anime.title = titleEdit(element.select("div.BlockImageItem img").attr("alt"), true)
|
||||
return anime
|
||||
}
|
||||
|
||||
override fun popularAnimeNextPageSelector(): String = "div.pagination li a.next"
|
||||
|
||||
// episodes
|
||||
// ============================= episodes =============================
|
||||
|
||||
private fun seasonsNextPageSelector() = "div.BlockItem a"
|
||||
|
||||
override fun episodeListParse(response: Response): List<SEpisode> {
|
||||
@ -97,13 +76,11 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
if (type == "assembly")
|
||||
episode.name = title.replace("فيلم", "").trim()
|
||||
else if (type == "movie")
|
||||
episode.name = "watch"
|
||||
else if (Regex("الموسم (.*)").containsMatchIn(title))
|
||||
episode.name = Regex("الموسم (.*)").find(title)!!.value.replace("مترجمة", "").replace("والاخيرة", "").trim()
|
||||
else if (Regex("الحلقة (.*)").containsMatchIn(title))
|
||||
episode.name = Regex("الحلقة (.*)").find(title)!!.value.replace("مترجمة", "").replace("والاخيرة", "").trim()
|
||||
else if (Regex("حلقة (.*)").containsMatchIn(title))
|
||||
episode.name = Regex("حلقة (.*)").find(title)!!.value.replace("مترجمة", "").replace("والاخيرة", "").trim()
|
||||
episode.name = "مشاهدة"
|
||||
else if (TitleRegex.SEASON.containsMatchIn(title))
|
||||
episode.name = TitleRegex.SEASON.find(title)!!.value.replace("مترجمة", "").replace("والاخيرة", "").trim()
|
||||
else if (TitleRegex.EPISODE.containsMatchIn(title))
|
||||
episode.name = TitleRegex.EPISODE.find(title)!!.value.replace("مترجمة", "").replace("والاخيرة", "").trim()
|
||||
else
|
||||
episode.name = title
|
||||
|
||||
@ -187,7 +164,7 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override fun episodeFromElement(element: Element): SEpisode = throw Exception("not used")
|
||||
|
||||
// Video links
|
||||
// ============================= video links =============================
|
||||
|
||||
override fun videoListParse(response: Response): List<Video> {
|
||||
val videos = mutableListOf<Video>()
|
||||
@ -217,24 +194,6 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override fun videoListSelector() = "body"
|
||||
|
||||
private fun videosFromElement(element: Element): List<Video> {
|
||||
val videoList = mutableListOf<Video>()
|
||||
val qualityMap = mapOf("l" to "240p", "n" to "360p", "h" to "480p", "x" to "720p", "o" to "1080p")
|
||||
val data = element.data().substringAfter(", file: \"").substringBefore("\"}],")
|
||||
val url = Regex("(.*)_,(.*),\\.urlset/master(.*)").find(data)
|
||||
val sources = url!!.groupValues[2].split(",")
|
||||
for (quality in sources) {
|
||||
val src = url.groupValues[1] + "_" + quality + "/index-v1-a1" + url.groupValues[3]
|
||||
val video = qualityMap[quality]?.let {
|
||||
Video(src, it, src)
|
||||
}
|
||||
if (video != null) {
|
||||
videoList.add(video)
|
||||
}
|
||||
}
|
||||
return videoList
|
||||
}
|
||||
|
||||
override fun List<Video>.sort(): List<Video> {
|
||||
val quality = preferences.getString("preferred_quality", null)
|
||||
if (quality != null) {
|
||||
@ -257,7 +216,7 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override fun videoFromElement(element: Element) = throw Exception("not used")
|
||||
|
||||
// Search
|
||||
// ============================= search =============================
|
||||
|
||||
override fun searchAnimeFromElement(element: Element): SAnime {
|
||||
val anime = SAnime.create()
|
||||
@ -275,11 +234,8 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
override fun searchAnimeSelector(): String = "div.BlocksInner div.BlocksUI div.BlockItem, div.BoxOfficeOtherSide div.BlocksUI div.BlockItem"
|
||||
|
||||
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
|
||||
var newQuery = query
|
||||
if (Regex("(.*)\\(").containsMatchIn(query))
|
||||
newQuery = Regex("(.*)\\(").find(query)!!.groupValues[1].replace("(", "")
|
||||
val url = if (query.isNotBlank()) {
|
||||
"$baseUrl/page/$page/?s=$newQuery"
|
||||
"$baseUrl/page/$page/?s=$query"
|
||||
} else {
|
||||
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
|
||||
when (filter) {
|
||||
@ -298,7 +254,7 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
return GET(url, headers)
|
||||
}
|
||||
|
||||
// Anime Details
|
||||
// ============================= anime details =============================
|
||||
|
||||
override fun animeDetailsParse(document: Document): SAnime {
|
||||
val anime = SAnime.create()
|
||||
@ -312,7 +268,7 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
return anime
|
||||
}
|
||||
|
||||
// Latest
|
||||
// ============================= latest =============================
|
||||
|
||||
override fun latestUpdatesNextPageSelector(): String = throw Exception("Not used")
|
||||
|
||||
@ -322,7 +278,7 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override fun latestUpdatesSelector(): String = throw Exception("Not used")
|
||||
|
||||
// Filters
|
||||
// ============================= filters =============================
|
||||
|
||||
override fun getFilterList() = AnimeFilterList(
|
||||
AnimeFilter.Header("الفلترات مش هتشتغل لو بتبحث او وهي فاضيه"),
|
||||
@ -353,8 +309,44 @@ class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
CatUnit("مسلسلات تركى", "series/turkish-series"),
|
||||
CatUnit("مسلسلات عربى", "series/arab-series")
|
||||
)
|
||||
// ============================= title edit =============================
|
||||
|
||||
// preferred quality settings
|
||||
private fun titleEdit(title: String, details: Boolean = false): String {
|
||||
val movie = "فيلم"
|
||||
|
||||
val finalTitle = if (title.contains("مسلسل")) {
|
||||
if (TitleRegex.SERIES_SEASONS.containsMatchIn(title)) {
|
||||
val newTitle = TitleRegex.SERIES_SEASONS.find(title)
|
||||
newTitle!!.groupValues[1].trim() + if (details) " (م.${newTitle.groupValues[2].trim()})(${newTitle.groupValues[3].trim()}ح)" else ""
|
||||
} else if (TitleRegex.SERIES_EPISODES.containsMatchIn(title)) {
|
||||
val newTitle = TitleRegex.SERIES_EPISODES.find(title)
|
||||
newTitle!!.groupValues[1].trim() + if (details) " (${newTitle.groupValues[2].trim()}ح)" else ""
|
||||
} else title
|
||||
} else if (title.contains("فيلم")) {
|
||||
if (TitleRegex.ARABIC_MOVIE.containsMatchIn(title)) // افلام عربى
|
||||
TitleRegex.ARABIC_MOVIE.find(title)!!.groupValues[1].trim() + if (details) " ($movie)" else ""
|
||||
else if (TitleRegex.MOVIES.containsMatchIn(title))
|
||||
TitleRegex.MOVIES.find(title)!!.groupValues[1].trim() + if (details) " (${TitleRegex.MOVIES.find(title)!!.groupValues[2].trim()})($movie)" else ""
|
||||
else title
|
||||
} else if (title.contains("انمي"))
|
||||
Regex(if (title.contains("الموسم"))"انمي(.*)الموسم" else "انمي(.*)الحلقة").find(title)!!.groupValues[1] + if (details) " (انمى)" else ""
|
||||
else if (title.contains("برنامج"))
|
||||
Regex(if (title.contains("الموسم"))"برنامج(.*)الموسم" else "برنامج(.*)حلقة").find(title)!!.groupValues[1].removeSurrounding(" ال") + if (details) " (برنامج)" else ""
|
||||
else
|
||||
title
|
||||
return finalTitle.trim()
|
||||
}
|
||||
|
||||
object TitleRegex {
|
||||
val MOVIES = "(?:[^a-zA-Z]+)(.*)(?:[0-9 ]+)([^a-zA-Z]+)".toRegex()
|
||||
val ARABIC_MOVIE = "فيلم ([^a-zA-Z]+) ([0-9]+)".toRegex()
|
||||
val SERIES_SEASONS = "مسلسل(.*)الموسم(.*)الحلقة([ 0-9]+)".toRegex()
|
||||
val SERIES_EPISODES = "مسلسل(.*)الحلقة([ 0-9]+)".toRegex()
|
||||
val SEASON = "الموسم(.*)".toRegex()
|
||||
val EPISODE = "حلقة(.*)".toRegex()
|
||||
}
|
||||
|
||||
// ============================ quality settings =======================
|
||||
|
||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||
val videoQualityPref = ListPreference(screen.context).apply {
|
||||
|
@ -2,10 +2,10 @@ apply plugin: 'com.android.application'
|
||||
apply plugin: 'kotlin-android'
|
||||
|
||||
ext {
|
||||
extName = 'تك تك سينما'
|
||||
extName = 'توك توك سينما'
|
||||
pkgNameSuffix = 'ar.tuktukcinema'
|
||||
extClass = '.Tuktukcinema'
|
||||
extVersionCode = 1
|
||||
extVersionCode = 2
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,7 @@ import java.lang.Exception
|
||||
|
||||
class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override val name = "تك تك سينما"
|
||||
override val name = "توك توك سينما"
|
||||
|
||||
override val baseUrl = "https://w.tuktukcinema.net"
|
||||
|
||||
@ -61,24 +61,26 @@ class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
}
|
||||
|
||||
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) {
|
||||
return if (title.contains("فيلم")) {
|
||||
if (Regex("فيلم (.*?) مترجم").containsMatchIn(title))
|
||||
Regex("فيلم (.*?) مترجم").find(title)!!.groupValues[1] + if (details) " (فيلم)" else "" // افلام اجنبيه مترجمه
|
||||
else if (Regex("فيلم (.*?) مدبلج").containsMatchIn(title))
|
||||
Regex("فيلم (.*?) مدبلج").find(title)!!.groupValues[1] + if (details) " (مدبلج)(فيلم)" else "" // افلام اجنبيه مدبلجه
|
||||
else if (Regex("فيلم ([^a-zA-Z]+) ([0-9]+)").containsMatchIn(title)) // افلام عربى
|
||||
Regex("فيلم ([^a-zA-Z]+) ([0-9]+)").find(title)!!.groupValues[1] + if (details) " (فيلم)" else ""
|
||||
else title
|
||||
} else if (title.contains("مسلسل")) {
|
||||
if (title.contains("الموسم")) {
|
||||
val newTitle = Regex("مسلسل (.*?) الموسم (.*?) الحلقة ([0-9]+)").find(title)
|
||||
return "${newTitle!!.groupValues[1]} (م.${newTitle.groupValues[2]})(${newTitle.groupValues[3]}ح)"
|
||||
} else if (title.contains("الحلقة") and details) {
|
||||
newTitle!!.groupValues[1] + if (details) " (م.${newTitle.groupValues[2]})(${newTitle.groupValues[3]}ح)" else ""
|
||||
} else if (title.contains("الحلقة")) {
|
||||
val newTitle = Regex("مسلسل (.*?) الحلقة ([0-9]+)").find(title)
|
||||
return "${newTitle!!.groupValues[1]} (${newTitle.groupValues[2]}ح)"
|
||||
} else Regex(if (title.contains("الموسم")) "مسلسل (.*?) الموسم" else "مسلسل (.*?) الحلقة").find(title)!!.groupValues[1] + " (مسلسل)"
|
||||
newTitle!!.groupValues[1] + if (details) " (${newTitle.groupValues[2]}ح)" else ""
|
||||
} else Regex(if (title.contains("الموسم")) "مسلسل (.*?) الموسم" else "مسلسل (.*?) الحلقة").find(title)!!.groupValues[1] + if (details) " (مسلسل)" else ""
|
||||
} else if (title.contains("انمي"))
|
||||
return Regex(if (title.contains("الموسم"))"انمي (.*?) الموسم" else "انمي (.*?) الحلقة").find(title)!!.groupValues[1] + " (انمى)"
|
||||
return Regex(if (title.contains("الموسم"))"انمي (.*?) الموسم" else "انمي (.*?) الحلقة").find(title)!!.groupValues[1] + if (details) " (انمى)" else ""
|
||||
else if (title.contains("برنامج"))
|
||||
Regex(if (title.contains("الموسم"))"برنامج (.*?) الموسم" else "برنامج (.*?) الحلقة").find(title)!!.groupValues[1] + " (برنامج)"
|
||||
Regex(if (title.contains("الموسم"))"برنامج (.*?) الموسم" else "برنامج (.*?) الحلقة").find(title)!!.groupValues[1] + if (details) " (برنامج)" else ""
|
||||
else
|
||||
title
|
||||
}
|
||||
@ -118,7 +120,7 @@ class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
addEpisodeNew(
|
||||
ep.attr("href"),
|
||||
"series",
|
||||
seasonNum + " " + ep.text()
|
||||
seasonNum + " : الحلقة " + ep.select("em").text()
|
||||
)
|
||||
}
|
||||
} else {
|
||||
@ -132,7 +134,7 @@ class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
addEpisodeNew(
|
||||
ep.attr("href"),
|
||||
"series",
|
||||
seasonNum + " " + ep.text()
|
||||
seasonNum + " : الحلقة " + ep.select("em").text()
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -203,7 +205,7 @@ class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override fun searchAnimeSelector(): String = "div.Block--Item"
|
||||
|
||||
override fun searchAnimeNextPageSelector(): String = "div.paginate ul.page-numbers li.next a"
|
||||
override fun searchAnimeNextPageSelector(): String = "div.paginate ul.page-numbers li a.next"
|
||||
|
||||
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
|
||||
val url = if (query.isNotBlank()) {
|
||||
@ -229,8 +231,11 @@ class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override fun searchAnimeFromElement(element: Element): SAnime {
|
||||
val anime = SAnime.create()
|
||||
anime.title = titleEdit(element.select("a").attr("title"), true).trim()
|
||||
anime.thumbnail_url = element.select("img").attr("data-src")
|
||||
anime.title = titleEdit(element.select("h3").text(), true).trim()
|
||||
if (element.ownerDocument().location().contains("?s="))
|
||||
anime.thumbnail_url = element.select("img").attr("src")
|
||||
else
|
||||
anime.thumbnail_url = element.select("img").attr("data-src")
|
||||
anime.setUrlWithoutDomain(element.select("a").attr("href") + "watch/")
|
||||
return anime
|
||||
}
|
||||
@ -239,12 +244,12 @@ class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override fun animeDetailsParse(document: Document): SAnime {
|
||||
val anime = SAnime.create()
|
||||
val info = client.newCall(GET(document.select(episodeListSelector()).attr("href").replace("watch/", ""))).execute().asJsoup()
|
||||
anime.genre = info.select("div.catssection li a").joinToString(", ") { it.text() }
|
||||
anime.title = titleEdit(info.select("h1.post-title").text()).trim()
|
||||
anime.author = info.select("ul.RightTaxContent li:contains(دولة) a").text()
|
||||
anime.description = info.select("div.story").text().trim()
|
||||
anime.genre = document.select("div.catssection li a").joinToString(", ") { it.text() }
|
||||
anime.title = titleEdit(document.select("h1.post-title").text()).trim()
|
||||
anime.author = document.select("ul.RightTaxContent li:contains(دولة) a").text()
|
||||
anime.description = document.select("div.story").text().trim()
|
||||
anime.status = SAnime.COMPLETED
|
||||
anime.thumbnail_url = document.select("div.left div.image img").attr("src")
|
||||
return anime
|
||||
}
|
||||
|
||||
@ -252,7 +257,7 @@ class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override fun latestUpdatesSelector(): String = "div.Block--Item"
|
||||
|
||||
override fun latestUpdatesNextPageSelector(): String = "div.paginate ul.page-numbers li.next a"
|
||||
override fun latestUpdatesNextPageSelector(): String = "div.paginate ul.page-numbers li a.next"
|
||||
|
||||
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/recent/page/$page/")
|
||||
|
||||
@ -285,16 +290,11 @@ class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
CatUnit("افلام اسيويه", "category/movies-33/افلام-اسيوي/"),
|
||||
CatUnit("افلام هنديه", "category/movies-33/افلام-هندى/"),
|
||||
CatUnit("كل المسسلسلات", "category/series-9/"),
|
||||
CatUnit("مسلسلات اجنبى", "sercat/مسلسلات-اجنبي/"),
|
||||
CatUnit("جديد مسلسلات اجنبى", "category/series-9/مسلسلات-اجنبي/"),
|
||||
CatUnit("مسلسلات انمى", "sercat/قائمة-الانمي/"),
|
||||
CatUnit("جديد مسلسلات انمى", "category/anime-6/انمي-مترجم/"),
|
||||
CatUnit("مسلسلات تركى", "sercat/مسلسلات-تركي/"),
|
||||
CatUnit("جديد مسلسلات تركى", "category/series-9/مسلسلات-تركي/"),
|
||||
CatUnit("مسلسلات اسيوى", "sercat/مسلسلات-أسيوي/"),
|
||||
CatUnit("جديد مسلسلات اسيوى", "category/series-9/مسلسلات-أسيوي/"),
|
||||
CatUnit("مسلسلات هندى", "sercat/مسلسلات-هندي/"),
|
||||
CatUnit("جديد مسلسلات هندى", "category/series-9/مسلسلات-هندي/")
|
||||
CatUnit("مسلسلات اجنبى", "category/series-9/مسلسلات-اجنبي/"),
|
||||
CatUnit("مسلسلات انمى", "category/anime-6/انمي-مترجم/"),
|
||||
CatUnit("مسلسلات تركى", "category/series-9/مسلسلات-تركي/"),
|
||||
CatUnit("مسلسلات اسيوى", "category/series-9/مسلسلات-أسيوي/"),
|
||||
CatUnit("مسلسلات هندى", "category/series-9/مسلسلات-هندي/")
|
||||
)
|
||||
|
||||
// preferred quality settings
|
||||
|
Reference in New Issue
Block a user