mirror of
https://github.com/hexated/cloudstream-extensions-hexated.git
synced 2024-08-15 00:03:22 +00:00
sora: added DahmerMovies
This commit is contained in:
parent
d099e266cc
commit
b4d1b6cb65
3 changed files with 70 additions and 10 deletions
|
@ -2350,16 +2350,8 @@ object SoraExtractor : SoraStream() {
|
||||||
|
|
||||||
val size = file.size?.toDouble() ?: return@apmap null
|
val size = file.size?.toDouble() ?: return@apmap null
|
||||||
val sizeFile = "%.2f GB".format(bytesToGigaBytes(size))
|
val sizeFile = "%.2f GB".format(bytesToGigaBytes(size))
|
||||||
val quality =
|
val quality = getIndexQuality(file.name)
|
||||||
Regex("(\\d{3,4})[pP]").find(
|
val tags = getIndexQualityTags(file.name)
|
||||||
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()
|
|
||||||
?: ""
|
|
||||||
|
|
||||||
callback.invoke(
|
callback.invoke(
|
||||||
ExtractorLink(
|
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() {
|
class StreamM4u : XStreamCdn() {
|
||||||
|
|
|
@ -23,6 +23,7 @@ import com.lagradost.cloudstream3.*
|
||||||
import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer
|
import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer
|
||||||
import com.lagradost.cloudstream3.metaproviders.TmdbProvider
|
import com.lagradost.cloudstream3.metaproviders.TmdbProvider
|
||||||
import com.hexated.SoraExtractor.invokeCrunchyroll
|
import com.hexated.SoraExtractor.invokeCrunchyroll
|
||||||
|
import com.hexated.SoraExtractor.invokeDahmerMovies
|
||||||
import com.hexated.SoraExtractor.invokeEdithxmovies
|
import com.hexated.SoraExtractor.invokeEdithxmovies
|
||||||
import com.hexated.SoraExtractor.invokeFDMovies
|
import com.hexated.SoraExtractor.invokeFDMovies
|
||||||
import com.hexated.SoraExtractor.invokeFlixon
|
import com.hexated.SoraExtractor.invokeFlixon
|
||||||
|
@ -121,6 +122,7 @@ open class SoraStream : TmdbProvider() {
|
||||||
const val xtremeMoviesAPI = "https://kartik19.xtrememirror0.workers.dev/0:"
|
const val xtremeMoviesAPI = "https://kartik19.xtrememirror0.workers.dev/0:"
|
||||||
const val papaonMovies1API = "https://m.papaonwork.workers.dev/0:"
|
const val papaonMovies1API = "https://m.papaonwork.workers.dev/0:"
|
||||||
const val papaonMovies2API = "https://m.papaonwork.workers.dev/1:"
|
const val papaonMovies2API = "https://m.papaonwork.workers.dev/1:"
|
||||||
|
const val dahmerMoviesAPI = "https://edytjedhgmdhm.abfhaqrhbnf.workers.dev"
|
||||||
|
|
||||||
fun getType(t: String?): TvType {
|
fun getType(t: String?): TvType {
|
||||||
return when (t) {
|
return when (t) {
|
||||||
|
@ -699,6 +701,15 @@ open class SoraStream : TmdbProvider() {
|
||||||
callback
|
callback
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
invokeDahmerMovies(
|
||||||
|
res.title,
|
||||||
|
res.year,
|
||||||
|
res.season,
|
||||||
|
res.episode,
|
||||||
|
callback
|
||||||
|
)
|
||||||
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
|
@ -654,6 +654,14 @@ fun getKisskhTitle(str: String?): String? {
|
||||||
return str?.replace(Regex("[^a-zA-Z\\d]"), "-")
|
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 {
|
fun getQuality(str: String): Int {
|
||||||
return when (str) {
|
return when (str) {
|
||||||
"360p" -> Qualities.P240.value
|
"360p" -> Qualities.P240.value
|
||||||
|
|
Loading…
Reference in a new issue