From 9bd5bc00df445cec3cad4c73d620895dd28cbff6 Mon Sep 17 00:00:00 2001
From: C10udburst <18114966+C10udburst@users.noreply.github.com>
Date: Wed, 17 Aug 2022 14:48:16 +0200
Subject: [PATCH] remove non english providers and add lang property
---
AllAnimeProvider/build.gradle.kts | 1 +
AllMoviesForYouProvider/build.gradle.kts | 1 +
AniflixProvider/build.gradle.kts | 1 +
AnimeFlickProvider/build.gradle.kts | 1 +
AnimeIndoProvider/build.gradle.kts | 26 --
.../src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/AnimeIndoProvider.kt | 192 ---------
.../com/lagradost/AnimeIndoProviderPlugin.kt | 14 -
AnimePaheProvider/build.gradle.kts | 1 +
AnimeSailProvider/build.gradle.kts | 26 --
.../src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/AnimeSailProvider.kt | 191 --------
.../com/lagradost/AnimeSailProviderPlugin.kt | 14 -
AnimekisaProvider/build.gradle.kts | 1 +
AsiaFlixProvider/build.gradle.kts | 1 +
BflixProvider/build.gradle.kts | 1 +
DramaidProvider/build.gradle.kts | 25 --
DramaidProvider/src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/DramaidProvider.kt | 213 ---------
.../com/lagradost/DramaidProviderPlugin.kt | 14 -
DubbedAnimeProvider/build.gradle.kts | 1 +
DubokuProvider/build.gradle.kts | 26 --
DubokuProvider/src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/DubokuProvider.kt | 133 ------
.../com/lagradost/DubokuProviderPlugin.kt | 14 -
EjaTv/build.gradle.kts | 1 +
FrenchStreamProvider/build.gradle.kts | 26 --
.../src/main/AndroidManifest.xml | 2 -
.../com/lagradost/FrenchStreamProvider.kt | 273 ------------
.../lagradost/FrenchStreamProviderPlugin.kt | 14 -
GogoanimeProvider/build.gradle.kts | 1 +
GomunimeProvider/build.gradle.kts | 26 --
GomunimeProvider/src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/GomunimeProvider.kt | 232 ----------
.../com/lagradost/GomunimeProviderPlugin.kt | 14 -
HDMProvider/build.gradle.kts | 1 +
HDMovie5/build.gradle.kts | 24 --
HDMovie5/src/main/AndroidManifest.xml | 2 -
.../src/main/kotlin/com/lagradost/HDMovie5.kt | 154 -------
.../kotlin/com/lagradost/HDMovie5Plugin.kt | 14 -
HDrezkaProvider/build.gradle.kts | 27 --
HDrezkaProvider/src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/HDrezkaProvider.kt | 408 ------------------
.../com/lagradost/HDrezkaProviderPlugin.kt | 14 -
IHaveNoTvProvider/build.gradle.kts | 1 +
IdlixProvider/build.gradle.kts | 25 --
IdlixProvider/src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/IdlixProvider.kt | 385 -----------------
.../com/lagradost/IdlixProviderPlugin.kt | 14 -
KawaiifuProvider/build.gradle.kts | 1 +
KimCartoonProvider/build.gradle.kts | 1 +
KisskhProvider/build.gradle.kts | 1 +
KuramanimeProvider/build.gradle.kts | 26 --
.../src/main/AndroidManifest.xml | 2 -
.../com/lagradost/KuramanimeProvider.kt | 176 --------
.../com/lagradost/KuramanimeProviderPlugin.kt | 14 -
KuronimeProvider/build.gradle.kts | 26 --
KuronimeProvider/src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/KuronimeProvider.kt | 197 ---------
.../com/lagradost/KuronimeProviderPlugin.kt | 14 -
LayarKacaProvider/build.gradle.kts | 26 --
.../src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/LayarKacaProvider.kt | 176 --------
.../com/lagradost/LayarKacaProviderPlugin.kt | 14 -
MeloMovieProvider/build.gradle.kts | 1 +
MultiplexProvider/build.gradle.kts | 26 --
.../src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/MultiplexProvider.kt | 188 --------
.../com/lagradost/MultiplexProviderPlugin.kt | 14 -
NeonimeProvider/build.gradle.kts | 27 --
NeonimeProvider/src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/NeonimeProvider.kt | 178 --------
.../com/lagradost/NeonimeProviderPlugin.kt | 14 -
NginxProvider/build.gradle.kts | 1 +
NineAnimeProvider/build.gradle.kts | 1 +
NontonAnimeIDProvider/build.gradle.kts | 26 --
.../src/main/AndroidManifest.xml | 2 -
.../com/lagradost/NontonAnimeIDProvider.kt | 257 -----------
.../lagradost/NontonAnimeIDProviderPlugin.kt | 14 -
OlgplyProvider/build.gradle.kts | 1 +
OploverzProvider/build.gradle.kts | 26 --
OploverzProvider/src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/OploverzProvider.kt | 203 ---------
.../com/lagradost/OploverzProviderPlugin.kt | 14 -
OtakudesuProvider/build.gradle.kts | 26 --
.../src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/OtakudesuProvider.kt | 204 ---------
.../com/lagradost/OtakudesuProviderPlugin.kt | 14 -
PelisflixProvider/build.gradle.kts | 26 --
.../src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/PelisflixProvider.kt | 231 ----------
.../com/lagradost/PelisflixProviderPlugin.kt | 14 -
PhimmoichillProvider/build.gradle.kts | 27 --
.../src/main/AndroidManifest.xml | 2 -
.../com/lagradost/PhimmoichillProvider.kt | 222 ----------
.../lagradost/PhimmoichillProviderPlugin.kt | 14 -
PinoyHDXyzProvider/build.gradle.kts | 25 --
.../src/main/AndroidManifest.xml | 2 -
.../com/lagradost/PinoyHDXyzProvider.kt | 237 ----------
.../com/lagradost/PinoyHDXyzProviderPlugin.kt | 14 -
PinoyMovies/build.gradle.kts | 23 -
PinoyMovies/src/main/AndroidManifest.xml | 2 -
.../com/lagradost/PinoyMoviePediaProvider.kt | 238 ----------
.../PinoyMoviePediaProviderPlugin.kt | 16 -
.../com/lagradost/PinoyMoviesEsProvider.kt | 251 -----------
.../kotlin/com/lagradost/VstreamhubHelper.kt | 58 ---
.../main/kotlin/com/lagradost/XStreamCdn.kt | 68 ---
RebahinProvider/build.gradle.kts | 28 --
RebahinProvider/src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/RebahinProvider.kt | 324 --------------
.../com/lagradost/RebahinProviderPlugin.kt | 14 -
SflixProvider/build.gradle.kts | 1 +
SoaptwoDayProvider/build.gradle.kts | 1 +
SuperStream/build.gradle.kts | 1 +
TenshiProvider/build.gradle.kts | 1 +
TheFlixToProvider/build.gradle.kts | 1 +
TocanimeProvider/build.gradle.kts | 26 --
TocanimeProvider/src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/TocanimeProvider.kt | 178 --------
.../com/lagradost/TocanimeProviderPlugin.kt | 14 -
TrailersTwoProvider/build.gradle.kts | 1 +
UakinoProvider/build.gradle.kts | 26 --
UakinoProvider/src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/UakinoProvider.kt | 181 --------
.../com/lagradost/UakinoProviderPlugin.kt | 14 -
VMoveeProvider/build.gradle.kts | 1 +
VfFilmProvider/build.gradle.kts | 24 --
VfFilmProvider/src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/VfFilmProvider.kt | 122 ------
.../com/lagradost/VfFilmProviderPlugin.kt | 14 -
VfSerieProvider/build.gradle.kts | 23 -
VfSerieProvider/src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/VfSerieProvider.kt | 179 --------
.../com/lagradost/VfSerieProviderPlugin.kt | 14 -
VidSrcProvider/build.gradle.kts | 1 +
VidstreamBundle/build.gradle.kts | 1 +
WatchCartoonOnlineProvider/build.gradle.kts | 1 +
WcofunProvider/build.gradle.kts | 1 +
XcineProvider/build.gradle.kts | 27 --
XcineProvider/src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/XcineProvider.kt | 256 -----------
.../com/lagradost/XcineProviderPlugin.kt | 14 -
YomoviesProvider/build.gradle.kts | 25 --
YomoviesProvider/src/main/AndroidManifest.xml | 2 -
.../kotlin/com/lagradost/YomoviesProvider.kt | 161 -------
.../com/lagradost/YomoviesProviderPlugin.kt | 14 -
146 files changed, 31 insertions(+), 7636 deletions(-)
delete mode 100644 AnimeIndoProvider/build.gradle.kts
delete mode 100644 AnimeIndoProvider/src/main/AndroidManifest.xml
delete mode 100644 AnimeIndoProvider/src/main/kotlin/com/lagradost/AnimeIndoProvider.kt
delete mode 100644 AnimeIndoProvider/src/main/kotlin/com/lagradost/AnimeIndoProviderPlugin.kt
delete mode 100644 AnimeSailProvider/build.gradle.kts
delete mode 100644 AnimeSailProvider/src/main/AndroidManifest.xml
delete mode 100644 AnimeSailProvider/src/main/kotlin/com/lagradost/AnimeSailProvider.kt
delete mode 100644 AnimeSailProvider/src/main/kotlin/com/lagradost/AnimeSailProviderPlugin.kt
delete mode 100644 DramaidProvider/build.gradle.kts
delete mode 100644 DramaidProvider/src/main/AndroidManifest.xml
delete mode 100644 DramaidProvider/src/main/kotlin/com/lagradost/DramaidProvider.kt
delete mode 100644 DramaidProvider/src/main/kotlin/com/lagradost/DramaidProviderPlugin.kt
delete mode 100644 DubokuProvider/build.gradle.kts
delete mode 100644 DubokuProvider/src/main/AndroidManifest.xml
delete mode 100644 DubokuProvider/src/main/kotlin/com/lagradost/DubokuProvider.kt
delete mode 100644 DubokuProvider/src/main/kotlin/com/lagradost/DubokuProviderPlugin.kt
delete mode 100644 FrenchStreamProvider/build.gradle.kts
delete mode 100644 FrenchStreamProvider/src/main/AndroidManifest.xml
delete mode 100644 FrenchStreamProvider/src/main/kotlin/com/lagradost/FrenchStreamProvider.kt
delete mode 100644 FrenchStreamProvider/src/main/kotlin/com/lagradost/FrenchStreamProviderPlugin.kt
delete mode 100644 GomunimeProvider/build.gradle.kts
delete mode 100644 GomunimeProvider/src/main/AndroidManifest.xml
delete mode 100644 GomunimeProvider/src/main/kotlin/com/lagradost/GomunimeProvider.kt
delete mode 100644 GomunimeProvider/src/main/kotlin/com/lagradost/GomunimeProviderPlugin.kt
delete mode 100644 HDMovie5/build.gradle.kts
delete mode 100644 HDMovie5/src/main/AndroidManifest.xml
delete mode 100644 HDMovie5/src/main/kotlin/com/lagradost/HDMovie5.kt
delete mode 100644 HDMovie5/src/main/kotlin/com/lagradost/HDMovie5Plugin.kt
delete mode 100644 HDrezkaProvider/build.gradle.kts
delete mode 100644 HDrezkaProvider/src/main/AndroidManifest.xml
delete mode 100644 HDrezkaProvider/src/main/kotlin/com/lagradost/HDrezkaProvider.kt
delete mode 100644 HDrezkaProvider/src/main/kotlin/com/lagradost/HDrezkaProviderPlugin.kt
delete mode 100644 IdlixProvider/build.gradle.kts
delete mode 100644 IdlixProvider/src/main/AndroidManifest.xml
delete mode 100644 IdlixProvider/src/main/kotlin/com/lagradost/IdlixProvider.kt
delete mode 100644 IdlixProvider/src/main/kotlin/com/lagradost/IdlixProviderPlugin.kt
delete mode 100644 KuramanimeProvider/build.gradle.kts
delete mode 100644 KuramanimeProvider/src/main/AndroidManifest.xml
delete mode 100644 KuramanimeProvider/src/main/kotlin/com/lagradost/KuramanimeProvider.kt
delete mode 100644 KuramanimeProvider/src/main/kotlin/com/lagradost/KuramanimeProviderPlugin.kt
delete mode 100644 KuronimeProvider/build.gradle.kts
delete mode 100644 KuronimeProvider/src/main/AndroidManifest.xml
delete mode 100644 KuronimeProvider/src/main/kotlin/com/lagradost/KuronimeProvider.kt
delete mode 100644 KuronimeProvider/src/main/kotlin/com/lagradost/KuronimeProviderPlugin.kt
delete mode 100644 LayarKacaProvider/build.gradle.kts
delete mode 100644 LayarKacaProvider/src/main/AndroidManifest.xml
delete mode 100644 LayarKacaProvider/src/main/kotlin/com/lagradost/LayarKacaProvider.kt
delete mode 100644 LayarKacaProvider/src/main/kotlin/com/lagradost/LayarKacaProviderPlugin.kt
delete mode 100644 MultiplexProvider/build.gradle.kts
delete mode 100644 MultiplexProvider/src/main/AndroidManifest.xml
delete mode 100644 MultiplexProvider/src/main/kotlin/com/lagradost/MultiplexProvider.kt
delete mode 100644 MultiplexProvider/src/main/kotlin/com/lagradost/MultiplexProviderPlugin.kt
delete mode 100644 NeonimeProvider/build.gradle.kts
delete mode 100644 NeonimeProvider/src/main/AndroidManifest.xml
delete mode 100644 NeonimeProvider/src/main/kotlin/com/lagradost/NeonimeProvider.kt
delete mode 100644 NeonimeProvider/src/main/kotlin/com/lagradost/NeonimeProviderPlugin.kt
delete mode 100644 NontonAnimeIDProvider/build.gradle.kts
delete mode 100644 NontonAnimeIDProvider/src/main/AndroidManifest.xml
delete mode 100644 NontonAnimeIDProvider/src/main/kotlin/com/lagradost/NontonAnimeIDProvider.kt
delete mode 100644 NontonAnimeIDProvider/src/main/kotlin/com/lagradost/NontonAnimeIDProviderPlugin.kt
delete mode 100644 OploverzProvider/build.gradle.kts
delete mode 100644 OploverzProvider/src/main/AndroidManifest.xml
delete mode 100644 OploverzProvider/src/main/kotlin/com/lagradost/OploverzProvider.kt
delete mode 100644 OploverzProvider/src/main/kotlin/com/lagradost/OploverzProviderPlugin.kt
delete mode 100644 OtakudesuProvider/build.gradle.kts
delete mode 100644 OtakudesuProvider/src/main/AndroidManifest.xml
delete mode 100644 OtakudesuProvider/src/main/kotlin/com/lagradost/OtakudesuProvider.kt
delete mode 100644 OtakudesuProvider/src/main/kotlin/com/lagradost/OtakudesuProviderPlugin.kt
delete mode 100644 PelisflixProvider/build.gradle.kts
delete mode 100644 PelisflixProvider/src/main/AndroidManifest.xml
delete mode 100644 PelisflixProvider/src/main/kotlin/com/lagradost/PelisflixProvider.kt
delete mode 100644 PelisflixProvider/src/main/kotlin/com/lagradost/PelisflixProviderPlugin.kt
delete mode 100644 PhimmoichillProvider/build.gradle.kts
delete mode 100644 PhimmoichillProvider/src/main/AndroidManifest.xml
delete mode 100644 PhimmoichillProvider/src/main/kotlin/com/lagradost/PhimmoichillProvider.kt
delete mode 100644 PhimmoichillProvider/src/main/kotlin/com/lagradost/PhimmoichillProviderPlugin.kt
delete mode 100644 PinoyHDXyzProvider/build.gradle.kts
delete mode 100644 PinoyHDXyzProvider/src/main/AndroidManifest.xml
delete mode 100644 PinoyHDXyzProvider/src/main/kotlin/com/lagradost/PinoyHDXyzProvider.kt
delete mode 100644 PinoyHDXyzProvider/src/main/kotlin/com/lagradost/PinoyHDXyzProviderPlugin.kt
delete mode 100644 PinoyMovies/build.gradle.kts
delete mode 100644 PinoyMovies/src/main/AndroidManifest.xml
delete mode 100644 PinoyMovies/src/main/kotlin/com/lagradost/PinoyMoviePediaProvider.kt
delete mode 100644 PinoyMovies/src/main/kotlin/com/lagradost/PinoyMoviePediaProviderPlugin.kt
delete mode 100644 PinoyMovies/src/main/kotlin/com/lagradost/PinoyMoviesEsProvider.kt
delete mode 100644 PinoyMovies/src/main/kotlin/com/lagradost/VstreamhubHelper.kt
delete mode 100644 PinoyMovies/src/main/kotlin/com/lagradost/XStreamCdn.kt
delete mode 100644 RebahinProvider/build.gradle.kts
delete mode 100644 RebahinProvider/src/main/AndroidManifest.xml
delete mode 100644 RebahinProvider/src/main/kotlin/com/lagradost/RebahinProvider.kt
delete mode 100644 RebahinProvider/src/main/kotlin/com/lagradost/RebahinProviderPlugin.kt
delete mode 100644 TocanimeProvider/build.gradle.kts
delete mode 100644 TocanimeProvider/src/main/AndroidManifest.xml
delete mode 100644 TocanimeProvider/src/main/kotlin/com/lagradost/TocanimeProvider.kt
delete mode 100644 TocanimeProvider/src/main/kotlin/com/lagradost/TocanimeProviderPlugin.kt
delete mode 100644 UakinoProvider/build.gradle.kts
delete mode 100644 UakinoProvider/src/main/AndroidManifest.xml
delete mode 100644 UakinoProvider/src/main/kotlin/com/lagradost/UakinoProvider.kt
delete mode 100644 UakinoProvider/src/main/kotlin/com/lagradost/UakinoProviderPlugin.kt
delete mode 100644 VfFilmProvider/build.gradle.kts
delete mode 100644 VfFilmProvider/src/main/AndroidManifest.xml
delete mode 100644 VfFilmProvider/src/main/kotlin/com/lagradost/VfFilmProvider.kt
delete mode 100644 VfFilmProvider/src/main/kotlin/com/lagradost/VfFilmProviderPlugin.kt
delete mode 100644 VfSerieProvider/build.gradle.kts
delete mode 100644 VfSerieProvider/src/main/AndroidManifest.xml
delete mode 100644 VfSerieProvider/src/main/kotlin/com/lagradost/VfSerieProvider.kt
delete mode 100644 VfSerieProvider/src/main/kotlin/com/lagradost/VfSerieProviderPlugin.kt
delete mode 100644 XcineProvider/build.gradle.kts
delete mode 100644 XcineProvider/src/main/AndroidManifest.xml
delete mode 100644 XcineProvider/src/main/kotlin/com/lagradost/XcineProvider.kt
delete mode 100644 XcineProvider/src/main/kotlin/com/lagradost/XcineProviderPlugin.kt
delete mode 100644 YomoviesProvider/build.gradle.kts
delete mode 100644 YomoviesProvider/src/main/AndroidManifest.xml
delete mode 100644 YomoviesProvider/src/main/kotlin/com/lagradost/YomoviesProvider.kt
delete mode 100644 YomoviesProvider/src/main/kotlin/com/lagradost/YomoviesProviderPlugin.kt
diff --git a/AllAnimeProvider/build.gradle.kts b/AllAnimeProvider/build.gradle.kts
index 7bb2284..019a4dc 100644
--- a/AllAnimeProvider/build.gradle.kts
+++ b/AllAnimeProvider/build.gradle.kts
@@ -3,6 +3,7 @@ version = 1
cloudstream {
+ language = "en"
// All of these properties are optional, you can safely remove them
// description = "Lorem Ipsum"
diff --git a/AllMoviesForYouProvider/build.gradle.kts b/AllMoviesForYouProvider/build.gradle.kts
index 6de4950..c8f0301 100644
--- a/AllMoviesForYouProvider/build.gradle.kts
+++ b/AllMoviesForYouProvider/build.gradle.kts
@@ -3,6 +3,7 @@ version = 1
cloudstream {
+ language = "en"
// All of these properties are optional, you can safely remove them
// description = "Lorem Ipsum"
diff --git a/AniflixProvider/build.gradle.kts b/AniflixProvider/build.gradle.kts
index dcf2ba3..d67f873 100644
--- a/AniflixProvider/build.gradle.kts
+++ b/AniflixProvider/build.gradle.kts
@@ -3,6 +3,7 @@ version = 1
cloudstream {
+ language = "en"
// All of these properties are optional, you can safely remove them
// description = "Lorem Ipsum"
diff --git a/AnimeFlickProvider/build.gradle.kts b/AnimeFlickProvider/build.gradle.kts
index 25b3e27..e2ed228 100644
--- a/AnimeFlickProvider/build.gradle.kts
+++ b/AnimeFlickProvider/build.gradle.kts
@@ -3,6 +3,7 @@ version = 1
cloudstream {
+ language = "en"
// All of these properties are optional, you can safely remove them
// description = "Lorem Ipsum"
diff --git a/AnimeIndoProvider/build.gradle.kts b/AnimeIndoProvider/build.gradle.kts
deleted file mode 100644
index 5caab06..0000000
--- a/AnimeIndoProvider/build.gradle.kts
+++ /dev/null
@@ -1,26 +0,0 @@
-// use an integer for version numbers
-version = 1
-
-
-cloudstream {
- // All of these properties are optional, you can safely remove them
-
- // description = "Lorem Ipsum"
- // authors = listOf("Cloudburst")
-
- /**
- * Status int as the following:
- * 0: Down
- * 1: Ok
- * 2: Slow
- * 3: Beta only
- * */
- status = 1 // will be 3 if unspecified
- tvTypes = listOf(
- "AnimeMovie",
- "OVA",
- "Anime",
- )
-
- iconUrl = "https://www.google.com/s2/favicons?domain=animeindo.sbs&sz=24"
-}
\ No newline at end of file
diff --git a/AnimeIndoProvider/src/main/AndroidManifest.xml b/AnimeIndoProvider/src/main/AndroidManifest.xml
deleted file mode 100644
index 29aec9d..0000000
--- a/AnimeIndoProvider/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/AnimeIndoProvider/src/main/kotlin/com/lagradost/AnimeIndoProvider.kt b/AnimeIndoProvider/src/main/kotlin/com/lagradost/AnimeIndoProvider.kt
deleted file mode 100644
index fb132b7..0000000
--- a/AnimeIndoProvider/src/main/kotlin/com/lagradost/AnimeIndoProvider.kt
+++ /dev/null
@@ -1,192 +0,0 @@
-package com.lagradost
-
-import com.lagradost.cloudstream3.*
-import com.lagradost.cloudstream3.APIHolder.getCaptchaToken
-import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer
-import com.lagradost.cloudstream3.utils.ExtractorLink
-import com.lagradost.cloudstream3.utils.loadExtractor
-import com.lagradost.nicehttp.NiceResponse
-import org.jsoup.Jsoup
-import org.jsoup.nodes.Element
-
-class AnimeIndoProvider : MainAPI() {
- override var mainUrl = "https://animeindo.sbs"
- override var name = "AnimeIndo"
- override val hasMainPage = true
- override var lang = "id"
- override val hasDownloadSupport = true
-
- override val supportedTypes = setOf(
- TvType.Anime,
- TvType.AnimeMovie,
- TvType.OVA
- )
-
- companion object {
- fun getType(t: String): TvType {
- return if (t.contains("OVA") || t.contains("Special")) TvType.OVA
- else if (t.contains("Movie")) TvType.AnimeMovie
- else TvType.Anime
- }
-
- fun getStatus(t: String): ShowStatus {
- return when (t) {
- "Finished Airing" -> ShowStatus.Completed
- "Currently Airing" -> ShowStatus.Ongoing
- else -> ShowStatus.Completed
- }
- }
-
- private suspend fun request(url: String): NiceResponse {
- val req = app.get(
- url,
- cookies = mapOf("recaptcha_cookie" to "#Asia/Jakarta#-420#win32#Windows#0,false,false#Google Inc. (Intel)~ANGLE (Intel, Intel(R) HD Graphics 400 Direct3D11 vs_5_0 ps_5_0)")
- )
- if (req.isSuccessful) {
- return req
- } else {
- val document = app.get(url).document
- val captchaKey =
- document.select("script[src*=https://www.google.com/recaptcha/api.js?render=]")
- .attr("src").substringAfter("render=").substringBefore("&")
- val token = getCaptchaToken(url, captchaKey)
- return app.post(
- url,
- data = mapOf(
- "action" to "recaptcha_for_all",
- "token" to "$token",
- "sitekey" to captchaKey
- )
- )
- }
- }
- }
-
- override val mainPage = mainPageOf(
- "$mainUrl/anime-terbaru/page/" to "Anime Terbaru",
- "$mainUrl/donghua-terbaru/page/" to "Donghua Terbaru"
- )
-
- override suspend fun getMainPage(
- page: Int,
- request: MainPageRequest
- ): HomePageResponse {
- val document = request(request.data + page).document
- val home = document.select("div.post-show > article").mapNotNull {
- it.toSearchResult()
- }
- return newHomePageResponse(request.name, home)
- }
-
- private fun getProperAnimeLink(uri: String): String {
- return if (uri.contains("/anime/")) {
- uri
- } else {
- var title = uri.substringAfter("$mainUrl/")
- title = when {
- (title.contains("-episode")) && !(title.contains("-movie")) -> Regex("(.+)-episode").find(
- title
- )?.groupValues?.get(1).toString()
- (title.contains("-movie")) -> Regex("(.+)-movie").find(title)?.groupValues?.get(
- 1
- ).toString()
- else -> title
- }
- "$mainUrl/anime/$title"
- }
- }
-
- private fun Element.toSearchResult(): AnimeSearchResponse? {
- val title = this.selectFirst("div.title")?.text()?.trim() ?: return null
- val href = getProperAnimeLink(this.selectFirst("a")!!.attr("href"))
- val posterUrl = this.select("img[itemprop=image]").attr("src").toString()
- val type = getType(this.select("div.type").text().trim())
- val epNum =
- this.selectFirst("span.episode")?.ownText()?.replace(Regex("[^0-9]"), "")?.trim()
- ?.toIntOrNull()
- return newAnimeSearchResponse(title, href, type) {
- this.posterUrl = posterUrl
- addSub(epNum)
- }
-
- }
-
- override suspend fun search(query: String): List {
- val link = "$mainUrl/?s=$query"
- val document = request(link).document
-
- return document.select(".site-main.relat > article").map {
- val title = it.selectFirst("div.title > h2")!!.ownText().trim()
- val href = it.selectFirst("a")!!.attr("href")
- val posterUrl = it.selectFirst("img")!!.attr("src").toString()
- val type = getType(it.select("div.type").text().trim())
- newAnimeSearchResponse(title, href, type) {
- this.posterUrl = posterUrl
- }
- }
- }
-
- override suspend fun load(url: String): LoadResponse {
- val document = request(url).document
-
- val title = document.selectFirst("h1.entry-title")?.text().toString().trim()
- val poster = document.selectFirst("div.thumb > img[itemprop=image]")?.attr("src")
- val tags = document.select("div.genxed > a").map { it.text() }
- val type = getType(
- document.selectFirst("div.info-content > div.spe > span:nth-child(6)")?.ownText()
- .toString()
- )
- val year = Regex("\\d, ([0-9]*)").find(
- document.select("div.info-content > div.spe > span:nth-child(9) > time").text()
- )?.groupValues?.get(1)?.toIntOrNull()
- val status = getStatus(
- document.selectFirst("div.info-content > div.spe > span:nth-child(1)")!!.ownText()
- .trim()
- )
- val description = document.select("div[itemprop=description] > p").text()
- val trailer = document.selectFirst("div.player-embed iframe")?.attr("src")
- val episodes = document.select("div.lstepsiode.listeps ul li").mapNotNull {
- val header = it.selectFirst("span.lchx > a") ?: return@mapNotNull null
- val name = header.text().trim()
- val episode = header.text().trim().replace("Episode", "").trim().toIntOrNull()
- val link = fixUrl(header.attr("href"))
- Episode(link, name = name, episode = episode)
- }.reversed()
-
- return newAnimeLoadResponse(title, url, type) {
- engName = title
- posterUrl = poster
- this.year = year
- addEpisodes(DubStatus.Subbed, episodes)
- showStatus = status
- plot = description
- this.tags = tags
- addTrailer(trailer)
- }
- }
-
- override suspend fun loadLinks(
- data: String,
- isCasting: Boolean,
- subtitleCallback: (SubtitleFile) -> Unit,
- callback: (ExtractorLink) -> Unit
- ): Boolean {
-
- val document = request(data).document
- document.select("div.itemleft > .mirror > option").mapNotNull {
- fixUrl(Jsoup.parse(base64Decode(it.attr("value"))).select("iframe").attr("src"))
- }.apmap {
- if (it.startsWith("https://uservideo.xyz")) {
- app.get(it, referer = "$mainUrl/").document.select("iframe").attr("src")
- } else {
- it
- }
- }.apmap {
- loadExtractor(it, data, subtitleCallback, callback)
- }
-
- return true
- }
-
-
-}
\ No newline at end of file
diff --git a/AnimeIndoProvider/src/main/kotlin/com/lagradost/AnimeIndoProviderPlugin.kt b/AnimeIndoProvider/src/main/kotlin/com/lagradost/AnimeIndoProviderPlugin.kt
deleted file mode 100644
index d1dab81..0000000
--- a/AnimeIndoProvider/src/main/kotlin/com/lagradost/AnimeIndoProviderPlugin.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-
-package com.lagradost
-
-import com.lagradost.cloudstream3.plugins.CloudstreamPlugin
-import com.lagradost.cloudstream3.plugins.Plugin
-import android.content.Context
-
-@CloudstreamPlugin
-class AnimeIndoProviderPlugin: Plugin() {
- override fun load(context: Context) {
- // All providers should be added in this manner. Please don't edit the providers list directly.
- registerMainAPI(AnimeIndoProvider())
- }
-}
\ No newline at end of file
diff --git a/AnimePaheProvider/build.gradle.kts b/AnimePaheProvider/build.gradle.kts
index c6905e5..c74b698 100644
--- a/AnimePaheProvider/build.gradle.kts
+++ b/AnimePaheProvider/build.gradle.kts
@@ -3,6 +3,7 @@ version = 1
cloudstream {
+ language = "en"
// All of these properties are optional, you can safely remove them
// description = "Lorem Ipsum"
diff --git a/AnimeSailProvider/build.gradle.kts b/AnimeSailProvider/build.gradle.kts
deleted file mode 100644
index 619cf24..0000000
--- a/AnimeSailProvider/build.gradle.kts
+++ /dev/null
@@ -1,26 +0,0 @@
-// use an integer for version numbers
-version = 1
-
-
-cloudstream {
- // All of these properties are optional, you can safely remove them
-
- // description = "Lorem Ipsum"
- // authors = listOf("Cloudburst")
-
- /**
- * Status int as the following:
- * 0: Down
- * 1: Ok
- * 2: Slow
- * 3: Beta only
- * */
- status = 1 // will be 3 if unspecified
- tvTypes = listOf(
- "AnimeMovie",
- "Anime",
- "OVA",
- )
-
- iconUrl = "https://www.google.com/s2/favicons?domain=111.90.143.42&sz=24"
-}
\ No newline at end of file
diff --git a/AnimeSailProvider/src/main/AndroidManifest.xml b/AnimeSailProvider/src/main/AndroidManifest.xml
deleted file mode 100644
index 29aec9d..0000000
--- a/AnimeSailProvider/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/AnimeSailProvider/src/main/kotlin/com/lagradost/AnimeSailProvider.kt b/AnimeSailProvider/src/main/kotlin/com/lagradost/AnimeSailProvider.kt
deleted file mode 100644
index b190fd8..0000000
--- a/AnimeSailProvider/src/main/kotlin/com/lagradost/AnimeSailProvider.kt
+++ /dev/null
@@ -1,191 +0,0 @@
-package com.lagradost
-
-import com.lagradost.cloudstream3.*
-import com.lagradost.cloudstream3.mvvm.safeApiCall
-import com.lagradost.cloudstream3.utils.ExtractorLink
-import com.lagradost.cloudstream3.utils.Qualities
-import com.lagradost.cloudstream3.utils.loadExtractor
-import com.lagradost.nicehttp.NiceResponse
-import org.jsoup.Jsoup
-import org.jsoup.nodes.Element
-
-class AnimeSailProvider : MainAPI() {
- override var mainUrl = "https://111.90.143.42"
- override var name = "AnimeSail"
- override val hasMainPage = true
- override var lang = "id"
- override val hasDownloadSupport = true
-
- override val supportedTypes = setOf(
- TvType.Anime,
- TvType.AnimeMovie,
- TvType.OVA
- )
-
- companion object {
- fun getType(t: String): TvType {
- return if (t.contains("OVA") || t.contains("Special")) TvType.OVA
- else if (t.contains("Movie")) TvType.AnimeMovie
- else TvType.Anime
- }
-
- fun getStatus(t: String): ShowStatus {
- return when (t) {
- "Completed" -> ShowStatus.Completed
- "Ongoing" -> ShowStatus.Ongoing
- else -> ShowStatus.Completed
- }
- }
- }
-
- private suspend fun request(url: String, ref: String? = null): NiceResponse {
- return app.get(
- url,
- headers = mapOf("Accept" to "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"),
- cookies = mapOf("_as_ipin_ct" to "ID"),
- referer = ref
- )
- }
-
- override val mainPage = mainPageOf(
- "$mainUrl/page/" to "Episode Terbaru",
- "$mainUrl/movie-terbaru/page/" to "Movie Terbaru",
- "$mainUrl/genres/donghua/page/" to "Donghua"
- )
-
- override suspend fun getMainPage(page: Int, request: MainPageRequest): HomePageResponse {
- val document = request(request.data + page).document
- val home = document.select("article").map {
- it.toSearchResult()
- }
- return newHomePageResponse(request.name, home)
- }
-
- private fun getProperAnimeLink(uri: String): String {
- return if (uri.contains("/anime/")) {
- uri
- } else {
- var title = uri.substringAfter("$mainUrl/")
- title = when {
- (title.contains("-episode")) && !(title.contains("-movie")) -> title.substringBefore(
- "-episode"
- )
- (title.contains("-movie")) -> title.substringBefore("-movie")
- else -> title
- }
-
- "$mainUrl/anime/$title"
- }
- }
-
- private fun Element.toSearchResult(): AnimeSearchResponse {
- val href = getProperAnimeLink(fixUrlNull(this.selectFirst("a")?.attr("href")).toString())
- val title = this.select(".tt > h2").text().trim()
- val posterUrl = fixUrlNull(this.selectFirst("div.limit img")?.attr("src"))
- val epNum = this.selectFirst(".tt > h2")?.text()?.let {
- Regex("Episode\\s?([0-9]+)").find(it)?.groupValues?.getOrNull(1)?.toIntOrNull()
- }
- return newAnimeSearchResponse(title, href, TvType.Anime) {
- this.posterUrl = posterUrl
- addSub(epNum)
- }
-
- }
-
- override suspend fun search(query: String): List {
- val link = "$mainUrl/?s=$query"
- val document = request(link).document
-
- return document.select("div.listupd article").map {
- it.toSearchResult()
- }
- }
-
- override suspend fun load(url: String): LoadResponse {
- val document = request(url).document
-
- val title = document.selectFirst("h1.entry-title")?.text().toString().trim()
- val type = getType(
- document.select("tbody th:contains(Tipe)").next().text()
- )
- val episodes = document.select("ul.daftar > li").map {
- val header = it.select("a").text().trim()
- val name =
- Regex("(Episode\\s?[0-9]+)").find(header)?.groupValues?.getOrNull(0) ?: header
- val link = fixUrl(it.select("a").attr("href"))
- Episode(link, name = name)
- }.reversed()
-
- return newAnimeLoadResponse(title, url, type) {
- posterUrl = document.selectFirst("div.entry-content > img")?.attr("src")
- this.year =
- document.select("tbody th:contains(Dirilis)").next().text().trim().toIntOrNull()
- addEpisodes(DubStatus.Subbed, episodes)
- showStatus =
- getStatus(document.select("tbody th:contains(Status)").next().text().trim())
- plot = document.selectFirst("div.entry-content > p")?.text()
- this.tags =
- document.select("tbody th:contains(Genre)").next().select("a").map { it.text() }
- }
- }
-
- override suspend fun loadLinks(
- data: String,
- isCasting: Boolean,
- subtitleCallback: (SubtitleFile) -> Unit,
- callback: (ExtractorLink) -> Unit
- ): Boolean {
-
- val document = request(data).document
-
- document.select(".mobius > .mirror > option").apmap {
- safeApiCall {
- val iframe = fixUrl(
- Jsoup.parse(base64Decode(it.attr("data-em"))).select("iframe").attr("src")
- ?: throw ErrorLoadingException("No iframe found")
- )
-
- when {
- iframe.startsWith("$mainUrl/utils/player/arch/") || iframe.startsWith(
- "$mainUrl/utils/player/race/"
- ) -> request(iframe, ref = data).document.select("source").attr("src")
- .let { link ->
- val source =
- when {
- iframe.contains("/arch/") -> "Arch"
- iframe.contains("/race/") -> "Race"
- else -> this.name
- }
- val quality =
- Regex("\\.([0-9]{3,4})\\.").find(link)?.groupValues?.get(1)
- callback.invoke(
- ExtractorLink(
- source = source,
- name = source,
- url = link,
- referer = mainUrl,
- quality = quality?.toIntOrNull() ?: Qualities.Unknown.value
- )
- )
- }
-// skip for now
-// iframe.startsWith("$mainUrl/utils/player/fichan/") -> ""
-// iframe.startsWith("$mainUrl/utils/player/blogger/") -> ""
- iframe.startsWith("$mainUrl/utils/player/framezilla/") || iframe.startsWith("https://uservideo.xyz") -> {
- request(iframe, ref = data).document.select("iframe").attr("src")
- .let { link ->
- loadExtractor(fixUrl(link), mainUrl, subtitleCallback, callback)
- }
- }
- else -> {
- loadExtractor(iframe, mainUrl, subtitleCallback, callback)
- }
- }
- }
- }
-
- return true
- }
-
-
-}
\ No newline at end of file
diff --git a/AnimeSailProvider/src/main/kotlin/com/lagradost/AnimeSailProviderPlugin.kt b/AnimeSailProvider/src/main/kotlin/com/lagradost/AnimeSailProviderPlugin.kt
deleted file mode 100644
index 6b2b8a9..0000000
--- a/AnimeSailProvider/src/main/kotlin/com/lagradost/AnimeSailProviderPlugin.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-
-package com.lagradost
-
-import com.lagradost.cloudstream3.plugins.CloudstreamPlugin
-import com.lagradost.cloudstream3.plugins.Plugin
-import android.content.Context
-
-@CloudstreamPlugin
-class AnimeSailProviderPlugin: Plugin() {
- override fun load(context: Context) {
- // All providers should be added in this manner. Please don't edit the providers list directly.
- registerMainAPI(AnimeSailProvider())
- }
-}
\ No newline at end of file
diff --git a/AnimekisaProvider/build.gradle.kts b/AnimekisaProvider/build.gradle.kts
index 5d62c10..79a7e5c 100644
--- a/AnimekisaProvider/build.gradle.kts
+++ b/AnimekisaProvider/build.gradle.kts
@@ -3,6 +3,7 @@ version = 1
cloudstream {
+ language = "en"
// All of these properties are optional, you can safely remove them
// description = "Lorem Ipsum"
diff --git a/AsiaFlixProvider/build.gradle.kts b/AsiaFlixProvider/build.gradle.kts
index 0280ad9..b65b85c 100644
--- a/AsiaFlixProvider/build.gradle.kts
+++ b/AsiaFlixProvider/build.gradle.kts
@@ -3,6 +3,7 @@ version = 1
cloudstream {
+ language = "en"
// All of these properties are optional, you can safely remove them
// description = "Lorem Ipsum"
diff --git a/BflixProvider/build.gradle.kts b/BflixProvider/build.gradle.kts
index 69c717d..e12d533 100644
--- a/BflixProvider/build.gradle.kts
+++ b/BflixProvider/build.gradle.kts
@@ -3,6 +3,7 @@ version = 1
cloudstream {
+ language = "en"
// All of these properties are optional, you can safely remove them
// description = "Lorem Ipsum"
diff --git a/DramaidProvider/build.gradle.kts b/DramaidProvider/build.gradle.kts
deleted file mode 100644
index 14fe581..0000000
--- a/DramaidProvider/build.gradle.kts
+++ /dev/null
@@ -1,25 +0,0 @@
-// use an integer for version numbers
-version = 1
-
-
-cloudstream {
- // All of these properties are optional, you can safely remove them
-
- // description = "Lorem Ipsum"
- // authors = listOf("Cloudburst")
-
- /**
- * Status int as the following:
- * 0: Down
- * 1: Ok
- * 2: Slow
- * 3: Beta only
- * */
- status = 1 // will be 3 if unspecified
- tvTypes = listOf(
- "AsianDrama",
- "Movie",
- )
-
- iconUrl = "https://www.google.com/s2/favicons?domain=185.224.83.103&sz=24"
-}
\ No newline at end of file
diff --git a/DramaidProvider/src/main/AndroidManifest.xml b/DramaidProvider/src/main/AndroidManifest.xml
deleted file mode 100644
index 29aec9d..0000000
--- a/DramaidProvider/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/DramaidProvider/src/main/kotlin/com/lagradost/DramaidProvider.kt b/DramaidProvider/src/main/kotlin/com/lagradost/DramaidProvider.kt
deleted file mode 100644
index 318a5ca..0000000
--- a/DramaidProvider/src/main/kotlin/com/lagradost/DramaidProvider.kt
+++ /dev/null
@@ -1,213 +0,0 @@
-package com.lagradost
-
-import com.fasterxml.jackson.annotation.JsonProperty
-import com.lagradost.cloudstream3.*
-import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson
-import com.lagradost.cloudstream3.utils.ExtractorLink
-import com.lagradost.cloudstream3.utils.getQualityFromName
-import com.lagradost.cloudstream3.utils.loadExtractor
-import org.jsoup.Jsoup
-import org.jsoup.nodes.Element
-
-class DramaidProvider : MainAPI() {
- override var mainUrl = "https://185.224.83.103"
- override var name = "DramaId"
- override val hasQuickSearch = false
- override val hasMainPage = true
- override var lang = "id"
- override val hasDownloadSupport = true
- override val hasChromecastSupport = false
- override val supportedTypes = setOf(TvType.AsianDrama)
-
- companion object {
- fun getStatus(t: String): ShowStatus {
- return when (t) {
- "Completed" -> ShowStatus.Completed
- "Ongoing" -> ShowStatus.Ongoing
- else -> ShowStatus.Completed
- }
- }
- }
-
- override val mainPage = mainPageOf(
- "&status=&type=&order=update" to "Drama Terbaru",
- "&order=latest" to "Baru Ditambahkan",
- "&status=&type=&order=popular" to "Drama Popular",
- )
-
- override suspend fun getMainPage(page: Int, request: MainPageRequest): HomePageResponse {
- val document = app.get("$mainUrl/series/?page=$page${request.data}").document
- val home = document.select("article[itemscope=itemscope]").mapNotNull {
- it.toSearchResult()
- }
- return newHomePageResponse(request.name, home)
- }
-
- private fun getProperDramaLink(uri: String): String {
- return if (uri.contains("/series/")) {
- uri
- } else {
- "$mainUrl/series/" + Regex("$mainUrl/(.+)-ep.+").find(uri)?.groupValues?.get(1)
- .toString()
- }
- }
-
- private fun Element.toSearchResult(): SearchResponse? {
- val href = getProperDramaLink(this.selectFirst("a.tip")!!.attr("href"))
- val title = this.selectFirst("h2[itemprop=headline]")?.text()?.trim() ?: return null
- val posterUrl = fixUrlNull(this.selectFirst(".limit > noscript > img")?.attr("src"))
-
- return newTvSeriesSearchResponse(title, href, TvType.AsianDrama) {
- this.posterUrl = posterUrl
- }
- }
-
- override suspend fun search(query: String): List {
- val link = "$mainUrl/?s=$query"
- val document = app.get(link).document
-
- return document.select("article[itemscope=itemscope]").map {
- val title = it.selectFirst("h2[itemprop=headline]")!!.text().trim()
- val poster = it.selectFirst(".limit > noscript > img")!!.attr("src")
- val href = it.selectFirst("a.tip")!!.attr("href")
-
- newTvSeriesSearchResponse(title, href, TvType.AsianDrama) {
- this.posterUrl = poster
- }
- }
- }
-
- override suspend fun load(url: String): LoadResponse {
- val document = app.get(url).document
-
- val title = document.selectFirst("h1.entry-title")!!.text().trim()
- val poster = document.select(".thumb > noscript > img").attr("src")
- val tags = document.select(".genxed > a").map { it.text() }
-
- val year = Regex("\\d, ([0-9]*)").find(
- document.selectFirst(".info-content > .spe > span > time")!!.text().trim()
- )?.groupValues?.get(1).toString().toIntOrNull()
- val status = getStatus(
- document.select(".info-content > .spe > span:nth-child(1)")
- .text().trim().replace("Status: ", "")
- )
- val description = document.select(".entry-content > p").text().trim()
-
- val episodes = document.select(".eplister > ul > li").map {
- val name = it.selectFirst("a > .epl-title")!!.text().trim()
- val link = it.select("a").attr("href")
- val epNum = it.selectFirst("a > .epl-num")!!.text().trim().toIntOrNull()
- newEpisode(link) {
- this.name = name
- this.episode = epNum
- }
- }.reversed()
-
- val recommendations =
- document.select(".listupd > article[itemscope=itemscope]").map { rec ->
- val epTitle = rec.selectFirst("h2[itemprop=headline]")!!.text().trim()
- val epPoster = rec.selectFirst(".limit > noscript > img")!!.attr("src")
- val epHref = fixUrl(rec.selectFirst("a.tip")!!.attr("href"))
-
- newTvSeriesSearchResponse(epTitle, epHref, TvType.AsianDrama) {
- this.posterUrl = epPoster
- }
- }
-
- if (episodes.size == 1) {
- return newMovieLoadResponse(title, url, TvType.Movie, episodes[0].data) {
- posterUrl = poster
- this.year = year
- plot = description
- this.tags = tags
- this.recommendations = recommendations
- }
- } else {
- return newTvSeriesLoadResponse(title, url, TvType.AsianDrama, episodes = episodes) {
- posterUrl = poster
- this.year = year
- showStatus = status
- plot = description
- this.tags = tags
- this.recommendations = recommendations
- }
- }
-
- }
-
- private data class Sources(
- @JsonProperty("file") val file: String,
- @JsonProperty("label") val label: String,
- @JsonProperty("type") val type: String,
- @JsonProperty("default") val default: Boolean?
- )
-
- private data class Tracks(
- @JsonProperty("file") val file: String,
- @JsonProperty("label") val label: String,
- @JsonProperty("kind") val type: String,
- @JsonProperty("default") val default: Boolean?
- )
-
- private suspend fun invokeDriveSource(
- url: String,
- name: String,
- subCallback: (SubtitleFile) -> Unit,
- sourceCallback: (ExtractorLink) -> Unit
- ) {
- val server = app.get(url).document.selectFirst(".picasa")?.nextElementSibling()?.data()
-
- val source = "[${server!!.substringAfter("sources: [").substringBefore("],")}]".trimIndent()
- val trackers = server.substringAfter("tracks:[").substringBefore("],")
- .replace("//language", "")
- .replace("file", "\"file\"")
- .replace("label", "\"label\"")
- .replace("kind", "\"kind\"").trimIndent()
-
- tryParseJson>(source)?.map {
- sourceCallback(
- ExtractorLink(
- name,
- "Drive",
- fixUrl(it.file),
- referer = "https://motonews.club/",
- quality = getQualityFromName(it.label)
- )
- )
- }
-
- tryParseJson(trackers)?.let {
- subCallback.invoke(
- SubtitleFile(
- if (it.label.contains("Indonesia")) "${it.label}n" else it.label,
- it.file
- )
- )
- }
-
- }
-
- override suspend fun loadLinks(
- data: String,
- isCasting: Boolean,
- subtitleCallback: (SubtitleFile) -> Unit,
- callback: (ExtractorLink) -> Unit
- ): Boolean {
- val document = app.get(data).document
- val sources = document.select(".mobius > .mirror > option").mapNotNull {
- fixUrl(Jsoup.parse(base64Decode(it.attr("value"))).select("iframe").attr("src"))
- }
-
- sources.map {
- it.replace("https://ndrama.xyz", "https://www.fembed.com")
- }.apmap {
- when {
- it.contains("motonews.club") -> invokeDriveSource(it, this.name, subtitleCallback, callback)
- else -> loadExtractor(it, data, subtitleCallback, callback)
- }
- }
-
- return true
- }
-
-}
diff --git a/DramaidProvider/src/main/kotlin/com/lagradost/DramaidProviderPlugin.kt b/DramaidProvider/src/main/kotlin/com/lagradost/DramaidProviderPlugin.kt
deleted file mode 100644
index 4ee73cb..0000000
--- a/DramaidProvider/src/main/kotlin/com/lagradost/DramaidProviderPlugin.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-
-package com.lagradost
-
-import com.lagradost.cloudstream3.plugins.CloudstreamPlugin
-import com.lagradost.cloudstream3.plugins.Plugin
-import android.content.Context
-
-@CloudstreamPlugin
-class DramaidProviderPlugin: Plugin() {
- override fun load(context: Context) {
- // All providers should be added in this manner. Please don't edit the providers list directly.
- registerMainAPI(DramaidProvider())
- }
-}
\ No newline at end of file
diff --git a/DubbedAnimeProvider/build.gradle.kts b/DubbedAnimeProvider/build.gradle.kts
index 0644ac5..49602bc 100644
--- a/DubbedAnimeProvider/build.gradle.kts
+++ b/DubbedAnimeProvider/build.gradle.kts
@@ -3,6 +3,7 @@ version = 1
cloudstream {
+ language = "en"
// All of these properties are optional, you can safely remove them
// description = "Lorem Ipsum"
diff --git a/DubokuProvider/build.gradle.kts b/DubokuProvider/build.gradle.kts
deleted file mode 100644
index 02e1885..0000000
--- a/DubokuProvider/build.gradle.kts
+++ /dev/null
@@ -1,26 +0,0 @@
-// use an integer for version numbers
-version = 1
-
-
-cloudstream {
- // All of these properties are optional, you can safely remove them
-
- // description = "Lorem Ipsum"
- // authors = listOf("Cloudburst")
-
- /**
- * Status int as the following:
- * 0: Down
- * 1: Ok
- * 2: Slow
- * 3: Beta only
- * */
- status = 1 // will be 3 if unspecified
- tvTypes = listOf(
- "AsianDrama",
- "TvSeries",
- "Movie",
- )
-
- iconUrl = "https://www.google.com/s2/favicons?domain=www.duboku.tv&sz=24"
-}
\ No newline at end of file
diff --git a/DubokuProvider/src/main/AndroidManifest.xml b/DubokuProvider/src/main/AndroidManifest.xml
deleted file mode 100644
index 29aec9d..0000000
--- a/DubokuProvider/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/DubokuProvider/src/main/kotlin/com/lagradost/DubokuProvider.kt b/DubokuProvider/src/main/kotlin/com/lagradost/DubokuProvider.kt
deleted file mode 100644
index a71d781..0000000
--- a/DubokuProvider/src/main/kotlin/com/lagradost/DubokuProvider.kt
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.lagradost
-
-import com.fasterxml.jackson.annotation.JsonProperty
-import com.lagradost.cloudstream3.*
-import com.lagradost.cloudstream3.LoadResponse.Companion.addActors
-import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson
-import com.lagradost.cloudstream3.utils.ExtractorLink
-import com.lagradost.cloudstream3.utils.M3u8Helper
-import org.jsoup.nodes.Element
-
-class DubokuProvider : MainAPI() {
- override var mainUrl = "https://www.duboku.tv"
- override var name = "Duboku"
- override val hasMainPage = true
- override var lang = "zh"
- override val hasDownloadSupport = true
- override val supportedTypes = setOf(
- TvType.Movie,
- TvType.TvSeries,
- TvType.AsianDrama,
- )
-
- override val mainPage = mainPageOf(
- "$mainUrl/vodshow/2--time------" to "连续剧 时间",
- "$mainUrl/vodshow/2--hits------" to "连续剧 人气",
- "$mainUrl/vodshow/13--time------" to "陆剧 时间",
- "$mainUrl/vodshow/13--hits------" to "陆剧 人气",
- "$mainUrl/vodshow/15--time------" to "日韩剧 时间",
- "$mainUrl/vodshow/15--hits------" to "日韩剧 人气",
- "$mainUrl/vodshow/21--time------" to "短剧 时间",
- "$mainUrl/vodshow/21--hits------" to "短剧 人气",
- "$mainUrl/vodshow/16--time------" to "英美剧 时间",
- "$mainUrl/vodshow/16--hits------" to "英美剧 人气",
- "$mainUrl/vodshow/14--time------" to "台泰剧 时间",
- "$mainUrl/vodshow/14--hits------" to "台泰剧 人气",
- "$mainUrl/vodshow/20--time------" to "港剧 时间",
- "$mainUrl/vodshow/20--hits------" to "港剧 人气",
- )
-
- override suspend fun getMainPage(
- page: Int,
- request: MainPageRequest
- ): HomePageResponse {
- val document = app.get("${request.data}$page---.html").document
- val home = document.select("ul.myui-vodlist.clearfix li").mapNotNull {
- it.toSearchResult()
- }
- return newHomePageResponse(request.name, home)
- }
-
- private fun Element.toSearchResult(): SearchResponse? {
- val title = this.selectFirst("h4.title a")?.text()?.trim() ?: return null
- val href = fixUrl(this.selectFirst("a")?.attr("href").toString())
- val posterUrl = fixUrlNull(this.selectFirst("a")?.attr("data-original"))
- val episode = this.selectFirst("span.pic-text.text-right")?.text()?.filter { it.isDigit() }
- ?.toIntOrNull()
-
- return newAnimeSearchResponse(title, href, TvType.Movie) {
- this.posterUrl = posterUrl
- addSub(episode)
- }
- }
-
- override suspend fun search(query: String): List {
- val document = app.get("$mainUrl/vodsearch/-------------.html?wd=$query&submit=").document
-
- return document.select("ul#searchList li").mapNotNull {
- it.toSearchResult()
- }
- }
-
- override suspend fun load(url: String): LoadResponse? {
- val document = app.get(url).document
-
- val title = document.selectFirst("h1.title")?.text()?.trim() ?: return null
- val tvType = if (document.select("ul.myui-content__list li").size == 1
- ) TvType.Movie else TvType.TvSeries
- val actors = document.select("p.data")[2].select("a").map { it.text() }
-
- val episodes = document.select("ul.myui-content__list li").map {
- val href = fixUrl(it.select("a").attr("href"))
- val name = it.select("a").text().trim()
- Episode(
- data = href,
- name = name,
- )
- }
- return newTvSeriesLoadResponse(title, url, tvType, episodes) {
- this.posterUrl = fixUrlNull(
- document.selectFirst("a.myui-vodlist__thumb.picture img")?.attr("data-original")
- )
- this.year =
- document.select("p.data")[0].select("a").last()?.text()?.trim()?.toIntOrNull()
- this.plot = document.selectFirst("span.sketch.content")?.text()?.trim()
- this.tags = document.select("p.data")[0].select("a").map { it.text() }
- this.rating = document.select("div#rating span.branch").text().toRatingInt()
- addActors(actors)
- }
-
- }
-
- override suspend fun loadLinks(
- data: String,
- isCasting: Boolean,
- subtitleCallback: (SubtitleFile) -> Unit,
- callback: (ExtractorLink) -> Unit
- ): Boolean {
-
- app.get(data).document.select("script").map { script ->
- if (script.data().contains("var player_data={")) {
- val dataJson =
- script.data().substringAfter("var player_data={").substringBefore("}")
- tryParseJson("{$dataJson}")?.let { source ->
- M3u8Helper.generateM3u8(
- this.name,
- source.url ?: return@map,
- referer = "https://w.duboku.io/",
- headers = mapOf("Origin" to "https://w.duboku.io")
- ).forEach(callback)
- }
- }
- }
-
-
- return true
- }
-
- data class Sources(
- @JsonProperty("url") val url: String?,
- )
-
-
-}
\ No newline at end of file
diff --git a/DubokuProvider/src/main/kotlin/com/lagradost/DubokuProviderPlugin.kt b/DubokuProvider/src/main/kotlin/com/lagradost/DubokuProviderPlugin.kt
deleted file mode 100644
index 4c77005..0000000
--- a/DubokuProvider/src/main/kotlin/com/lagradost/DubokuProviderPlugin.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-
-package com.lagradost
-
-import com.lagradost.cloudstream3.plugins.CloudstreamPlugin
-import com.lagradost.cloudstream3.plugins.Plugin
-import android.content.Context
-
-@CloudstreamPlugin
-class DubokuProviderPlugin: Plugin() {
- override fun load(context: Context) {
- // All providers should be added in this manner. Please don't edit the providers list directly.
- registerMainAPI(DubokuProvider())
- }
-}
\ No newline at end of file
diff --git a/EjaTv/build.gradle.kts b/EjaTv/build.gradle.kts
index f5651cf..c663a09 100644
--- a/EjaTv/build.gradle.kts
+++ b/EjaTv/build.gradle.kts
@@ -3,6 +3,7 @@ version = 1
cloudstream {
+ language = "en"
// All of these properties are optional, you can safely remove them
// description = "Lorem Ipsum"
diff --git a/FrenchStreamProvider/build.gradle.kts b/FrenchStreamProvider/build.gradle.kts
deleted file mode 100644
index 207caf1..0000000
--- a/FrenchStreamProvider/build.gradle.kts
+++ /dev/null
@@ -1,26 +0,0 @@
-// use an integer for version numbers
-version = 1
-
-
-cloudstream {
- // All of these properties are optional, you can safely remove them
-
- // description = "Lorem Ipsum"
- // authors = listOf("Cloudburst")
-
- /**
- * Status int as the following:
- * 0: Down
- * 1: Ok
- * 2: Slow
- * 3: Beta only
- * */
- status = 1 // will be 3 if unspecified
- tvTypes = listOf(
- "AnimeMovie",
- "TvSeries",
- "Movie",
- )
-
- iconUrl = "https://www.google.com/s2/favicons?domain=french-stream.re&sz=24"
-}
\ No newline at end of file
diff --git a/FrenchStreamProvider/src/main/AndroidManifest.xml b/FrenchStreamProvider/src/main/AndroidManifest.xml
deleted file mode 100644
index 29aec9d..0000000
--- a/FrenchStreamProvider/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/FrenchStreamProvider/src/main/kotlin/com/lagradost/FrenchStreamProvider.kt b/FrenchStreamProvider/src/main/kotlin/com/lagradost/FrenchStreamProvider.kt
deleted file mode 100644
index 4d6720c..0000000
--- a/FrenchStreamProvider/src/main/kotlin/com/lagradost/FrenchStreamProvider.kt
+++ /dev/null
@@ -1,273 +0,0 @@
-package com.lagradost
-
-import com.lagradost.cloudstream3.*
-import com.lagradost.cloudstream3.LoadResponse.Companion.addRating
-import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer
-import com.lagradost.cloudstream3.utils.ExtractorLink
-import com.lagradost.cloudstream3.utils.extractorApis
-
-
-class FrenchStreamProvider : MainAPI() {
- override var mainUrl = "https://french-stream.re"
- override var name = "French Stream"
- override val hasQuickSearch = false
- override val hasMainPage = true
- override var lang = "fr"
- override val supportedTypes = setOf(TvType.AnimeMovie, TvType.TvSeries, TvType.Movie)
-
- override suspend fun search(query: String): List {
- val link = "$mainUrl/?do=search&subaction=search&story=$query"
- val soup = app.post(link).document
-
- return soup.select("div.short-in.nl").map { li ->
- val href = fixUrl(li.selectFirst("a.short-poster")!!.attr("href"))
- val poster = li.selectFirst("img")?.attr("src")
- val title = li.selectFirst("> a.short-poster")!!.text().toString().replace(". ", "")
- val year = li.selectFirst(".date")?.text()?.split("-")?.get(0)?.toIntOrNull()
- if (title.contains(
- "saison",
- ignoreCase = true
- )
- ) { // if saison in title ==> it's a TV serie
- TvSeriesSearchResponse(
- title,
- href,
- this.name,
- TvType.TvSeries,
- poster,
- year,
- (title.split("Eps ", " ")[1]).split(" ")[0].toIntOrNull()
- )
- } else { // it's a movie
- MovieSearchResponse(
- title,
- href,
- this.name,
- TvType.Movie,
- poster,
- year,
- )
- }
- }
- }
-
- override suspend fun load(url: String): LoadResponse {
- val soup = app.get(url).document
-
- val title = soup.selectFirst("h1#s-title")!!.text().toString()
- val isMovie = !title.contains("saison", ignoreCase = true)
- val description =
- soup.selectFirst("div.fdesc")!!.text().toString()
- .split("streaming", ignoreCase = true)[1].replace(" : ", "")
- var poster = fixUrlNull(soup.selectFirst("div.fposter > img")?.attr("src"))
- val listEpisode = soup.select("div.elink")
-
- if (isMovie) {
- val tags = soup.select("ul.flist-col > li").getOrNull(1)
- val tagsList = tags?.select("a")
- ?.mapNotNull { // all the tags like action, thriller ...; unused variable
- it?.text()
- }
- return newMovieLoadResponse(title, url, TvType.Movie, url) {
- this.posterUrl = poster
- addRating(soup.select("div.fr-count > div").text())
- this.year = soup.select("ul.flist-col > li").getOrNull(2)?.text()?.toIntOrNull()
- this.tags = tagsList
- this.plot = description
- addTrailer(soup.selectFirst("div.fleft > span > a")?.attr("href"))
- }
- } else // a tv serie
- {
- //println(listEpisode)
- //println("listeEpisode:")
- val episodeList = if ("
- val epNum = a.text().split("Episode")[1].trim().toIntOrNull()
- val epTitle = if (a.text().contains("Episode")) {
- val type = if ("honey" in a.attr("id")) {
- "VF"
- } else {
- "VOSTFR"
- }
- "Episode " + epNum?.toString() + " en " + type
- } else {
- a.text()
- }
- if (poster == null) {
- poster = a.selectFirst("div.fposter > img")?.attr("src")
- }
- Episode(
- fixUrl(url).plus("-episodenumber:$epNum"),
- epTitle,
- null,
- epNum,
- null, // episode Thumbnail
- null // episode date
- )
- }
- return TvSeriesLoadResponse(
- title,
- url,
- this.name,
- TvType.TvSeries,
- episodes,
- poster,
- null,
- description,
- ShowStatus.Ongoing,
- )
- }
- }
-
- fun translate(
- // the website has weird naming of series for episode 2 and 1 and original version content
- episodeNumber: String,
- is_vf_available: Boolean,
- ): String {
- return if (episodeNumber == "1") {
- if (is_vf_available) { // 1 translate differently if vf is available or not
- "FGHIJK"
- } else {
- "episode033"
- }
- } else {
- "episode" + (episodeNumber.toInt() + 32).toString()
- }
- }
-
- override suspend fun loadLinks(
- data: String,
- isCasting: Boolean,
- subtitleCallback: (SubtitleFile) -> Unit,
- callback: (ExtractorLink) -> Unit,
- ): Boolean {
- val servers =
- if (data.contains("-episodenumber:"))// It's a serie:
- {
- val split =
- data.split("-episodenumber:") // the data contains the url and the wanted episode number (a temporary dirty fix that will last forever)
- val url = split[0]
- val wantedEpisode =
- if (split[1] == "2") { // the episode number 2 has id of ABCDE, don't ask any question
- "ABCDE"
- } else {
- "episode" + split[1]
- }
-
-
- val soup = app.get(fixUrl(url)).document
- val div =
- if (wantedEpisode == "episode1") {
- "> div.tabs-sel " // this element is added when the wanted episode is one (the place changes in the document)
- } else {
- ""
- }
- val serversvf =// French version servers
- soup.select("div#$wantedEpisode > div.selink > ul.btnss $div> li")
- .mapNotNull { li -> // list of all french version servers
- val serverUrl = fixUrl(li.selectFirst("a")!!.attr("href"))
-// val litext = li.text()
- if (serverUrl.isNotBlank()) {
- if (li.text().replace(" ", "").replace(" ", "").isNotBlank()) {
- Pair(li.text().replace(" ", ""), "vf" + fixUrl(serverUrl))
- } else {
- null
- }
- } else {
- null
- }
- }
-
- val translated = translate(split[1], serversvf.isNotEmpty())
- val serversvo = // Original version servers
- soup.select("div#$translated > div.selink > ul.btnss $div> li")
- .mapNotNull { li ->
- val serverUrl = fixUrlNull(li.selectFirst("a")?.attr("href"))
- if (!serverUrl.isNullOrEmpty()) {
- if (li.text().replace(" ", "").isNotBlank()) {
- Pair(li.text().replace(" ", ""), "vo" + fixUrl(serverUrl))
- } else {
- null
- }
- } else {
- null
- }
- }
- serversvf + serversvo
- } else { // it's a movie
- val movieServers =
- app.get(fixUrl(data)).document.select("nav#primary_nav_wrap > ul > li > ul > li > a")
- .mapNotNull { a ->
- val serverurl = fixUrlNull(a.attr("href")) ?: return@mapNotNull null
- val parent = a.parents()[2]
- val element = parent.selectFirst("a")!!.text().plus(" ")
- if (a.text().replace(" ", "").isNotBlank()) {
- Pair(element.plus(a.text()), fixUrl(serverurl))
- } else {
- null
- }
- }
- movieServers
- }
-
- servers.apmap {
- for (extractor in extractorApis) {
- if (it.first.contains(extractor.name, ignoreCase = true)) {
- // val name = it.first
- // print("true for $name")
- extractor.getSafeUrl(it.second, it.second, subtitleCallback, callback)
- break
- }
- }
- }
-
- return true
- }
-
-
- override suspend fun getMainPage(page: Int, request : MainPageRequest): HomePageResponse? {
- val document = app.get(mainUrl).document
- val docs = document.select("div.sect")
- val returnList = docs.mapNotNull {
- val epList = it.selectFirst("> div.sect-c.floats.clearfix") ?: return@mapNotNull null
- val title =
- it.selectFirst("> div.sect-t.fx-row.icon-r > div.st-left > a.st-capt")!!.text()
- val list = epList.select("> div.short")
- val isMovieType = title.contains("Films") // if truen type is Movie
- val currentList = list.map { head ->
- val hrefItem = head.selectFirst("> div.short-in.nl > a")
- val href = fixUrl(hrefItem!!.attr("href"))
- val img = hrefItem.selectFirst("> img")
- val posterUrl = img!!.attr("src")
- val name = img.attr("> div.short-title").toString()
- return@map if (isMovieType) MovieSearchResponse(
- name,
- href,
- this.name,
- TvType.Movie,
- posterUrl,
- null
- ) else TvSeriesSearchResponse(
- name,
- href,
- this.name,
- TvType.TvSeries,
- posterUrl,
- null, null
- )
- }
- if (currentList.isNotEmpty()) {
- HomePageList(title, currentList)
- } else null
- }
- if (returnList.isEmpty()) return null
- return HomePageResponse(returnList)
- }
-}
diff --git a/FrenchStreamProvider/src/main/kotlin/com/lagradost/FrenchStreamProviderPlugin.kt b/FrenchStreamProvider/src/main/kotlin/com/lagradost/FrenchStreamProviderPlugin.kt
deleted file mode 100644
index f111fc9..0000000
--- a/FrenchStreamProvider/src/main/kotlin/com/lagradost/FrenchStreamProviderPlugin.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-
-package com.lagradost
-
-import com.lagradost.cloudstream3.plugins.CloudstreamPlugin
-import com.lagradost.cloudstream3.plugins.Plugin
-import android.content.Context
-
-@CloudstreamPlugin
-class FrenchStreamProviderPlugin: Plugin() {
- override fun load(context: Context) {
- // All providers should be added in this manner. Please don't edit the providers list directly.
- registerMainAPI(FrenchStreamProvider())
- }
-}
\ No newline at end of file
diff --git a/GogoanimeProvider/build.gradle.kts b/GogoanimeProvider/build.gradle.kts
index 2ee6852..3f30ffc 100644
--- a/GogoanimeProvider/build.gradle.kts
+++ b/GogoanimeProvider/build.gradle.kts
@@ -3,6 +3,7 @@ version = 1
cloudstream {
+ language = "en"
// All of these properties are optional, you can safely remove them
// description = "Lorem Ipsum"
diff --git a/GomunimeProvider/build.gradle.kts b/GomunimeProvider/build.gradle.kts
deleted file mode 100644
index c9cdc6d..0000000
--- a/GomunimeProvider/build.gradle.kts
+++ /dev/null
@@ -1,26 +0,0 @@
-// use an integer for version numbers
-version = 1
-
-
-cloudstream {
- // All of these properties are optional, you can safely remove them
-
- // description = "Lorem Ipsum"
- // authors = listOf("Cloudburst")
-
- /**
- * Status int as the following:
- * 0: Down
- * 1: Ok
- * 2: Slow
- * 3: Beta only
- * */
- status = 1 // will be 3 if unspecified
- tvTypes = listOf(
- "AnimeMovie",
- "Anime",
- "OVA",
- )
-
- iconUrl = "https://www.google.com/s2/favicons?domain=185.231.223.76&sz=24"
-}
\ No newline at end of file
diff --git a/GomunimeProvider/src/main/AndroidManifest.xml b/GomunimeProvider/src/main/AndroidManifest.xml
deleted file mode 100644
index 29aec9d..0000000
--- a/GomunimeProvider/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/GomunimeProvider/src/main/kotlin/com/lagradost/GomunimeProvider.kt b/GomunimeProvider/src/main/kotlin/com/lagradost/GomunimeProvider.kt
deleted file mode 100644
index 30689dc..0000000
--- a/GomunimeProvider/src/main/kotlin/com/lagradost/GomunimeProvider.kt
+++ /dev/null
@@ -1,232 +0,0 @@
-package com.lagradost
-
-import com.fasterxml.jackson.annotation.JsonProperty
-import com.lagradost.cloudstream3.*
-import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer
-import com.lagradost.cloudstream3.mvvm.safeApiCall
-import com.lagradost.cloudstream3.utils.AppUtils.parseJson
-import com.lagradost.cloudstream3.utils.ExtractorLink
-import com.lagradost.cloudstream3.utils.M3u8Helper
-import com.lagradost.cloudstream3.utils.Qualities
-import com.lagradost.cloudstream3.utils.loadExtractor
-import org.jsoup.Jsoup
-
-class GomunimeProvider : MainAPI() {
- override var mainUrl = "https://185.231.223.76"
- override var name = "Gomunime"
- override val hasMainPage = true
- override var lang = "id"
- override val hasDownloadSupport = true
-
- override val supportedTypes = setOf(
- TvType.Anime,
- TvType.AnimeMovie,
- TvType.OVA
- )
-
- companion object {
- fun getType(t: String): TvType {
- return if (t.contains("OVA") || t.contains("Special")) TvType.OVA
- else if (t.contains("Movie")) TvType.AnimeMovie
- else TvType.Anime
- }
-
- fun getStatus(t: String): ShowStatus {
- return when (t) {
- "Completed" -> ShowStatus.Completed
- "Ongoing" -> ShowStatus.Ongoing
- else -> ShowStatus.Completed
- }
- }
- }
-
- override val mainPage = mainPageOf(
- "e" to "Episode Baru",
- "c" to "Completed",
- "la" to "Live Action",
- "t" to "Trending"
- )
-
- override suspend fun getMainPage(
- page: Int,
- request: MainPageRequest
- ): HomePageResponse {
- val home = Jsoup.parse(
- (app.post(
- url = "$mainUrl/wp-admin/admin-ajax.php/wp-admin/admin-ajax.php",
- headers = mapOf("Referer" to mainUrl),
- data = mapOf(
- "action" to "home_ajax",
- "fungsi" to request.data,
- "pag" to "$page"
- )
- ).parsedSafe()?.html ?: throw ErrorLoadingException("Invalid Json reponse"))
- ).select("li").mapNotNull {
- val title = it.selectFirst("a.name")?.text()?.trim() ?: return@mapNotNull null
- val href = getProperAnimeLink(it.selectFirst("a")!!.attr("href"))
- val posterUrl = it.selectFirst("img")?.attr("src")
- val type = getType(it.selectFirst(".taglist > span")!!.text().trim())
- val epNum = it.select(".tag.ep").text().replace(Regex("[^0-9]"), "").trim()
- .toIntOrNull()
- newAnimeSearchResponse(title, href, type) {
- this.posterUrl = posterUrl
- addSub(epNum)
- }
- }
-
- return newHomePageResponse(request.name, home)
- }
-
- private fun getProperAnimeLink(uri: String): String {
- return if (uri.contains("-episode")) {
- val href =
- "$mainUrl/anime/" + Regex("\\w\\d/(.*)-episode.*").find(uri)?.groupValues?.get(1)
- .toString()
- when {
- href.contains("pokemon") -> href.replace(Regex("-[0-9]+"), "")
- else -> href
- }
- } else {
- uri
- }
- }
-
- override suspend fun search(query: String): List {
- val link = "$mainUrl/?s=$query"
- val document = app.get(link).document
-
- return document.select(".anime-list > li").map {
- val title = it.selectFirst("a.name")!!.text()
- val poster = it.selectFirst("img")!!.attr("src")
- val tvType = getType(it.selectFirst(".taglist > span")?.text().toString())
- val href = fixUrl(it.selectFirst("a.name")!!.attr("href"))
-
- newAnimeSearchResponse(title, href, tvType) {
- this.posterUrl = poster
- addDubStatus(dubExist = false, subExist = true)
- }
- }
- }
-
- override suspend fun load(url: String): LoadResponse {
- val document = app.get(url).document
-
- val title = document.selectFirst(".entry-title")?.text().toString()
- val poster = document.selectFirst(".thumbposter > img")?.attr("data-lazy-src")
- val tags = document.select(".genxed > a").map { it.text() }
-
- val year = Regex("\\d, ([0-9]*)").find(
- document.select("time[itemprop = datePublished]").text()
- )?.groupValues?.get(1)?.toIntOrNull()
- val status = getStatus(document.selectFirst(".spe > span")!!.ownText())
- val description = document.select("div[itemprop = description] > p").text()
- val trailer = document.selectFirst("div.embed-responsive noscript iframe")?.attr("src")
- val episodes = parseJson>(
- Regex("var episodelist = (\\[.*])").find(
- document.select(".bixbox.bxcl.epcheck > script").toString().trim()
- )?.groupValues?.get(1).toString().replace(Regex("""\\"""), "").trim()
- ).map {
- val name =
- Regex("(Episode\\s?[0-9]+)").find(it.epTitle.toString())?.groupValues?.getOrNull(0)
- ?: it.epTitle
- val link = it.epLink
- Episode(link, name)
- }.reversed()
-
- return newAnimeLoadResponse(title, url, TvType.Anime) {
- engName = title
- posterUrl = poster
- this.year = year
- addEpisodes(DubStatus.Subbed, episodes)
- showStatus = status
- plot = description
- this.tags = tags
- addTrailer(trailer)
- }
- }
-
- override suspend fun loadLinks(
- data: String,
- isCasting: Boolean,
- subtitleCallback: (SubtitleFile) -> Unit,
- callback: (ExtractorLink) -> Unit
- ): Boolean {
- val document = app.get(data).document
-
- val scriptData = document.select("aside.sidebar > script").dataNodes().toString()
- val key = scriptData.substringAfter("var a_ray = '").substringBefore("';")
- val title = scriptData.substringAfter("var judul_postingan = \"").substringBefore("\";")
-
- val sources: List> = app.post(
- url = "https://path.gomuni.me/app/vapi.php",
- data = mapOf("data" to key, "judul" to title, "func" to "mirror")
- ).document.select("div.gomunime-server-mirror").map {
- Pair(
- it.attr("data-vhash"),
- it.attr("data-type")
- )
- }
-
- sources.apmap {
- safeApiCall {
- when {
- it.second.contains("frame") -> {
- loadExtractor(it.first, data, subtitleCallback, callback)
- }
- it.second.contains("hls") -> {
- app.post(
- url = "https://path.gomuni.me/app/vapi.php",
- data = mapOf("fid" to it.first, "func" to "hls")
- ).text.let { link ->
- M3u8Helper.generateM3u8(
- this.name,
- link,
- "$mainUrl/",
- headers = mapOf("Origin" to mainUrl)
- ).forEach(callback)
- }
- }
- it.second.contains("mp4") -> {
- app.post(
- url = "https://path.gomuni.me/app/vapi.php",
- data = mapOf("data" to it.first, "func" to "blogs")
- ).parsed>().map {
- callback.invoke(
- ExtractorLink(
- source = name,
- name = "Mobi SD",
- url = it.file,
- referer = "$mainUrl/",
- quality = Qualities.P360.value
- )
- )
- }
- }
- else -> null
- }
- }
- }
-
- return true
- }
-
- private data class Response(
- @JsonProperty("status") val status: Boolean,
- @JsonProperty("html") val html: String
- )
-
- data class MobiSource(
- @JsonProperty("file") val file: String,
- @JsonProperty("label") val label: String,
- @JsonProperty("type") val type: String
- )
-
- private data class EpisodeElement(
- @JsonProperty("data-index") val dataIndex: Long?,
- @JsonProperty("ep-num") val epNum: String?,
- @JsonProperty("ep-title") val epTitle: String?,
- @JsonProperty("ep-link") val epLink: String,
- @JsonProperty("ep-date") val epDate: String?
- )
-
-}
\ No newline at end of file
diff --git a/GomunimeProvider/src/main/kotlin/com/lagradost/GomunimeProviderPlugin.kt b/GomunimeProvider/src/main/kotlin/com/lagradost/GomunimeProviderPlugin.kt
deleted file mode 100644
index 3a7ecee..0000000
--- a/GomunimeProvider/src/main/kotlin/com/lagradost/GomunimeProviderPlugin.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-
-package com.lagradost
-
-import com.lagradost.cloudstream3.plugins.CloudstreamPlugin
-import com.lagradost.cloudstream3.plugins.Plugin
-import android.content.Context
-
-@CloudstreamPlugin
-class GomunimeProviderPlugin: Plugin() {
- override fun load(context: Context) {
- // All providers should be added in this manner. Please don't edit the providers list directly.
- registerMainAPI(GomunimeProvider())
- }
-}
\ No newline at end of file
diff --git a/HDMProvider/build.gradle.kts b/HDMProvider/build.gradle.kts
index 1e957a0..75c5595 100644
--- a/HDMProvider/build.gradle.kts
+++ b/HDMProvider/build.gradle.kts
@@ -3,6 +3,7 @@ version = 1
cloudstream {
+ language = "en"
// All of these properties are optional, you can safely remove them
// description = "Lorem Ipsum"
diff --git a/HDMovie5/build.gradle.kts b/HDMovie5/build.gradle.kts
deleted file mode 100644
index 7fdd3a5..0000000
--- a/HDMovie5/build.gradle.kts
+++ /dev/null
@@ -1,24 +0,0 @@
-// use an integer for version numbers
-version = 1
-
-
-cloudstream {
- // All of these properties are optional, you can safely remove them
-
- // description = "Lorem Ipsum"
- // authors = listOf("Cloudburst")
-
- /**
- * Status int as the following:
- * 0: Down
- * 1: Ok
- * 2: Slow
- * 3: Beta only
- * */
- status = 1 // will be 3 if unspecified
- tvTypes = listOf(
- "TvSeries",
- "Movie",
- )
-
- }
\ No newline at end of file
diff --git a/HDMovie5/src/main/AndroidManifest.xml b/HDMovie5/src/main/AndroidManifest.xml
deleted file mode 100644
index 29aec9d..0000000
--- a/HDMovie5/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/HDMovie5/src/main/kotlin/com/lagradost/HDMovie5.kt b/HDMovie5/src/main/kotlin/com/lagradost/HDMovie5.kt
deleted file mode 100644
index 8691c02..0000000
--- a/HDMovie5/src/main/kotlin/com/lagradost/HDMovie5.kt
+++ /dev/null
@@ -1,154 +0,0 @@
-package com.lagradost
-
-import com.fasterxml.jackson.annotation.JsonProperty
-import com.lagradost.cloudstream3.*
-import com.lagradost.cloudstream3.utils.ExtractorLink
-import com.lagradost.cloudstream3.utils.httpsify
-import com.lagradost.cloudstream3.utils.loadExtractor
-import org.jsoup.Jsoup
-import org.jsoup.nodes.Element
-
-class HDMovie5 : MainAPI() {
- override var mainUrl = "https://hdmovie2.click"
- override var name = "HDMovie"
- override var lang = "hi"
-
- override val hasQuickSearch = true
- override val hasMainPage = true
- override val supportedTypes = setOf(
- TvType.Movie,
- TvType.TvSeries,
- )
-
- override val mainPage = mainPageOf(
- "$mainUrl/genre/tv-movie/page/" to "TV Movie",
- "$mainUrl/genre/tv-show/page/" to "TV- Show",
- "$mainUrl/genre/hindi-dubbed/page/" to "Hindi Dubbed",
- "$mainUrl/genre/netflix/page/" to "NETFLIX",
- )
-
- override suspend fun getMainPage(page: Int, request: MainPageRequest): HomePageResponse {
- val home = app.get(request.data + page).document.select("article.item").mapNotNull {
- it.toSearchResult()
- }
- return newHomePageResponse(request.name, home)
- }
-
- private fun Element.toSearchResult(): SearchResponse? {
- val title = this.selectFirst("h3 > a")?.text()?.trim() ?: return null
- val href = fixUrl(this.selectFirst("a")!!.attr("href"))
- val posterUrl = this.selectFirst("img")?.attr("src")
- return newMovieSearchResponse(title, href, TvType.Movie) {
- addPoster(posterUrl)
- }
- }
-
- private data class QuickSearchResponse(
- val title: String,
- val url: String,
- val img: String,
- val extra: Extra
- ) {
- data class Extra(
- val date: String
- )
- }
-
- override suspend fun quickSearch(query: String): List {
- return app.get("$mainUrl/wp-json/dooplay/search/?keyword=$query&nonce=ddbde04d9c")
- .parsed