From ccb29c2511781e77153250530ce3069f0581a322 Mon Sep 17 00:00:00 2001 From: hexated Date: Wed, 24 May 2023 15:29:19 +0700 Subject: [PATCH] sora: added dreamfilm --- .../main/kotlin/com/hexated/SoraExtractor.kt | 33 ++++++++++++++++++- .../src/main/kotlin/com/hexated/SoraStream.kt | 20 +++++++++-- .../main/kotlin/com/hexated/SoraStreamLite.kt | 12 +++++-- 3 files changed, 59 insertions(+), 6 deletions(-) diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt index d1a88d14..96553cd7 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraExtractor.kt @@ -15,7 +15,6 @@ import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.RequestBody.Companion.toRequestBody import okio.ByteString.Companion.encode import org.jsoup.Jsoup -import java.time.LocalDate val session = Session(Requests().baseClient) @@ -277,6 +276,38 @@ object SoraExtractor : SoraStream() { } + suspend fun invokeDreamfilm( + title: String? = null, + season: Int? = null, + episode: Int? = null, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val fixTitle = title.createSlug() + val url = if (season == null) { + "$dreamfilmAPI/$fixTitle" + } else { + "$dreamfilmAPI/series/$fixTitle/season-$season/episode-$episode" + } + + val iframe = app.get(url).document.selectFirst("iframe.Moly")?.attr("data-src") + loadExtractor(iframe ?: return, "$dreamfilmAPI/", subtitleCallback) { link -> + callback.invoke( + ExtractorLink( + link.name, + link.name, + link.url, + link.referer, + Qualities.P1080.value, + link.isM3u8, + link.headers, + link.extractorData + ) + ) + } + + } + suspend fun invokeSeries9( title: String? = null, year: Int? = null, diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt index 91b183c0..abf1dc2b 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStream.kt @@ -22,6 +22,7 @@ import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer import com.lagradost.cloudstream3.metaproviders.TmdbProvider import com.hexated.SoraExtractor.invokeDahmerMovies +import com.hexated.SoraExtractor.invokeDreamfilm import com.hexated.SoraExtractor.invokeEdithxmovies import com.hexated.SoraExtractor.invokeFDMovies import com.hexated.SoraExtractor.invokeFlixon @@ -77,7 +78,8 @@ open class SoraStream : TmdbProvider() { const val gdbot = "https://gdtot.pro" const val anilistAPI = "https://graphql.anilist.co" - private val apiKey = base64DecodeAPI("ZTM=NTg=MjM=MjM=ODc=MzI=OGQ=MmE=Nzk=Nzk=ZjI=NTA=NDY=NDA=MzA=YjA=") // PLEASE DON'T STEAL + private val apiKey = + base64DecodeAPI("ZTM=NTg=MjM=MjM=ODc=MzI=OGQ=MmE=Nzk=Nzk=ZjI=NTA=NDY=NDA=MzA=YjA=") // PLEASE DON'T STEAL /** ALL SOURCES */ const val twoEmbedAPI = "https://www.2embed.to" @@ -85,6 +87,7 @@ open class SoraStream : TmdbProvider() { const val dbgoAPI = "https://dbgo.fun" const val movieHabAPI = "https://moviehab.com" const val hdMovieBoxAPI = "https://hdmoviebox.net" + const val dreamfilmAPI = "https://dreamfilmsw.net" const val series9API = "https://series9.sh" const val idlixAPI = "https://idlixian.com" const val noverseAPI = "https://www.nollyverse.com" @@ -111,7 +114,8 @@ open class SoraStream : TmdbProvider() { const val movie123NetAPI = "https://ww8.0123movie.net" const val smashyStreamAPI = "https://embed.smashystream.com" const val watchSomuchAPI = "https://watchsomuch.tv" // sub only - val gomoviesAPI = base64DecodeAPI("bQ==Y28=ZS4=aW4=bmw=LW8=ZXM=dmk=bW8=Z28=Ly8=czo=dHA=aHQ=") + val gomoviesAPI = + base64DecodeAPI("bQ==Y28=ZS4=aW4=bmw=LW8=ZXM=dmk=bW8=Z28=Ly8=czo=dHA=aHQ=") const val ask4MoviesAPI = "https://ask4movie.mx" const val biliBiliAPI = "https://api-vn.kaguya.app/server" const val watchOnlineAPI = "https://watchonline.ag" @@ -131,7 +135,8 @@ open class SoraStream : TmdbProvider() { const val shinobiMovieAPI = "https://home.shinobicloud.cf/0:" const val vitoenMovieAPI = "https://openmatte.vitoencodes.workers.dev/0:" const val shivamhwAPI = "https://foogle.shivamhw.me" - val cryMoviesAPI = base64DecodeAPI("ZXY=LmQ=cnM=a2U=b3I=Lnc=ZXI=ZGQ=bGE=cy0=b2I=YWM=Lmo=YWw=aW4=LWY=cm4=Ym8=cmU=Ly8=czo=dHA=aHQ=") + val cryMoviesAPI = + base64DecodeAPI("ZXY=LmQ=cnM=a2U=b3I=Lnc=ZXI=ZGQ=bGE=cy0=b2I=YWM=Lmo=YWw=aW4=LWY=cm4=Ym8=cmU=Ly8=czo=dHA=aHQ=") // DEAD SITE const val consumetCrunchyrollAPI = "https://cronchy.consumet.stream" // dead @@ -431,6 +436,15 @@ open class SoraStream : TmdbProvider() { callback ) }, + { + if (!res.isAnime) invokeDreamfilm( + res.title, + res.season, + res.episode, + subtitleCallback, + callback + ) + }, { invokeSeries9( res.title, diff --git a/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt b/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt index f47309c8..a898a07e 100644 --- a/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt +++ b/SoraStream/src/main/kotlin/com/hexated/SoraStreamLite.kt @@ -2,8 +2,8 @@ package com.hexated import com.hexated.SoraExtractor.invokeAnimes import com.hexated.SoraExtractor.invokeAsk4Movies -import com.hexated.SoraExtractor.invokeCrunchyroll import com.hexated.SoraExtractor.invokeDbgo +import com.hexated.SoraExtractor.invokeDreamfilm import com.hexated.SoraExtractor.invokeFilmxy import com.hexated.SoraExtractor.invokeFlixon import com.hexated.SoraExtractor.invokeFmovies @@ -25,7 +25,6 @@ import com.hexated.SoraExtractor.invokeSeries9 import com.hexated.SoraExtractor.invokeSmashyStream import com.hexated.SoraExtractor.invokeSoraStream import com.hexated.SoraExtractor.invokeTwoEmbed -import com.hexated.SoraExtractor.invokeUniqueStream import com.hexated.SoraExtractor.invokeVidSrc import com.hexated.SoraExtractor.invokeWatchOnline import com.hexated.SoraExtractor.invokeWatchsomuch @@ -136,6 +135,15 @@ class SoraStreamLite : SoraStream() { callback ) }, + { + if (!res.isAnime) invokeDreamfilm( + res.title, + res.season, + res.episode, + subtitleCallback, + callback + ) + }, { invokeSeries9(res.title, res.year, res.season, res.episode, subtitleCallback, callback) },