From d80ec53b091161a20aeed4074658eb772f56d120 Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 21 Jan 2024 19:39:02 +0700 Subject: [PATCH] sora: disabled mMovies --- Gomov/build.gradle.kts | 2 +- Gomov/src/main/kotlin/com/hexated/Gomov.kt | 2 +- Gomov/src/main/kotlin/com/hexated/Ngefilm.kt | 2 +- .../src/main/kotlin/com/hexated/Pusatfilm.kt | 2 +- LayarKacaProvider/build.gradle.kts | 2 +- .../kotlin/com/hexated/LayarKacaProvider.kt | 4 +- .../src/main/kotlin/com/hexated/Extractors.kt | 38 ---------------- .../com/hexated/OploverzProviderPlugin.kt | 1 - SoraStream/build.gradle.kts | 2 +- .../main/kotlin/com/hexated/SoraExtractor.kt | 45 +++++++++++++++++++ .../src/main/kotlin/com/hexated/SoraParser.kt | 17 +++++++ .../src/main/kotlin/com/hexated/SoraStream.kt | 7 ++- .../main/kotlin/com/hexated/SoraStreamLite.kt | 10 +++-- .../main/kotlin/com/hexated/Superstream.kt | 2 - build.gradle.kts | 2 +- 15 files changed, 84 insertions(+), 54 deletions(-) diff --git a/Gomov/build.gradle.kts b/Gomov/build.gradle.kts index d4cc776c..b9ed7bbb 100644 --- a/Gomov/build.gradle.kts +++ b/Gomov/build.gradle.kts @@ -1,7 +1,7 @@ import org.jetbrains.kotlin.konan.properties.Properties // use an integer for version numbers -version = 30 +version = 31 android { defaultConfig { diff --git a/Gomov/src/main/kotlin/com/hexated/Gomov.kt b/Gomov/src/main/kotlin/com/hexated/Gomov.kt index b3eadaf1..908f2b62 100644 --- a/Gomov/src/main/kotlin/com/hexated/Gomov.kt +++ b/Gomov/src/main/kotlin/com/hexated/Gomov.kt @@ -10,7 +10,7 @@ import org.jsoup.nodes.Element import java.net.URI open class Gomov : MainAPI() { - override var mainUrl = "https://gomov.bio" + override var mainUrl = "https://gomov.co" private var directUrl: String? = null override var name = "Gomov" override val hasMainPage = true diff --git a/Gomov/src/main/kotlin/com/hexated/Ngefilm.kt b/Gomov/src/main/kotlin/com/hexated/Ngefilm.kt index a54a5003..9ae96908 100644 --- a/Gomov/src/main/kotlin/com/hexated/Ngefilm.kt +++ b/Gomov/src/main/kotlin/com/hexated/Ngefilm.kt @@ -3,7 +3,7 @@ package com.hexated import com.lagradost.cloudstream3.mainPageOf class Ngefilm : Gomov() { - override var mainUrl = "https://tv3.ngefilm21.homes" + override var mainUrl = "https://tv4.ngefilm21.homes" override var name = "Ngefilm" override val mainPage = mainPageOf( "/page/%d/?s&search=advanced&post_type=movie&index&orderby&genre&movieyear&country&quality=" to "Movies Terbaru", diff --git a/Gomov/src/main/kotlin/com/hexated/Pusatfilm.kt b/Gomov/src/main/kotlin/com/hexated/Pusatfilm.kt index e6053bf6..02709fbc 100644 --- a/Gomov/src/main/kotlin/com/hexated/Pusatfilm.kt +++ b/Gomov/src/main/kotlin/com/hexated/Pusatfilm.kt @@ -6,7 +6,7 @@ import com.lagradost.cloudstream3.TvSeriesLoadResponse import com.lagradost.cloudstream3.* class Pusatfilm : Gomov() { - override var mainUrl = "https://pusatfilm21.vip" + override var mainUrl = "https://pf21.vip" override var name = "Pusatfilm" override val mainPage = mainPageOf( "film-terbaru/page/%d/" to "Film Terbaru", diff --git a/LayarKacaProvider/build.gradle.kts b/LayarKacaProvider/build.gradle.kts index 17b5bf69..2b098a66 100644 --- a/LayarKacaProvider/build.gradle.kts +++ b/LayarKacaProvider/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 19 +version = 20 cloudstream { diff --git a/LayarKacaProvider/src/main/kotlin/com/hexated/LayarKacaProvider.kt b/LayarKacaProvider/src/main/kotlin/com/hexated/LayarKacaProvider.kt index 05b9dcd0..60321ed5 100644 --- a/LayarKacaProvider/src/main/kotlin/com/hexated/LayarKacaProvider.kt +++ b/LayarKacaProvider/src/main/kotlin/com/hexated/LayarKacaProvider.kt @@ -8,8 +8,8 @@ import com.lagradost.cloudstream3.utils.* import org.jsoup.nodes.Element class LayarKacaProvider : MainAPI() { - override var mainUrl = "https://tv7.lk21official.wiki" - private var seriesUrl = "https://tv9.nontondrama.click" + override var mainUrl = "https://tv10.lk21official.wiki" + private var seriesUrl = "https://tv11.nontondrama.click" override var name = "LayarKaca" override val hasMainPage = true override var lang = "id" diff --git a/OploverzProvider/src/main/kotlin/com/hexated/Extractors.kt b/OploverzProvider/src/main/kotlin/com/hexated/Extractors.kt index 02a8f86d..dc673cb2 100644 --- a/OploverzProvider/src/main/kotlin/com/hexated/Extractors.kt +++ b/OploverzProvider/src/main/kotlin/com/hexated/Extractors.kt @@ -27,10 +27,7 @@ open class Qiwi : ExtractorApi() { "$mainUrl/", getIndexQuality(title), headers = mapOf( - "Accept" to "video/webm,video/ogg,video/*;q=0.9,application/ogg;q=0.7,audio/*;q=0.6,*/*;q=0.5", "Range" to "bytes=0-", - "Sec-Fetch-Dest" to "video", - "Sec-Fetch-Mode" to "no-cors", ) ) ) @@ -42,39 +39,4 @@ open class Qiwi : ExtractorApi() { ?: Qualities.Unknown.value } -} - -open class Mediafire : ExtractorApi() { - override val name = "Mediafire" - override val mainUrl = "https://www.mediafire.com" - override val requiresReferer = true - - override suspend fun getUrl( - url: String, - referer: String?, - subtitleCallback: (SubtitleFile) -> Unit, - callback: (ExtractorLink) -> Unit - ) { - val res = app.get(url, referer = referer).document - val title = res.select("div.dl-btn-label").text() - val video = res.selectFirst("a#downloadButton")?.attr("href") - - callback.invoke( - ExtractorLink( - this.name, - this.name, - video ?: return, - "", - getQuality(title), - INFER_TYPE - ) - ) - - } - - private fun getQuality(str: String?): Int { - return Regex("(\\d{3,4})[pP]").find(str ?: "")?.groupValues?.getOrNull(1)?.toIntOrNull() - ?: Qualities.Unknown.value - } - } \ No newline at end of file diff --git a/OploverzProvider/src/main/kotlin/com/hexated/OploverzProviderPlugin.kt b/OploverzProvider/src/main/kotlin/com/hexated/OploverzProviderPlugin.kt index a635a694..ba7c0b85 100644 --- a/OploverzProvider/src/main/kotlin/com/hexated/OploverzProviderPlugin.kt +++ b/OploverzProvider/src/main/kotlin/com/hexated/OploverzProviderPlugin.kt @@ -11,6 +11,5 @@ class OploverzProviderPlugin: Plugin() { // All providers should be added in this manner. Please don't edit the providers list directly. registerMainAPI(OploverzProvider()) registerExtractorAPI(Qiwi()) - registerExtractorAPI(Mediafire()) } } \ No newline at end of file diff --git a/SoraStream/build.gradle.kts b/SoraStream/build.gradle.kts index 12d64480..3136cc81 100644 --- a/SoraStream/build.gradle.kts +++ b/SoraStream/build.gradle.kts @@ -1,7 +1,7 @@ import org.jetbrains.kotlin.konan.properties.Properties // use an integer for version numbers -version = 218 +version = 219 android { defaultConfig { diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt index 8cdb4848..fc246a74 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt @@ -1821,6 +1821,51 @@ object SoraExtractor : SoraStream() { } + suspend fun invokeMoflix( + tmdbId: Int? = null, + season: Int? = null, + episode: Int? = null, + callback: (ExtractorLink) -> Unit + ) { + val id = (if(season == null) { + "tmdb|movie|$tmdbId" + } else { + "tmdb|series|$tmdbId" + }).let { base64Encode(it.toByteArray()) } + + val loaderUrl = "$moflixAPI/api/v1/titles/$id?loader=titlePage" + val url = if(season == null) { + loaderUrl + } else { + val mediaId = app.get(loaderUrl, referer = "$moflixAPI/").parsedSafe()?.title?.id + "$moflixAPI/api/v1/titles/$mediaId/seasons/$season/episodes/$episode?loader=episodePage" + } + + val res = app.get(url, referer = "$moflixAPI/").parsedSafe() + (res?.episode ?: res?.title)?.videos?.filter { it.category.equals("full", true) }?.apmap { iframe -> + val response = app.get(iframe.src ?: return@apmap, referer = "$moflixAPI/") + val host = getBaseUrl(iframe.src) + val doc = response.document.selectFirst("script:containsData(sources:)")?.data() + val script = if (doc.isNullOrEmpty()) { + getAndUnpack(response.text) + } else { + doc + } + val m3u8 = Regex("file:\\s*\"(.*?m3u8.*?)\"").find(script ?: return@apmap)?.groupValues?.getOrNull(1) + callback.invoke( + ExtractorLink( + "Moflix", + "Moflix [${iframe.name}]", + m3u8 ?: return@apmap, + "$host/", + iframe.quality?.filter { it.isDigit() }?.toIntOrNull() ?: Qualities.Unknown.value, + INFER_TYPE + ) + ) + } + + } + //TODO only subs suspend fun invokeWatchsomuch( imdbId: String? = null, diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt b/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt index fd388fbc..57d1a5d7 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraParser.kt @@ -47,6 +47,23 @@ data class AniwaveServer( } } +data class MoflixResponse( + @JsonProperty("title") val title: Episode? = null, + @JsonProperty("episode") val episode: Episode? = null, +) { + data class Episode( + @JsonProperty("id") val id: Int? = null, + @JsonProperty("videos") val videos: ArrayList? = arrayListOf(), + ) { + data class Videos( + @JsonProperty("name") val name: String? = null, + @JsonProperty("category") val category: String? = null, + @JsonProperty("src") val src: String? = null, + @JsonProperty("quality") val quality: String? = null, + ) + } +} + data class AniMedia( @JsonProperty("id") var id: Int? = null, @JsonProperty("idMal") var idMal: Int? = null diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt index 9fdb1441..aaadba69 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt @@ -44,6 +44,7 @@ import com.hexated.SoraExtractor.invokeVegamovies import com.hexated.SoraExtractor.invokeVidsrcto import com.hexated.SoraExtractor.invokeCinemaTv import com.hexated.SoraExtractor.invokeMMovies +import com.hexated.SoraExtractor.invokeMoflix import com.hexated.SoraExtractor.invokeOmovies import com.hexated.SoraExtractor.invokeWatchCartoon import com.hexated.SoraExtractor.invokeWatchsomuch @@ -119,6 +120,7 @@ open class SoraStream : TmdbProvider() { const val aoneroomAPI = "https://api3.aoneroom.com" const val mMoviesAPI = "https://multimovies.uno" const val watchCartoonAPI = "https://www1.watchcartoononline.bz" + const val moflixAPI = "https://moflix-stream.xyz" const val fdMoviesAPI = "https://freedrivemovie.com" const val uhdmoviesAPI = "https://uhdmovies.zip" @@ -721,8 +723,11 @@ open class SoraStream : TmdbProvider() { ?: res.year, res.season, res.episode, callback ) }, +// { +// invokeMMovies(res.title, res.season, res.episode, subtitleCallback, callback) +// }, { - invokeMMovies(res.title, res.season, res.episode, subtitleCallback, callback) + invokeMoflix(res.id, res.season, res.episode, callback) }, ) diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt b/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt index 8bd35537..13666051 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt @@ -30,6 +30,7 @@ import com.hexated.SoraExtractor.invokeVidSrc import com.hexated.SoraExtractor.invokeVidsrcto import com.hexated.SoraExtractor.invokeCinemaTv import com.hexated.SoraExtractor.invokeMMovies +import com.hexated.SoraExtractor.invokeMoflix import com.hexated.SoraExtractor.invokeOmovies import com.hexated.SoraExtractor.invokeWatchCartoon import com.hexated.SoraExtractor.invokeWatchsomuch @@ -52,6 +53,9 @@ class SoraStreamLite : SoraStream() { val res = AppUtils.parseJson(data) argamap( + { + invokeMoflix(res.id, res.season, res.episode, callback) + }, { if (!res.isAnime) invokeWatchsomuch( res.imdbId, @@ -328,9 +332,9 @@ class SoraStreamLite : SoraStream() { ?: res.year, res.season, res.episode, callback ) }, - { - invokeMMovies(res.title, res.season, res.episode, subtitleCallback, callback) - }, +// { +// invokeMMovies(res.title, res.season, res.episode, subtitleCallback, callback) +// }, ) return true diff --git a/Superstream/src/main/kotlin/com/hexated/Superstream.kt b/Superstream/src/main/kotlin/com/hexated/Superstream.kt index 525e3607..2e63a684 100644 --- a/Superstream/src/main/kotlin/com/hexated/Superstream.kt +++ b/Superstream/src/main/kotlin/com/hexated/Superstream.kt @@ -623,7 +623,6 @@ open class Superstream : MainAPI() { } } - private data class LinkData( val id: Int, val type: Int, @@ -633,7 +632,6 @@ open class Superstream : MainAPI() { val imdbId: String?, ) - data class LinkDataProp( @JsonProperty("code") val code: Int? = null, @JsonProperty("msg") val msg: String? = null, diff --git a/build.gradle.kts b/build.gradle.kts index f0d0f5c1..6e28f8fa 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -77,7 +77,7 @@ subprojects { // https://github.com/recloudstream/cloudstream/blob/master/app/build.gradle implementation(kotlin("stdlib")) // adds standard kotlin features, like listOf, mapOf etc - implementation("com.github.Blatzar:NiceHttp:0.4.4") // http library + implementation("com.github.Blatzar:NiceHttp:0.4.5") // http library implementation("org.jsoup:jsoup:1.17.2") // html parser implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.16.1") implementation("io.karn:khttp-android:0.1.2")