diff --git a/src/ar/tuktukcinema/build.gradle b/src/ar/tuktukcinema/build.gradle deleted file mode 100644 index 349eabf7..00000000 --- a/src/ar/tuktukcinema/build.gradle +++ /dev/null @@ -1,17 +0,0 @@ -ext { - extName = 'Tuktuk Cinema' - extClass = '.Tuktukcinema' - extVersionCode = 24 -} - -apply from: "$rootDir/common.gradle" - -dependencies { - implementation(project(':lib:uqload-extractor')) - implementation(project(':lib:okru-extractor')) - implementation(project(':lib:dood-extractor')) - implementation(project(':lib:streamtape-extractor')) - implementation(project(':lib:vidbom-extractor')) - implementation(project(':lib:playlist-utils')) - implementation(libs.jsunpacker) -} diff --git a/src/ar/tuktukcinema/res/mipmap-hdpi/ic_launcher.png b/src/ar/tuktukcinema/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index db20dc7b..00000000 Binary files a/src/ar/tuktukcinema/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/tuktukcinema/res/mipmap-mdpi/ic_launcher.png b/src/ar/tuktukcinema/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index d29ea29a..00000000 Binary files a/src/ar/tuktukcinema/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/tuktukcinema/res/mipmap-xhdpi/ic_launcher.png b/src/ar/tuktukcinema/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index c1f34e21..00000000 Binary files a/src/ar/tuktukcinema/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/tuktukcinema/res/mipmap-xxhdpi/ic_launcher.png b/src/ar/tuktukcinema/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index f007b8ce..00000000 Binary files a/src/ar/tuktukcinema/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/tuktukcinema/res/mipmap-xxxhdpi/ic_launcher.png b/src/ar/tuktukcinema/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 707a055d..00000000 Binary files a/src/ar/tuktukcinema/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/tuktukcinema/src/eu/kanade/tachiyomi/animeextension/ar/tuktukcinema/Tuktukcinema.kt b/src/ar/tuktukcinema/src/eu/kanade/tachiyomi/animeextension/ar/tuktukcinema/Tuktukcinema.kt deleted file mode 100644 index be33bfc8..00000000 --- a/src/ar/tuktukcinema/src/eu/kanade/tachiyomi/animeextension/ar/tuktukcinema/Tuktukcinema.kt +++ /dev/null @@ -1,309 +0,0 @@ -package eu.kanade.tachiyomi.animeextension.ar.tuktukcinema - -import android.app.Application -import android.content.SharedPreferences -import androidx.preference.ListPreference -import androidx.preference.PreferenceScreen -import dev.datlag.jsunpacker.JsUnpacker -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.okruextractor.OkruExtractor -import eu.kanade.tachiyomi.lib.playlistutils.PlaylistUtils -import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor -import eu.kanade.tachiyomi.lib.uqloadextractor.UqloadExtractor -import eu.kanade.tachiyomi.lib.vidbomextractor.VidBomExtractor -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.util.asJsoup -import eu.kanade.tachiyomi.util.parallelCatchingFlatMapBlocking -import okhttp3.Request -import okhttp3.Response -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import uy.kohesive.injekt.Injekt -import uy.kohesive.injekt.api.get - -class Tuktukcinema : ConfigurableAnimeSource, ParsedAnimeHttpSource() { - - override val name = "توك توك سينما" - - // TODO: Check frequency of url changes to potentially - // add back overridable baseurl preference - override val baseUrl = "https://w.tuktokcinema.com" - - override val lang = "ar" - - override val supportsLatest = true - - private val preferences: SharedPreferences by lazy { - Injekt.get().getSharedPreferences("source_$id", 0x0000) - } - - // ============================ popular =============================== - - override fun popularAnimeSelector(): String = "div.Block--Item, div.Small--Box" - - override fun popularAnimeRequest(page: Int): Request = GET(baseUrl) - - override fun popularAnimeFromElement(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.setUrlWithoutDomain(element.select("a").attr("href") + "watch/") - return anime - } - - private fun titleEdit(title: String, details: Boolean = false): String { - return if (Regex("(?:فيلم|عرض)\\s(.*\\s[0-9]+)\\s(.+?)\\s").containsMatchIn(title)) { - val titleGroup = Regex("(?:فيلم|عرض)\\s(.*\\s[0-9]+)\\s(.+?)\\s").find(title) - val movieName = titleGroup!!.groupValues[1] - val type = titleGroup.groupValues[2] - movieName + if (details) " ($type)" else "" - } else if (Regex("(?:مسلسل|برنامج|انمي)\\s(.+)\\sالحلقة\\s(\\d+)").containsMatchIn(title)) { - val titleGroup = Regex("(?:مسلسل|برنامج|انمي)\\s(.+)\\sالحلقة\\s(\\d+)").find(title) - val seriesName = titleGroup!!.groupValues[1] - val epNum = titleGroup.groupValues[2] - if (details) { - "$seriesName (ep:$epNum)" - } else if (seriesName.contains("الموسم")) { - seriesName.split("الموسم")[0].trim() - } else { - seriesName - } - } else { - title - } - } - - override fun popularAnimeNextPageSelector(): String = "div.pagination ul.page-numbers li a.next" - - // ============================ episodes =============================== - - private fun seasonsNextPageSelector() = "section.allseasonss div.Block--Item" - - override fun episodeListParse(response: Response): List { - val episodes = mutableListOf() - fun addEpisodeNew(url: String, title: String) { - val episode = SEpisode.create() - episode.setUrlWithoutDomain(url) - episode.name = title - episodes.add(episode) - } - fun addEpisodes(response: Response) { - val document = response.asJsoup() - val url = response.request.url.toString() - if (document.select(seasonsNextPageSelector()).isNullOrEmpty()) { - addEpisodeNew("$url/watch/", "مشاهدة") - } else { - document.select(seasonsNextPageSelector()).reversed().forEach { season -> - val seasonNum = season.select("h3").text() - ( - if (seasonNum == document.selectFirst("div#mpbreadcrumbs a span:contains(الموسم)")!!.text()) { - document - } else { - client.newCall(GET(season.selectFirst("a")!!.attr("href"))).execute().asJsoup() - } - ) - .select("section.allepcont a").forEach { episode -> - addEpisodeNew( - episode.attr("href") + "watch/", - seasonNum + " : الحلقة " + episode.select("div.epnum").text().filter { it.isDigit() }, - ) - } - } - } - } - addEpisodes(response) - return episodes - } - - override fun episodeListSelector() = "link[rel=canonical]" - - override fun episodeFromElement(element: Element): SEpisode = throw UnsupportedOperationException() - - // ============================ video links ============================ - override fun videoListRequest(episode: SEpisode): Request { - val refererHeaders = headers.newBuilder().apply { - add("Referer", "$baseUrl/") - }.build() - - return GET("$baseUrl/${episode.url}", headers = refererHeaders) - } - - override fun videoListSelector() = "div.watch--servers--list ul li.server--item" - - override fun videoListParse(response: Response): List