From 7ec06a2bf4d1c31e38c07a80ca25da823330da78 Mon Sep 17 00:00:00 2001 From: hexated Date: Sun, 19 Feb 2023 21:49:44 +0700 Subject: [PATCH] sora: added TgarMovies --- SoraStream/build.gradle.kts | 2 +- .../main/kotlin/com/hexated/SoraExtractor.kt | 68 +++++++++++++++++++ .../src/main/kotlin/com/hexated/SoraStream.kt | 5 ++ .../src/main/kotlin/com/hexated/SoraUtils.kt | 20 ++++-- 4 files changed, 87 insertions(+), 8 deletions(-) diff --git a/SoraStream/build.gradle.kts b/SoraStream/build.gradle.kts index 45c59574..2c173f9d 100644 --- a/SoraStream/build.gradle.kts +++ b/SoraStream/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 91 +version = 92 cloudstream { diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt index d8237b52..57626c49 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt @@ -2349,6 +2349,56 @@ object SoraExtractor : SoraStream() { } + suspend fun invokeTgarMovies( + title: String? = null, + year: Int? = null, + season: Int? = null, + episode: Int? = null, + callback: (ExtractorLink) -> Unit, + ) { + val query = getIndexQuery(title, year, season, episode) + val (dotSlug, spaceSlug, slashSlug) = getTitleSlug(title) + val (seasonSlug, episodeSlug) = getEpisodeSlug(season, episode) + + val files = app.get("$tgarMovieAPI/search?name=$query&page=1").parsedSafe()?.results?.filter { media -> + (if (season == null) { + media.name?.contains("$year") == true + } else { + media.name?.contains(Regex("(?i)S${seasonSlug}.?E${episodeSlug}")) == true + }) && media.name?.contains( + Regex("(?i)(2160p|1080p)") + ) == true && (media.mime_type in mimeType) && (media.name.replace( + "-", + "." + ).contains( + "$dotSlug", + true + ) || media.name.replace( + "-", + " " + ).contains("$spaceSlug", true) || media.name.replace( + "-", + "_" + ).contains("$slashSlug", true)) + } + + files?.map { file -> + val size = "%.2f GB".format(bytesToGigaBytes(file.size?.toDouble() ?: return@map null)) + val quality = getIndexQuality(file.name) + val tags = getIndexQualityTags(file.name) + callback.invoke( + ExtractorLink( + "TgarMovies $tags [$size]", + "TgarMovies $tags [$size]", + "https://api.southkoreacdn.workers.dev/telegram/${file._id}", + "https://tgarchive.eu.org/", + quality, + ) + ) + } + + } + suspend fun invokeDahmerMovies( title: String? = null, year: Int? = null, @@ -2492,6 +2542,12 @@ class Sblongvu : StreamSB() { override var mainUrl = "https://sblongvu.com" } +data class TitleSlug( + val dotSlug: String? = null, + val spaceSlug: String? = null, + val slashSlug: String? = null, +) + data class FDMovieIFrame( val link: String, val quality: String, @@ -2763,4 +2819,16 @@ data class IndexData( data class IndexSearch( @JsonProperty("data") val data: IndexData? = null, +) + +data class TgarMedia( + @JsonProperty("_id") val _id: Int? = null, + @JsonProperty("name") val name: String? = null, + @JsonProperty("size") val size: String? = null, + @JsonProperty("file_unique_id") val file_unique_id: String? = null, + @JsonProperty("mime_type") val mime_type: String? = null, +) + +data class TgarData( + @JsonProperty("results") val results: ArrayList? = arrayListOf(), ) \ No newline at end of file diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt index b2744272..67250a68 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt @@ -43,6 +43,7 @@ import com.hexated.SoraExtractor.invokeRStream import com.hexated.SoraExtractor.invokeRinzrymovies import com.hexated.SoraExtractor.invokeSmashyStream import com.hexated.SoraExtractor.invokeSoraStream +import com.hexated.SoraExtractor.invokeTgarMovies import com.hexated.SoraExtractor.invokeTvMovies import com.hexated.SoraExtractor.invokeUhdmovies import com.hexated.SoraExtractor.invokeWatchsomuch @@ -125,6 +126,7 @@ open class SoraStream : TmdbProvider() { 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" + const val tgarMovieAPI = "https://api.telegram.d1.zindex.eu.org" fun getType(t: String?): TvType { return when (t) { @@ -715,6 +717,9 @@ open class SoraStream : TmdbProvider() { { invokeGomovies(res.title, res.year, res.season, res.episode, callback) }, + { + invokeTgarMovies(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 685489b1..e3d5ec14 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraUtils.kt @@ -61,6 +61,12 @@ val untrimmedIndex = arrayOf( "EdithxMovies", ) +val mimeType = arrayOf( + "video/x-matroska", + "video/mp4", + "video/x-msvideo" +) + data class FilmxyCookies( val phpsessid: String? = null, val wLog: String? = null, @@ -637,8 +643,13 @@ fun getEpisodeSlug( } } -fun getTitleSlug(title: String? = null): Pair { - return title.createSlug()?.replace("-", ".") to title.createSlug()?.replace("-", " ") +fun getTitleSlug(title: String? = null): TitleSlug { + val slug = title.createSlug() + return TitleSlug( + slug?.replace("-", "."), + slug?.replace("-", " "), + slug?.replace("-", "_"), + ) } fun getIndexQuery( @@ -665,11 +676,6 @@ fun searchIndex( ): List? { val (dotSlug, spaceSlug) = getTitleSlug(title) val (seasonSlug, episodeSlug) = getEpisodeSlug(season, episode) - val mimeType = arrayOf( - "video/x-matroska", - "video/mp4", - "video/x-msvideo" - ) val files = tryParseJson(response)?.data?.files?.filter { media -> (if (season == null) { media.name?.contains("$year") == true