diff --git a/src/ar/movizland/AndroidManifest.xml b/src/ar/movizland/AndroidManifest.xml
deleted file mode 100644
index 568741e54..000000000
--- a/src/ar/movizland/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/src/ar/movizland/build.gradle b/src/ar/movizland/build.gradle
deleted file mode 100644
index 9802499a8..000000000
--- a/src/ar/movizland/build.gradle
+++ /dev/null
@@ -1,17 +0,0 @@
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
-
-ext {
- extName = 'موفيزلاند'
- pkgNameSuffix = 'ar.movizland'
- extClass = '.Movizland'
- extVersionCode = 11
- libVersion = '13'
-}
-
-dependencies {
- implementation(project(':lib-streamtape-extractor'))
- implementation(project(':lib-dood-extractor'))
-}
-
-apply from: "$rootDir/common.gradle"
diff --git a/src/ar/movizland/res/mipmap-hdpi/ic_launcher.png b/src/ar/movizland/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 005bc7ea8..000000000
Binary files a/src/ar/movizland/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/src/ar/movizland/res/mipmap-mdpi/ic_launcher.png b/src/ar/movizland/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 28223a85f..000000000
Binary files a/src/ar/movizland/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/src/ar/movizland/res/mipmap-xhdpi/ic_launcher.png b/src/ar/movizland/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index fae729552..000000000
Binary files a/src/ar/movizland/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/ar/movizland/res/mipmap-xxhdpi/ic_launcher.png b/src/ar/movizland/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 4cfdd3425..000000000
Binary files a/src/ar/movizland/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/ar/movizland/res/mipmap-xxxhdpi/ic_launcher.png b/src/ar/movizland/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 75be5ed0c..000000000
Binary files a/src/ar/movizland/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/ar/movizland/res/web_hi_res_512.png b/src/ar/movizland/res/web_hi_res_512.png
deleted file mode 100644
index 16a2ff567..000000000
Binary files a/src/ar/movizland/res/web_hi_res_512.png and /dev/null differ
diff --git a/src/ar/movizland/src/eu/kanade/tachiyomi/animeextension/ar/movizland/Movizland.kt b/src/ar/movizland/src/eu/kanade/tachiyomi/animeextension/ar/movizland/Movizland.kt
deleted file mode 100644
index f498a1a5f..000000000
--- a/src/ar/movizland/src/eu/kanade/tachiyomi/animeextension/ar/movizland/Movizland.kt
+++ /dev/null
@@ -1,382 +0,0 @@
-package eu.kanade.tachiyomi.animeextension.ar.movizland
-
-import android.app.Application
-import android.content.SharedPreferences
-import androidx.preference.ListPreference
-import androidx.preference.PreferenceScreen
-import eu.kanade.tachiyomi.animeextension.ar.movizland.extractors.LinkboxExtractor
-import eu.kanade.tachiyomi.animeextension.ar.movizland.extractors.MoshahdaExtractor
-import eu.kanade.tachiyomi.animeextension.ar.movizland.extractors.UQLoadExtractor
-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
-import eu.kanade.tachiyomi.animesource.model.Video
-import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
-import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
-import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
-import eu.kanade.tachiyomi.network.GET
-import eu.kanade.tachiyomi.network.POST
-import eu.kanade.tachiyomi.util.asJsoup
-import okhttp3.FormBody
-import okhttp3.Headers
-import okhttp3.OkHttpClient
-import okhttp3.Request
-import okhttp3.Response
-import org.jsoup.nodes.Document
-import org.jsoup.nodes.Element
-import org.jsoup.select.Elements
-import uy.kohesive.injekt.Injekt
-import uy.kohesive.injekt.api.get
-import kotlin.Exception
-
-class Movizland : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
-
- override val name = "موفيزلاند"
-
- override val baseUrl = "https://eg.movizlaand.top"
-
- override val lang = "ar"
-
- override val supportsLatest = false
-
- override val client: OkHttpClient = network.cloudflareClient
-
- private val preferences: SharedPreferences by lazy {
- Injekt.get().getSharedPreferences("source_$id", 0x0000)
- }
-
- // ============================= popular =============================
-
- 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("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 =============================
-
- private fun seasonsNextPageSelector() = "div.BlockItem a"
-
- override fun episodeListParse(response: Response): List {
- val episodes = mutableListOf()
-
- 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 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
- }
-
- episodes.add(episode)
- }
- fun seasonsAdjust(selector: String, seasons: Elements): List {
- var reverse = false
- for ((i, s) in seasons.withIndex()) {
- if (s.select(selector).text().contains("الاول")) {
- if (i == 0) reverse = true
- }
- if (s.select(selector).text().contains("الثان")) {
- if (i != 0) {
- seasons.remove(s)
- seasons.add(1, s)
- }
- }
- }
- return if (reverse) seasons.reversed() else seasons
- }
- fun addEpisodes(response: Response) {
- val document = response.asJsoup()
- val url = response.request.url.toString()
- // 1 episode in search to whole season
-
- if (url.contains("series")) {
- // Series and movie-series
- for (season in seasonsAdjust("div.BlockTitle", document.select(seasonsNextPageSelector()))) {
- season.let {
- val link = it.attr("href")
- // if series > 1 season
- if (link.contains("series")) {
- val seasonHTML = client.newCall(GET(link, headers)).execute().asJsoup()
- for (episode in seasonHTML.select(seasonsNextPageSelector())) {
- episode.run {
- addEpisodeNew(this.attr("href"), "series", this.select("div.BlockTitle").text())
- }
- }
- } else {
- // if series 1 season only
- val title = it.select("div.BlockTitle").text()
- addEpisodeNew(link, if (title.contains("فيلم")) "assembly" else "series", title)
- }
- }
- }
- } else {
- // Movies
- var countSeasons = 0
- var count = 0
- for (season in seasonsAdjust("a", document.select("div.SeriesSingle ul.DropdownFilter li"))) {
- countSeasons++
- val seasonData = season.select("a").attr("data-term")
- val refererHeaders = Headers.headersOf("referer", url, "x-requested-with", "XMLHttpRequest")
- val requestBody = FormBody.Builder().add("season", seasonData).build()
- val getEpisodes = client.newCall(POST("$baseUrl/wp-content/themes/Moviezland2022/EpisodesList.php", refererHeaders, requestBody)).execute().asJsoup()
- for (episode in getEpisodes.select("div.EpisodeItem").reversed()) {
- addEpisodeNew(episode.select("a").attr("href"), "series", season.select("a").text() + " " + episode.select("a").text())
- }
- }
- if (countSeasons == 0) {
- for (episode in document.select("div.EpisodeItem").reversed()) {
- count++
- addEpisodeNew(
- episode.select("a").attr("href"),
- "series",
- document.select("div.SeriesSingle h2 span a").text() + " " + episode.select("a").text(),
- )
- }
- if (count == 0) {
- addEpisodeNew(url, "movie")
- }
- }
- }
- }
-
- addEpisodes(response)
-
- return episodes
- }
-
- override fun episodeListSelector() = "link[rel=canonical]"
-
- override fun episodeFromElement(element: Element): SEpisode = throw Exception("not used")
-
- // ============================= video links =============================
-
- override fun videoListParse(response: Response): List