From b4d1b6cb65b6ad64d88efeef5cd46fb6531db789 Mon Sep 17 00:00:00 2001 From: hexated Date: Sat, 11 Feb 2023 00:52:02 +0700 Subject: [PATCH] sora: added DahmerMovies --- .../main/kotlin/com/hexated/SoraExtractor.kt | 61 ++++++++++++++++--- .../src/main/kotlin/com/hexated/SoraStream.kt | 11 ++++ .../src/main/kotlin/com/hexated/SoraUtils.kt | 8 +++ 3 files changed, 70 insertions(+), 10 deletions(-) diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt index 0d954323..bfb2646f 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt @@ -2350,16 +2350,8 @@ object SoraExtractor : SoraStream() { val size = file.size?.toDouble() ?: return@apmap null val sizeFile = "%.2f GB".format(bytesToGigaBytes(size)) - val quality = - Regex("(\\d{3,4})[pP]").find( - file.name ?: return@apmap null - )?.groupValues?.getOrNull(1)?.toIntOrNull() - ?: Qualities.P1080.value - - val tags = Regex("\\d{3,4}[pP]\\.?(.*?)\\.(mkv|mp4|avi)").find( - file.name - )?.groupValues?.getOrNull(1)?.replace(".", " ")?.trim() - ?: "" + val quality = getIndexQuality(file.name) + val tags = getIndexQualityTags(file.name) callback.invoke( ExtractorLink( @@ -2375,6 +2367,55 @@ object SoraExtractor : SoraStream() { } + suspend fun invokeDahmerMovies( + title: String? = null, + year: Int? = null, + season: Int? = null, + episode: Int? = null, + callback: (ExtractorLink) -> Unit, + ) { + val url = if(season == null) { + "$dahmerMoviesAPI/movies/${title?.replace(":", "")} ($year)/" + } else { + "$dahmerMoviesAPI/tvs/${title?.replace(":", " -")}/Season $season/" + } + + val request = app.get(url) + if(!request.isSuccessful) return + + val paths = request.document.select("tr.file").map { + Triple( + it.select("a").text(), + it.select("a").attr("href"), + it.select("size").text(), + ) + }.filter { + if(season == null) { + it.first.contains(Regex("(?i)(1080p|2160p)")) + } else { + val (seasonSlug, episodeSlug) = getEpisodeSlug(season, episode) + it.first.contains(Regex("(?i)S${seasonSlug}E${episodeSlug}")) + } + }.ifEmpty { return } + + paths.map { + val quality = getIndexQuality(it.first) + val tags = getIndexQualityTags(it.first) + val size = "%.2f GB".format(bytesToGigaBytes(it.third.toDouble())) + callback.invoke( + ExtractorLink( + "DahmerMovies $tags [$size]", + "DahmerMovies $tags [$size]", + url + it.second, + "", + quality, + ) + ) + + } + + } + } class StreamM4u : XStreamCdn() { diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt index 473814b3..4f79edec 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt @@ -23,6 +23,7 @@ import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer import com.lagradost.cloudstream3.metaproviders.TmdbProvider import com.hexated.SoraExtractor.invokeCrunchyroll +import com.hexated.SoraExtractor.invokeDahmerMovies import com.hexated.SoraExtractor.invokeEdithxmovies import com.hexated.SoraExtractor.invokeFDMovies import com.hexated.SoraExtractor.invokeFlixon @@ -121,6 +122,7 @@ open class SoraStream : TmdbProvider() { const val xtremeMoviesAPI = "https://kartik19.xtrememirror0.workers.dev/0:" const val papaonMovies1API = "https://m.papaonwork.workers.dev/0:" const val papaonMovies2API = "https://m.papaonwork.workers.dev/1:" + const val dahmerMoviesAPI = "https://edytjedhgmdhm.abfhaqrhbnf.workers.dev" fun getType(t: String?): TvType { return when (t) { @@ -699,6 +701,15 @@ open class SoraStream : TmdbProvider() { callback ) }, + { + invokeDahmerMovies( + 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 61a6c102..371bc9e7 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt @@ -654,6 +654,14 @@ fun getKisskhTitle(str: String?): String? { return str?.replace(Regex("[^a-zA-Z\\d]"), "-") } +fun getIndexQualityTags(str: String?): String { + return Regex("\\d{3,4}[pP]\\.?(.*?)\\.(mkv|mp4|avi)").find(str ?: "")?.groupValues?.getOrNull(1)?.replace(".", " ")?.trim() ?: "" +} + +fun getIndexQuality(str: String?): Int { + return Regex("(\\d{3,4})[pP]").find(str ?: "")?.groupValues?.getOrNull(1)?.toIntOrNull() ?: Qualities.Unknown.value +} + fun getQuality(str: String): Int { return when (str) { "360p" -> Qualities.P240.value