From 9654ff0cbe38d87b03f6454ea72bd0b4a8d2ed60 Mon Sep 17 00:00:00 2001 From: hexated Date: Mon, 20 Feb 2023 02:57:29 +0700 Subject: [PATCH] sora: added jmdkhMovie --- SoraStream/build.gradle.kts | 2 +- .../main/kotlin/com/hexated/SoraExtractor.kt | 23 +++++++++++++++++-- .../src/main/kotlin/com/hexated/SoraStream.kt | 13 +++++++++++ .../src/main/kotlin/com/hexated/SoraUtils.kt | 14 ++++++++--- 4 files changed, 46 insertions(+), 6 deletions(-) diff --git a/SoraStream/build.gradle.kts b/SoraStream/build.gradle.kts index 2c173f9d..8d6cbb4a 100644 --- a/SoraStream/build.gradle.kts +++ b/SoraStream/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 92 +version = 93 cloudstream { diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt index 95a6bc5c..8c787bdf 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt @@ -2249,6 +2249,26 @@ object SoraExtractor : SoraStream() { ) } + suspend fun invokeJmdkhMovies( + apiUrl: String, + api: String, + title: String? = null, + year: Int? = null, + season: Int? = null, + episode: Int? = null, + callback: (ExtractorLink) -> Unit, + ) { + invokeIndex( + apiUrl, + api, + title, + year, + season, + episode, + callback, + ) + } + private suspend fun invokeIndex( apiUrl: String, api: String, @@ -2361,9 +2381,8 @@ object SoraExtractor : SoraStream() { val (seasonSlug, episodeSlug) = getEpisodeSlug(season, episode) val files = app.get( - "https://api.telegram.d1.zindex.eu.org/search?name=$query&page=1", + "https://api.telegram.d1.zindex.eu.org/search?name=${encode(query)}&page=1", referer = tgarMovieAPI, - timeout = 120L ).parsedSafe()?.results?.filter { media -> (if (season == null) { media.name?.contains("$year") == true diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt index 4415aa1a..fd767e9d 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt @@ -30,6 +30,7 @@ import com.hexated.SoraExtractor.invokeFlixon import com.hexated.SoraExtractor.invokeFwatayako import com.hexated.SoraExtractor.invokeGMovies import com.hexated.SoraExtractor.invokeGomovies +import com.hexated.SoraExtractor.invokeJmdkhMovies import com.hexated.SoraExtractor.invokeJsmovies import com.hexated.SoraExtractor.invokeKisskh import com.hexated.SoraExtractor.invokeLing @@ -127,6 +128,7 @@ open class SoraStream : TmdbProvider() { const val papaonMovies2API = "https://m.papaonwork.workers.dev/1:" const val dahmerMoviesAPI = "https://edytjedhgmdhm.abfhaqrhbnf.workers.dev" const val tgarMovieAPI = "https://tgarchive.eu.org" + const val jmdkhMovieAPI = "https://tg.jmdkh.eu.org/0:" fun getType(t: String?): TvType { return when (t) { @@ -720,6 +722,17 @@ open class SoraStream : TmdbProvider() { { if (!res.isAnime) invokeTgarMovies(res.title, res.year, res.season, res.episode, callback) }, + { + if (!res.isAnime) invokeJmdkhMovies( + jmdkhMovieAPI, + "JmdkhMovies", + res.title, + res.year, + res.season, + res.episode, + callback + ) + }, ) return true diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt b/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt index e3d5ec14..1202ac0d 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt @@ -24,6 +24,7 @@ import okhttp3.RequestBody.Companion.toRequestBody import org.jsoup.nodes.Document import java.net.URI import java.net.URL +import java.net.URLEncoder import java.security.MessageDigest import java.security.SecureRandom import java.util.* @@ -44,6 +45,7 @@ val encodedIndex = arrayOf( "XtremeMovies", "PapaonMovies[1]", "PapaonMovies[2]", + "JmdkhMovies", ) val lockedIndex = arrayOf( @@ -52,7 +54,8 @@ val lockedIndex = arrayOf( ) val mkvIndex = arrayOf( - "EdithxMovies" + "EdithxMovies", + "JmdkhMovies", ) val untrimmedIndex = arrayOf( @@ -674,7 +677,7 @@ fun searchIndex( response: String, isTrimmed: Boolean = true, ): List? { - val (dotSlug, spaceSlug) = getTitleSlug(title) + val (dotSlug, spaceSlug, slashSlug) = getTitleSlug(title) val (seasonSlug, episodeSlug) = getEpisodeSlug(season, episode) val files = tryParseJson(response)?.data?.files?.filter { media -> (if (season == null) { @@ -692,7 +695,10 @@ fun searchIndex( ) || media.name.replace( "-", " " - ).contains("$spaceSlug", true)) + ).contains("$spaceSlug", true) || media.name.replace( + "-", + "_" + ).contains("$slashSlug", true)) }?.distinctBy { it.name }?.sortedByDescending { it.size?.toLongOrNull() ?: 0 } ?: return null return if (isTrimmed) { @@ -844,6 +850,8 @@ fun getBaseUrl(url: String): String { } } +fun encode(input: String): String? = URLEncoder.encode(input, "utf-8") + fun decryptStreamUrl(data: String): String { fun getTrash(arr: List, item: Int): List {