mirror of
				https://github.com/recloudstream/cloudstream.git
				synced 2024-08-15 01:53:11 +00:00 
			
		
		
		
	removed theflix
This commit is contained in:
		
							parent
							
								
									ac2760bacf
								
							
						
					
					
						commit
						87560d66bd
					
				
					 4 changed files with 353 additions and 195 deletions
				
			
		| 
						 | 
				
			
			@ -9,6 +9,10 @@ import com.lagradost.cloudstream3.utils.getQualityFromName
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
class TheFlixToProvider : MainAPI() {
 | 
			
		||||
    companion object {
 | 
			
		||||
        var latestCookies: Map<String, String> = emptyMap()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override var name = "TheFlix.to"
 | 
			
		||||
    override var mainUrl = "https://theflix.to"
 | 
			
		||||
    override val instantLinkLoading = false
 | 
			
		||||
| 
						 | 
				
			
			@ -18,76 +22,76 @@ class TheFlixToProvider : MainAPI() {
 | 
			
		|||
        TvType.TvSeries,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class HomeJson (
 | 
			
		||||
        @JsonProperty("props") val props         : HomeProps         = HomeProps(),
 | 
			
		||||
    data class HomeJson(
 | 
			
		||||
        @JsonProperty("props") val props: HomeProps = HomeProps(),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class HomeProps (
 | 
			
		||||
        @JsonProperty("pageProps" ) val pageProps : PageProps = PageProps(),
 | 
			
		||||
    data class HomeProps(
 | 
			
		||||
        @JsonProperty("pageProps") val pageProps: PageProps = PageProps(),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class PageProps (
 | 
			
		||||
        @JsonProperty("moviesListTrending"     ) val moviesListTrending     : MoviesListTrending    = MoviesListTrending(),
 | 
			
		||||
        @JsonProperty("moviesListNewArrivals"  ) val moviesListNewArrivals  : MoviesListNewArrivals = MoviesListNewArrivals(),
 | 
			
		||||
        @JsonProperty("tvsListTrending"        ) val tvsListTrending        : TvsListTrending      = TvsListTrending(),
 | 
			
		||||
        @JsonProperty("tvsListNewEpisodes"     ) val tvsListNewEpisodes     : TvsListNewEpisodes    = TvsListNewEpisodes(),
 | 
			
		||||
    data class PageProps(
 | 
			
		||||
        @JsonProperty("moviesListTrending") val moviesListTrending: MoviesListTrending = MoviesListTrending(),
 | 
			
		||||
        @JsonProperty("moviesListNewArrivals") val moviesListNewArrivals: MoviesListNewArrivals = MoviesListNewArrivals(),
 | 
			
		||||
        @JsonProperty("tvsListTrending") val tvsListTrending: TvsListTrending = TvsListTrending(),
 | 
			
		||||
        @JsonProperty("tvsListNewEpisodes") val tvsListNewEpisodes: TvsListNewEpisodes = TvsListNewEpisodes(),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    data class MoviesListTrending (
 | 
			
		||||
        @JsonProperty("docs"  ) val docs  : ArrayList<Docs> = arrayListOf(),
 | 
			
		||||
        @JsonProperty("total" ) val total : Int?            = null,
 | 
			
		||||
        @JsonProperty("page"  ) val page  : Int?            = null,
 | 
			
		||||
        @JsonProperty("limit" ) val limit : Int?            = null,
 | 
			
		||||
        @JsonProperty("pages" ) val pages : Int?            = null,
 | 
			
		||||
        @JsonProperty("type"  ) val type  : String?         = null,
 | 
			
		||||
    data class MoviesListTrending(
 | 
			
		||||
        @JsonProperty("docs") val docs: ArrayList<Docs> = arrayListOf(),
 | 
			
		||||
        @JsonProperty("total") val total: Int? = null,
 | 
			
		||||
        @JsonProperty("page") val page: Int? = null,
 | 
			
		||||
        @JsonProperty("limit") val limit: Int? = null,
 | 
			
		||||
        @JsonProperty("pages") val pages: Int? = null,
 | 
			
		||||
        @JsonProperty("type") val type: String? = null,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class MoviesListNewArrivals (
 | 
			
		||||
        @JsonProperty("docs"  ) val docs  : ArrayList<Docs> = arrayListOf(),
 | 
			
		||||
        @JsonProperty("total" ) val total : Int?            = null,
 | 
			
		||||
        @JsonProperty("page"  ) val page  : Int?            = null,
 | 
			
		||||
        @JsonProperty("limit" ) val limit : Int?            = null,
 | 
			
		||||
        @JsonProperty("pages" ) val pages : Int?            = null,
 | 
			
		||||
        @JsonProperty("type"  ) val type  : String?         = null,
 | 
			
		||||
    data class MoviesListNewArrivals(
 | 
			
		||||
        @JsonProperty("docs") val docs: ArrayList<Docs> = arrayListOf(),
 | 
			
		||||
        @JsonProperty("total") val total: Int? = null,
 | 
			
		||||
        @JsonProperty("page") val page: Int? = null,
 | 
			
		||||
        @JsonProperty("limit") val limit: Int? = null,
 | 
			
		||||
        @JsonProperty("pages") val pages: Int? = null,
 | 
			
		||||
        @JsonProperty("type") val type: String? = null,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class TvsListTrending (
 | 
			
		||||
        @JsonProperty("docs"  ) val docs  : ArrayList<Docs> = arrayListOf(),
 | 
			
		||||
        @JsonProperty("total" ) val total : Int?            = null,
 | 
			
		||||
        @JsonProperty("page"  ) val page  : Int?            = null,
 | 
			
		||||
        @JsonProperty("limit" ) val limit : Int?            = null,
 | 
			
		||||
        @JsonProperty("pages" ) val pages : Int?            = null,
 | 
			
		||||
        @JsonProperty("type"  ) val type  : String?         = null,
 | 
			
		||||
    data class TvsListTrending(
 | 
			
		||||
        @JsonProperty("docs") val docs: ArrayList<Docs> = arrayListOf(),
 | 
			
		||||
        @JsonProperty("total") val total: Int? = null,
 | 
			
		||||
        @JsonProperty("page") val page: Int? = null,
 | 
			
		||||
        @JsonProperty("limit") val limit: Int? = null,
 | 
			
		||||
        @JsonProperty("pages") val pages: Int? = null,
 | 
			
		||||
        @JsonProperty("type") val type: String? = null,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class TvsListNewEpisodes (
 | 
			
		||||
        @JsonProperty("docs"  ) val docs  : ArrayList<Docs> = arrayListOf(),
 | 
			
		||||
        @JsonProperty("total" ) val total : Int?            = null,
 | 
			
		||||
        @JsonProperty("page"  ) val page  : Int?            = null,
 | 
			
		||||
        @JsonProperty("limit" ) val limit : Int?            = null,
 | 
			
		||||
        @JsonProperty("pages" ) val pages : Int?            = null,
 | 
			
		||||
        @JsonProperty("type"  ) val type  : String?         = null,
 | 
			
		||||
    data class TvsListNewEpisodes(
 | 
			
		||||
        @JsonProperty("docs") val docs: ArrayList<Docs> = arrayListOf(),
 | 
			
		||||
        @JsonProperty("total") val total: Int? = null,
 | 
			
		||||
        @JsonProperty("page") val page: Int? = null,
 | 
			
		||||
        @JsonProperty("limit") val limit: Int? = null,
 | 
			
		||||
        @JsonProperty("pages") val pages: Int? = null,
 | 
			
		||||
        @JsonProperty("type") val type: String? = null,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class Docs (
 | 
			
		||||
        @JsonProperty("name"             ) val name             : String           = String(),
 | 
			
		||||
        @JsonProperty("originalLanguage" ) val originalLanguage : String?           = null,
 | 
			
		||||
        @JsonProperty("popularity"       ) val popularity       : Double?           = null,
 | 
			
		||||
        @JsonProperty("runtime"          ) val runtime          : Int?              = null,
 | 
			
		||||
        @JsonProperty("status"           ) val status           : String?           = null,
 | 
			
		||||
        @JsonProperty("voteAverage"      ) val voteAverage      : Double?           = null,
 | 
			
		||||
        @JsonProperty("voteCount"        ) val voteCount        : Int?              = null,
 | 
			
		||||
        @JsonProperty("cast"             ) val cast             : String?           = null,
 | 
			
		||||
        @JsonProperty("director"         ) val director         : String?           = null,
 | 
			
		||||
        @JsonProperty("overview"         ) val overview         : String?           = null,
 | 
			
		||||
        @JsonProperty("posterUrl"        ) val posterUrl        : String?           = null,
 | 
			
		||||
        @JsonProperty("releaseDate"      ) val releaseDate      : String?           = null,
 | 
			
		||||
        @JsonProperty("createdAt"        ) val createdAt        : String?           = null,
 | 
			
		||||
        @JsonProperty("updatedAt"        ) val updatedAt        : String?           = null,
 | 
			
		||||
        @JsonProperty("conversionDate"   ) val conversionDate   : String?           = null,
 | 
			
		||||
        @JsonProperty("id"               ) val id               : Int?              = null,
 | 
			
		||||
        @JsonProperty("available"        ) val available        : Boolean?          = null,
 | 
			
		||||
    data class Docs(
 | 
			
		||||
        @JsonProperty("name") val name: String = String(),
 | 
			
		||||
        @JsonProperty("originalLanguage") val originalLanguage: String? = null,
 | 
			
		||||
        @JsonProperty("popularity") val popularity: Double? = null,
 | 
			
		||||
        @JsonProperty("runtime") val runtime: Int? = null,
 | 
			
		||||
        @JsonProperty("status") val status: String? = null,
 | 
			
		||||
        @JsonProperty("voteAverage") val voteAverage: Double? = null,
 | 
			
		||||
        @JsonProperty("voteCount") val voteCount: Int? = null,
 | 
			
		||||
        @JsonProperty("cast") val cast: String? = null,
 | 
			
		||||
        @JsonProperty("director") val director: String? = null,
 | 
			
		||||
        @JsonProperty("overview") val overview: String? = null,
 | 
			
		||||
        @JsonProperty("posterUrl") val posterUrl: String? = null,
 | 
			
		||||
        @JsonProperty("releaseDate") val releaseDate: String? = null,
 | 
			
		||||
        @JsonProperty("createdAt") val createdAt: String? = null,
 | 
			
		||||
        @JsonProperty("updatedAt") val updatedAt: String? = null,
 | 
			
		||||
        @JsonProperty("conversionDate") val conversionDate: String? = null,
 | 
			
		||||
        @JsonProperty("id") val id: Int? = null,
 | 
			
		||||
        @JsonProperty("available") val available: Boolean? = null,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -99,17 +103,35 @@ class TheFlixToProvider : MainAPI() {
 | 
			
		|||
            val json = parseJson<HomeJson>(scriptText)
 | 
			
		||||
            val homePageProps = json.props.pageProps
 | 
			
		||||
            listOf(
 | 
			
		||||
                Triple(homePageProps.moviesListNewArrivals.docs, homePageProps.moviesListNewArrivals.type, "New Movie arrivals"),
 | 
			
		||||
                Triple(homePageProps.moviesListTrending.docs, homePageProps.moviesListTrending.type, "Trending Movies"),
 | 
			
		||||
                Triple(homePageProps.tvsListTrending.docs, homePageProps.tvsListTrending.type, "Trending TV Series"),
 | 
			
		||||
                Triple(homePageProps.tvsListNewEpisodes.docs, homePageProps.tvsListNewEpisodes.type, "New Episodes")
 | 
			
		||||
                Triple(
 | 
			
		||||
                    homePageProps.moviesListNewArrivals.docs,
 | 
			
		||||
                    homePageProps.moviesListNewArrivals.type,
 | 
			
		||||
                    "New Movie arrivals"
 | 
			
		||||
                ),
 | 
			
		||||
                Triple(
 | 
			
		||||
                    homePageProps.moviesListTrending.docs,
 | 
			
		||||
                    homePageProps.moviesListTrending.type,
 | 
			
		||||
                    "Trending Movies"
 | 
			
		||||
                ),
 | 
			
		||||
                Triple(
 | 
			
		||||
                    homePageProps.tvsListTrending.docs,
 | 
			
		||||
                    homePageProps.tvsListTrending.type,
 | 
			
		||||
                    "Trending TV Series"
 | 
			
		||||
                ),
 | 
			
		||||
                Triple(
 | 
			
		||||
                    homePageProps.tvsListNewEpisodes.docs,
 | 
			
		||||
                    homePageProps.tvsListNewEpisodes.type,
 | 
			
		||||
                    "New Episodes"
 | 
			
		||||
                )
 | 
			
		||||
            ).map { (docs, type, homename) ->
 | 
			
		||||
                val home = docs.map { info ->
 | 
			
		||||
                    val title = info.name
 | 
			
		||||
                    val poster = info.posterUrl
 | 
			
		||||
                    val typeinfo = if (type?.contains("TV") == true) TvType.TvSeries else TvType.Movie
 | 
			
		||||
                    val link = if (typeinfo == TvType.Movie) "$mainUrl/movie/${info.id}-${cleanTitle(title)}"
 | 
			
		||||
                    else "$mainUrl/tv-show/${info.id}-${cleanTitle(title)}/season-1/episode-1"
 | 
			
		||||
                    val typeinfo =
 | 
			
		||||
                        if (type?.contains("TV") == true) TvType.TvSeries else TvType.Movie
 | 
			
		||||
                    val link =
 | 
			
		||||
                        if (typeinfo == TvType.Movie) "$mainUrl/movie/${info.id}-${cleanTitle(title)}"
 | 
			
		||||
                        else "$mainUrl/tv-show/${info.id}-${cleanTitle(title)}/season-1/episode-1"
 | 
			
		||||
                    TvSeriesSearchResponse(
 | 
			
		||||
                        title,
 | 
			
		||||
                        link,
 | 
			
		||||
| 
						 | 
				
			
			@ -129,25 +151,25 @@ class TheFlixToProvider : MainAPI() {
 | 
			
		|||
        return HomePageResponse(items)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    data class SearchJson (
 | 
			
		||||
        @JsonProperty("props"         ) val props         : SearchProps         = SearchProps(),
 | 
			
		||||
    data class SearchJson(
 | 
			
		||||
        @JsonProperty("props") val props: SearchProps = SearchProps(),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class SearchProps (
 | 
			
		||||
        @JsonProperty("pageProps" ) val pageProps : SearchPageProps = SearchPageProps(),
 | 
			
		||||
    data class SearchProps(
 | 
			
		||||
        @JsonProperty("pageProps") val pageProps: SearchPageProps = SearchPageProps(),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class SearchPageProps (
 | 
			
		||||
        @JsonProperty("mainList"            ) val mainList            : SearchMainList             = SearchMainList(),
 | 
			
		||||
    data class SearchPageProps(
 | 
			
		||||
        @JsonProperty("mainList") val mainList: SearchMainList = SearchMainList(),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class SearchMainList (
 | 
			
		||||
        @JsonProperty("docs"  ) val docs  : ArrayList<Docs> = arrayListOf(),
 | 
			
		||||
        @JsonProperty("total" ) val total : Int?            = null,
 | 
			
		||||
        @JsonProperty("page"  ) val page  : Int?            = null,
 | 
			
		||||
        @JsonProperty("limit" ) val limit : Int?            = null,
 | 
			
		||||
        @JsonProperty("pages" ) val pages : Int?            = null,
 | 
			
		||||
        @JsonProperty("type"  ) val type  : String?         = null,
 | 
			
		||||
    data class SearchMainList(
 | 
			
		||||
        @JsonProperty("docs") val docs: ArrayList<Docs> = arrayListOf(),
 | 
			
		||||
        @JsonProperty("total") val total: Int? = null,
 | 
			
		||||
        @JsonProperty("page") val page: Int? = null,
 | 
			
		||||
        @JsonProperty("limit") val limit: Int? = null,
 | 
			
		||||
        @JsonProperty("pages") val pages: Int? = null,
 | 
			
		||||
        @JsonProperty("type") val type: String? = null,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -168,8 +190,11 @@ class TheFlixToProvider : MainAPI() {
 | 
			
		|||
                    docs.map { info ->
 | 
			
		||||
                        val title = info.name
 | 
			
		||||
                        val poster = info.posterUrl
 | 
			
		||||
                        val typeinfo = if (type?.contains("TV") == true) TvType.TvSeries else TvType.Movie
 | 
			
		||||
                        val link = if (typeinfo == TvType.Movie) "$mainUrl/movie/${info.id}-${cleanTitle(title)}"
 | 
			
		||||
                        val typeinfo =
 | 
			
		||||
                            if (type?.contains("TV") == true) TvType.TvSeries else TvType.Movie
 | 
			
		||||
                        val link = if (typeinfo == TvType.Movie) "$mainUrl/movie/${info.id}-${
 | 
			
		||||
                            cleanTitle(title)
 | 
			
		||||
                        }"
 | 
			
		||||
                        else "$mainUrl/tv-show/${info.id}-${cleanTitle(title)}/season-1/episode-1"
 | 
			
		||||
                        if (typeinfo == TvType.Movie) {
 | 
			
		||||
                            search.add(
 | 
			
		||||
| 
						 | 
				
			
			@ -203,112 +228,151 @@ class TheFlixToProvider : MainAPI() {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    data class LoadMain (
 | 
			
		||||
        @JsonProperty("props") val props : LoadProps = LoadProps(),
 | 
			
		||||
    )
 | 
			
		||||
    data class LoadProps (
 | 
			
		||||
        @JsonProperty("pageProps" ) val pageProps : LoadPageProps = LoadPageProps(),
 | 
			
		||||
    data class LoadMain(
 | 
			
		||||
        @JsonProperty("props") val props: LoadProps = LoadProps(),
 | 
			
		||||
        @JsonProperty("page") var page: String? = null,
 | 
			
		||||
        //@JsonProperty("query") val query: Query? = Query(),
 | 
			
		||||
        @JsonProperty("buildId") val buildId: String? = null,
 | 
			
		||||
        @JsonProperty("runtimeConfig") val runtimeConfig: RuntimeConfig? = RuntimeConfig(),
 | 
			
		||||
        @JsonProperty("isFallback") val isFallback: Boolean? = null,
 | 
			
		||||
        @JsonProperty("customServer") val customServer: Boolean? = null,
 | 
			
		||||
        @JsonProperty("appGip") val appGip: Boolean? = null
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class LoadPageProps (
 | 
			
		||||
        @JsonProperty("selectedTv"          ) val selectedTv          : TheFlixMetadata?          = TheFlixMetadata(),
 | 
			
		||||
        @JsonProperty("movie") val movie               : TheFlixMetadata?               = TheFlixMetadata(),
 | 
			
		||||
        @JsonProperty("videoUrl") val videoUrl            : String?              = null,
 | 
			
		||||
        @JsonProperty("recommendationsList") val recommendationsList : RecommendationsList? = RecommendationsList(),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class Genres (
 | 
			
		||||
        @JsonProperty("name" ) val name : String,
 | 
			
		||||
        @JsonProperty("id"   ) val id   : Int?    = null
 | 
			
		||||
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class Seasons (
 | 
			
		||||
        @JsonProperty("name"             ) val name             : String?             = null,
 | 
			
		||||
        @JsonProperty("numberOfEpisodes" ) val numberOfEpisodes : Int?                = null,
 | 
			
		||||
        @JsonProperty("seasonNumber"     ) val seasonNumber     : Int?                = null,
 | 
			
		||||
        @JsonProperty("overview"         ) val overview         : String?             = null,
 | 
			
		||||
        @JsonProperty("posterUrl"        ) val posterUrl        : String?             = null,
 | 
			
		||||
        @JsonProperty("releaseDate"      ) val releaseDate      : String?             = null,
 | 
			
		||||
        @JsonProperty("createdAt"        ) val createdAt        : String?             = null,
 | 
			
		||||
        @JsonProperty("updatedAt"        ) val updatedAt        : String?             = null,
 | 
			
		||||
        @JsonProperty("id"               ) val id               : Int?                = null,
 | 
			
		||||
        @JsonProperty("episodes"         ) val episodes         : ArrayList<Episodes> = arrayListOf()
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class Episodes (
 | 
			
		||||
        @JsonProperty("episodeNumber" ) val episodeNumber : Int?              = null,
 | 
			
		||||
        @JsonProperty("name"          ) val name          : String?           = null,
 | 
			
		||||
        @JsonProperty("seasonNumber"  ) val seasonNumber  : Int?              = null,
 | 
			
		||||
        @JsonProperty("voteAverage"   ) val voteAverage   : Double?           = null,
 | 
			
		||||
        @JsonProperty("voteCount"     ) val voteCount     : Int?              = null,
 | 
			
		||||
        @JsonProperty("overview"      ) val overview      : String?           = null,
 | 
			
		||||
        @JsonProperty("releaseDate"   ) val releaseDate   : String?           = null,
 | 
			
		||||
        @JsonProperty("createdAt"     ) val createdAt     : String?           = null,
 | 
			
		||||
        @JsonProperty("updatedAt"     ) val updatedAt     : String?           = null,
 | 
			
		||||
        @JsonProperty("id"            ) val id            : Int?              = null,
 | 
			
		||||
        @JsonProperty("videos"        ) val videos        : ArrayList<Videos> = arrayListOf()
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class Videos (
 | 
			
		||||
        @JsonProperty("language" ) val language : String? = null,
 | 
			
		||||
        @JsonProperty("name"     ) val name     : String? = null,
 | 
			
		||||
        @JsonProperty("id"       ) val id       : Int?    = null
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class RecommendationsList (
 | 
			
		||||
        @JsonProperty("docs"  ) val docs  : ArrayList<LoadDocs> = arrayListOf(),
 | 
			
		||||
        @JsonProperty("total" ) val total : Int?            = null,
 | 
			
		||||
        @JsonProperty("page"  ) val page  : Int?            = null,
 | 
			
		||||
        @JsonProperty("limit" ) val limit : Int?            = null,
 | 
			
		||||
        @JsonProperty("pages" ) val pages : Int?            = null,
 | 
			
		||||
        @JsonProperty("type"  ) val type  : String?         = null,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class LoadDocs (
 | 
			
		||||
        @JsonProperty("name"             ) val name             : String           = String(),
 | 
			
		||||
        @JsonProperty("originalLanguage" ) val originalLanguage : String?           = null,
 | 
			
		||||
        @JsonProperty("popularity"       ) val popularity       : Double?           = null,
 | 
			
		||||
        @JsonProperty("runtime"          ) val runtime          : Int?              = null,
 | 
			
		||||
        @JsonProperty("status"           ) val status           : String?           = null,
 | 
			
		||||
        @JsonProperty("voteAverage"      ) val voteAverage      : Double?           = null,
 | 
			
		||||
        @JsonProperty("voteCount"        ) val voteCount        : Int?              = null,
 | 
			
		||||
        @JsonProperty("cast"             ) val cast             : String?           = null,
 | 
			
		||||
        @JsonProperty("director"         ) val director         : String?           = null,
 | 
			
		||||
        @JsonProperty("overview"         ) val overview         : String?           = null,
 | 
			
		||||
        @JsonProperty("posterUrl"        ) val posterUrl        : String?           = null,
 | 
			
		||||
        @JsonProperty("releaseDate"      ) val releaseDate      : String?           = null,
 | 
			
		||||
        @JsonProperty("createdAt"        ) val createdAt        : String?           = null,
 | 
			
		||||
        @JsonProperty("updatedAt"        ) val updatedAt        : String?           = null,
 | 
			
		||||
        @JsonProperty("id"               ) val id               : Int?              = null,
 | 
			
		||||
        @JsonProperty("available"        ) val available        : Boolean?          = null,
 | 
			
		||||
    data class RuntimeConfig(
 | 
			
		||||
        @JsonProperty("AddThisService") val AddThisService: AddThisService? = AddThisService(),
 | 
			
		||||
        //@JsonProperty("Application") val Application: Application? = Application(),
 | 
			
		||||
        //@JsonProperty("Content") val Content: Content? = Content(),
 | 
			
		||||
        //@JsonProperty("GtmService") val GtmService: GtmService? = GtmService(),
 | 
			
		||||
        //@JsonProperty("IptvChannels") val IptvChannels: IptvChannels? = IptvChannels(),
 | 
			
		||||
        //@JsonProperty("Notifications") val Notifications: Notifications? = Notifications(),
 | 
			
		||||
        //@JsonProperty("Payments") val Payments: Payments? = Payments(),
 | 
			
		||||
        //@JsonProperty("Redux") val Redux: Redux? = Redux(),
 | 
			
		||||
        //@JsonProperty("Search") val Search: Search? = Search(),
 | 
			
		||||
        @JsonProperty("Services") val Services: Services? = Services(),
 | 
			
		||||
        //@JsonProperty("Sitemap") val Sitemap: Sitemap? = Sitemap(),
 | 
			
		||||
        //@JsonProperty("Support") val Support: Support? = Support(),
 | 
			
		||||
        @JsonProperty("Videos") val Videos: Videos? = Videos()
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    data class TheFlixMetadata (
 | 
			
		||||
        @JsonProperty("episodeRuntime"   ) val episodeRuntime   : Int?               = null,
 | 
			
		||||
        @JsonProperty("name"             ) val name             : String           = String(),
 | 
			
		||||
        @JsonProperty("originalLanguage" ) val originalLanguage : String?           = null,
 | 
			
		||||
        @JsonProperty("popularity"       ) val popularity       : Double?           = null,
 | 
			
		||||
        @JsonProperty("runtime"          ) val runtime          : Int?              = null,
 | 
			
		||||
        @JsonProperty("numberOfSeasons"  ) val numberOfSeasons  : Int?               = null,
 | 
			
		||||
        @JsonProperty("numberOfEpisodes" ) val numberOfEpisodes : Int?               = null,
 | 
			
		||||
        @JsonProperty("status"           ) val status           : String?           = null,
 | 
			
		||||
        @JsonProperty("voteAverage"      ) val voteAverage      : Double?           = null,
 | 
			
		||||
        @JsonProperty("voteCount"        ) val voteCount        : Int?              = null,
 | 
			
		||||
        @JsonProperty("cast"             ) val cast             : String?           = null,
 | 
			
		||||
        @JsonProperty("director"         ) val director         : String?           = null,
 | 
			
		||||
        @JsonProperty("overview"         ) val overview         : String?           = null,
 | 
			
		||||
        @JsonProperty("posterUrl"        ) val posterUrl        : String?           = null,
 | 
			
		||||
        @JsonProperty("releaseDate"      ) val releaseDate      : String?           = null,
 | 
			
		||||
        @JsonProperty("conversionDate"   ) val conversionDate   : String?           = null,
 | 
			
		||||
        @JsonProperty("createdAt"        ) val createdAt        : String?           = null,
 | 
			
		||||
        @JsonProperty("updatedAt"        ) val updatedAt        : String?           = null,
 | 
			
		||||
        @JsonProperty("id"               ) val id               : Int?              = null,
 | 
			
		||||
        @JsonProperty("available"        ) val available        : Boolean?          = null,
 | 
			
		||||
        @JsonProperty("genres"           ) val genres           : ArrayList<Genres> = arrayListOf(),
 | 
			
		||||
        @JsonProperty("videos"           ) val videos           : ArrayList<Videos> = arrayListOf(),
 | 
			
		||||
        @JsonProperty("seasons"          ) val seasons          : ArrayList<Seasons> = arrayListOf()
 | 
			
		||||
    data class Server(
 | 
			
		||||
        @JsonProperty("Url") var Url: String? = null
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class Services(
 | 
			
		||||
 | 
			
		||||
        @JsonProperty("Server") val Server: Server? = Server(),
 | 
			
		||||
        @JsonProperty("TmdbServer") val TmdbServer: Server? = Server()
 | 
			
		||||
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class AddThisService(
 | 
			
		||||
        @JsonProperty("PublicId") val PublicId: String? = null
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class LoadProps(
 | 
			
		||||
        @JsonProperty("pageProps") val pageProps: LoadPageProps = LoadPageProps(),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class LoadPageProps(
 | 
			
		||||
        @JsonProperty("selectedTv") val selectedTv: TheFlixMetadata? = TheFlixMetadata(),
 | 
			
		||||
        @JsonProperty("movie") val movie: TheFlixMetadata? = TheFlixMetadata(),
 | 
			
		||||
        @JsonProperty("videoUrl") val videoUrl: String? = null,
 | 
			
		||||
        @JsonProperty("recommendationsList") val recommendationsList: RecommendationsList? = RecommendationsList(),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class Genres(
 | 
			
		||||
        @JsonProperty("name") val name: String,
 | 
			
		||||
        @JsonProperty("id") val id: Int? = null
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class Seasons(
 | 
			
		||||
        @JsonProperty("name") val name: String? = null,
 | 
			
		||||
        @JsonProperty("numberOfEpisodes") val numberOfEpisodes: Int? = null,
 | 
			
		||||
        @JsonProperty("seasonNumber") val seasonNumber: Int? = null,
 | 
			
		||||
        @JsonProperty("overview") val overview: String? = null,
 | 
			
		||||
        @JsonProperty("posterUrl") val posterUrl: String? = null,
 | 
			
		||||
        @JsonProperty("releaseDate") val releaseDate: String? = null,
 | 
			
		||||
        @JsonProperty("createdAt") val createdAt: String? = null,
 | 
			
		||||
        @JsonProperty("updatedAt") val updatedAt: String? = null,
 | 
			
		||||
        @JsonProperty("id") val id: Int? = null,
 | 
			
		||||
        @JsonProperty("episodes") val episodes: ArrayList<Episodes> = arrayListOf()
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class Episodes(
 | 
			
		||||
        @JsonProperty("episodeNumber") val episodeNumber: Int? = null,
 | 
			
		||||
        @JsonProperty("name") val name: String? = null,
 | 
			
		||||
        @JsonProperty("seasonNumber") val seasonNumber: Int? = null,
 | 
			
		||||
        @JsonProperty("voteAverage") val voteAverage: Double? = null,
 | 
			
		||||
        @JsonProperty("voteCount") val voteCount: Int? = null,
 | 
			
		||||
        @JsonProperty("overview") val overview: String? = null,
 | 
			
		||||
        @JsonProperty("releaseDate") val releaseDate: String? = null,
 | 
			
		||||
        @JsonProperty("createdAt") val createdAt: String? = null,
 | 
			
		||||
        @JsonProperty("updatedAt") val updatedAt: String? = null,
 | 
			
		||||
        @JsonProperty("id") val id: Int? = null,
 | 
			
		||||
        @JsonProperty("videos") val videos: ArrayList<Videos> = arrayListOf()
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class Videos(
 | 
			
		||||
        @JsonProperty("language") val language: String? = null,
 | 
			
		||||
        @JsonProperty("name") val name: String? = null,
 | 
			
		||||
        @JsonProperty("id") val id: Int? = null
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class RecommendationsList(
 | 
			
		||||
        @JsonProperty("docs") val docs: ArrayList<LoadDocs> = arrayListOf(),
 | 
			
		||||
        @JsonProperty("total") val total: Int? = null,
 | 
			
		||||
        @JsonProperty("page") val page: Int? = null,
 | 
			
		||||
        @JsonProperty("limit") val limit: Int? = null,
 | 
			
		||||
        @JsonProperty("pages") val pages: Int? = null,
 | 
			
		||||
        @JsonProperty("type") val type: String? = null,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    data class LoadDocs(
 | 
			
		||||
        @JsonProperty("name") val name: String = String(),
 | 
			
		||||
        @JsonProperty("originalLanguage") val originalLanguage: String? = null,
 | 
			
		||||
        @JsonProperty("popularity") val popularity: Double? = null,
 | 
			
		||||
        @JsonProperty("runtime") val runtime: Int? = null,
 | 
			
		||||
        @JsonProperty("status") val status: String? = null,
 | 
			
		||||
        @JsonProperty("voteAverage") val voteAverage: Double? = null,
 | 
			
		||||
        @JsonProperty("voteCount") val voteCount: Int? = null,
 | 
			
		||||
        @JsonProperty("cast") val cast: String? = null,
 | 
			
		||||
        @JsonProperty("director") val director: String? = null,
 | 
			
		||||
        @JsonProperty("overview") val overview: String? = null,
 | 
			
		||||
        @JsonProperty("posterUrl") val posterUrl: String? = null,
 | 
			
		||||
        @JsonProperty("releaseDate") val releaseDate: String? = null,
 | 
			
		||||
        @JsonProperty("createdAt") val createdAt: String? = null,
 | 
			
		||||
        @JsonProperty("updatedAt") val updatedAt: String? = null,
 | 
			
		||||
        @JsonProperty("id") val id: Int? = null,
 | 
			
		||||
        @JsonProperty("available") val available: Boolean? = null,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    data class TheFlixMetadata(
 | 
			
		||||
        @JsonProperty("episodeRuntime") val episodeRuntime: Int? = null,
 | 
			
		||||
        @JsonProperty("name") val name: String = String(),
 | 
			
		||||
        @JsonProperty("originalLanguage") val originalLanguage: String? = null,
 | 
			
		||||
        @JsonProperty("popularity") val popularity: Double? = null,
 | 
			
		||||
        @JsonProperty("runtime") val runtime: Int? = null,
 | 
			
		||||
        @JsonProperty("numberOfSeasons") val numberOfSeasons: Int? = null,
 | 
			
		||||
        @JsonProperty("numberOfEpisodes") val numberOfEpisodes: Int? = null,
 | 
			
		||||
        @JsonProperty("status") val status: String? = null,
 | 
			
		||||
        @JsonProperty("voteAverage") val voteAverage: Double? = null,
 | 
			
		||||
        @JsonProperty("voteCount") val voteCount: Int? = null,
 | 
			
		||||
        @JsonProperty("cast") val cast: String? = null,
 | 
			
		||||
        @JsonProperty("director") val director: String? = null,
 | 
			
		||||
        @JsonProperty("overview") val overview: String? = null,
 | 
			
		||||
        @JsonProperty("posterUrl") val posterUrl: String? = null,
 | 
			
		||||
        @JsonProperty("releaseDate") val releaseDate: String? = null,
 | 
			
		||||
        @JsonProperty("conversionDate") val conversionDate: String? = null,
 | 
			
		||||
        @JsonProperty("createdAt") val createdAt: String? = null,
 | 
			
		||||
        @JsonProperty("updatedAt") val updatedAt: String? = null,
 | 
			
		||||
        @JsonProperty("id") val id: Int? = null,
 | 
			
		||||
        @JsonProperty("available") val available: Boolean? = null,
 | 
			
		||||
        @JsonProperty("genres") val genres: ArrayList<Genres> = arrayListOf(),
 | 
			
		||||
        @JsonProperty("videos") val videos: ArrayList<Videos> = arrayListOf(),
 | 
			
		||||
        @JsonProperty("seasons") val seasons: ArrayList<Seasons> = arrayListOf()
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    private fun cleanTitle(title: String): String {
 | 
			
		||||
| 
						 | 
				
			
			@ -322,19 +386,62 @@ class TheFlixToProvider : MainAPI() {
 | 
			
		|||
                .replace("'", "-")).lowercase()
 | 
			
		||||
        }
 | 
			
		||||
        return (title
 | 
			
		||||
            .replace(" - ","-")
 | 
			
		||||
            .replace(" ","-")
 | 
			
		||||
            .replace("-&","")
 | 
			
		||||
            .replace("/","-")
 | 
			
		||||
            .replace(Regex("(:|-&|\\.)"),"")
 | 
			
		||||
            .replace("'","-")).lowercase()
 | 
			
		||||
            .replace(" - ", "-")
 | 
			
		||||
            .replace(" ", "-")
 | 
			
		||||
            .replace("-&", "")
 | 
			
		||||
            .replace("/", "-")
 | 
			
		||||
            .replace(Regex("(:|-&|\\.)"), "")
 | 
			
		||||
            .replace("'", "-")).lowercase()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private suspend fun getLoadMan(url: String): LoadMain {
 | 
			
		||||
        val og = app.get(url, cookies = latestCookies)
 | 
			
		||||
        val soup = og.document
 | 
			
		||||
        val script = soup.selectFirst("script[type=application/json]").data()
 | 
			
		||||
        return parseJson(script)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // I legit cant figure this out
 | 
			
		||||
    private suspend fun getLoadMainRetry(url: String): LoadMain {
 | 
			
		||||
        val first = getLoadMan(url)
 | 
			
		||||
        val notFound = "/404"
 | 
			
		||||
        if (first.page == notFound) {
 | 
			
		||||
            first.runtimeConfig?.Services?.TmdbServer?.Url?.let { authUrl ->
 | 
			
		||||
                val optionsUrl = "$authUrl/authorization/session/continue?contentUsageType=Viewing"
 | 
			
		||||
                val options = app.options(
 | 
			
		||||
                    optionsUrl,
 | 
			
		||||
                    headers = mapOf(
 | 
			
		||||
                        "User-Agent" to USER_AGENT,
 | 
			
		||||
                        "Access-Control-Request-Method" to "POST",
 | 
			
		||||
                        "Access-Control-Request-Headers" to "content-type",
 | 
			
		||||
                        "Origin" to url,
 | 
			
		||||
                        "Referer" to mainUrl,
 | 
			
		||||
                    )
 | 
			
		||||
                )
 | 
			
		||||
                //{"affiliateCode":"","pathname":"/movie/696806-the-adam-project"}
 | 
			
		||||
                val data = mapOf("affiliateCode" to "", "pathname" to url.removePrefix(mainUrl))
 | 
			
		||||
                val resp = app.post(optionsUrl, headers = mapOf(
 | 
			
		||||
                    "User-Agent" to USER_AGENT,
 | 
			
		||||
                    "Content-Type" to "application/json;charset=UTF-8",
 | 
			
		||||
                    "Accept" to "application/json, text/plain, */*",
 | 
			
		||||
                    "Origin" to url,
 | 
			
		||||
                    "Referer" to mainUrl,
 | 
			
		||||
                ), data = data)
 | 
			
		||||
 | 
			
		||||
                latestCookies = resp.cookies
 | 
			
		||||
                val newData = getLoadMan(url)
 | 
			
		||||
                if (newData.page == notFound) {
 | 
			
		||||
                    throw ErrorLoadingException("404 Not found")
 | 
			
		||||
                }
 | 
			
		||||
                return newData
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return first
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override suspend fun load(url: String): LoadResponse? {
 | 
			
		||||
        val soup = app.get(url).document
 | 
			
		||||
        val scripttext = soup.selectFirst("script[type=application/json]").data()
 | 
			
		||||
        val tvtype = if (url.contains("movie")) TvType.Movie else TvType.TvSeries
 | 
			
		||||
        val json = parseJson<LoadMain>(scripttext)
 | 
			
		||||
        val json = getLoadMainRetry(url)
 | 
			
		||||
        val episodes = ArrayList<TvSeriesEpisode>()
 | 
			
		||||
        val isMovie = tvtype == TvType.Movie
 | 
			
		||||
        val pageMain = json.props.pageProps
 | 
			
		||||
| 
						 | 
				
			
			@ -343,7 +450,7 @@ class TheFlixToProvider : MainAPI() {
 | 
			
		|||
 | 
			
		||||
        val available = metadata?.available
 | 
			
		||||
 | 
			
		||||
        val comingsoon = !available!!
 | 
			
		||||
        val comingsoon = available!!
 | 
			
		||||
 | 
			
		||||
        val movieId = metadata.id
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -385,7 +492,7 @@ class TheFlixToProvider : MainAPI() {
 | 
			
		|||
 | 
			
		||||
        val tags = metadata.genres.map { it.name }
 | 
			
		||||
 | 
			
		||||
        val recommendationsitem =  pageMain.recommendationsList?.docs?.map { loadDocs ->
 | 
			
		||||
        val recommendationsitem = pageMain.recommendationsList?.docs?.map { loadDocs ->
 | 
			
		||||
            val title = loadDocs.name
 | 
			
		||||
            val posterrec = loadDocs.posterUrl
 | 
			
		||||
            val link = if (isMovie) "$mainUrl/movie/${loadDocs.id}-${cleanTitle(title)}"
 | 
			
		||||
| 
						 | 
				
			
			@ -443,9 +550,7 @@ class TheFlixToProvider : MainAPI() {
 | 
			
		|||
        subtitleCallback: (SubtitleFile) -> Unit,
 | 
			
		||||
        callback: (ExtractorLink) -> Unit
 | 
			
		||||
    ): Boolean {
 | 
			
		||||
        val doc = app.get(data).document
 | 
			
		||||
        val script = doc.selectFirst("script[type=application/json]").data()
 | 
			
		||||
        val json = parseJson<LoadMain>(script)
 | 
			
		||||
        val json = getLoadMainRetry(data)
 | 
			
		||||
        val extractedLink = json.props.pageProps.videoUrl
 | 
			
		||||
        val qualityReg = Regex("(\\d+p)")
 | 
			
		||||
        if (extractedLink != null) {
 | 
			
		||||
| 
						 | 
				
			
			@ -458,7 +563,8 @@ class TheFlixToProvider : MainAPI() {
 | 
			
		|||
                    "",
 | 
			
		||||
                    getQualityFromName(quality),
 | 
			
		||||
                    false
 | 
			
		||||
                ))
 | 
			
		||||
                )
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
        return true
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -226,6 +226,24 @@ fun putRequestCreator(
 | 
			
		|||
        .build()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fun optionsRequestCreator(
 | 
			
		||||
    url: String,
 | 
			
		||||
    headers: Map<String, String>,
 | 
			
		||||
    referer: String?,
 | 
			
		||||
    params: Map<String, String?>,
 | 
			
		||||
    cookies: Map<String, String>,
 | 
			
		||||
    data: Map<String, String?>,
 | 
			
		||||
    cacheTime: Int,
 | 
			
		||||
    cacheUnit: TimeUnit
 | 
			
		||||
): Request {
 | 
			
		||||
    return Request.Builder()
 | 
			
		||||
        .url(addParamsToUrl(url, params))
 | 
			
		||||
        .cacheControl(getCache(cacheTime, cacheUnit))
 | 
			
		||||
        .headers(getHeaders(headers, referer, cookies))
 | 
			
		||||
        .method("OPTIONS", getData(data))
 | 
			
		||||
        .build()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// https://stackoverflow.com/a/59322754
 | 
			
		||||
// Issues with Akwam otherwise
 | 
			
		||||
fun OkHttpClient.Builder.ignoreAllSSLErrors(): OkHttpClient.Builder {
 | 
			
		||||
| 
						 | 
				
			
			@ -370,6 +388,40 @@ open class Requests {
 | 
			
		|||
        return AppResponse(response)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    suspend fun options(
 | 
			
		||||
        url: String,
 | 
			
		||||
        headers: Map<String, String> = mapOf(),
 | 
			
		||||
        referer: String? = null,
 | 
			
		||||
        params: Map<String, String> = mapOf(),
 | 
			
		||||
        cookies: Map<String, String> = mapOf(),
 | 
			
		||||
        data: Map<String, String?> = DEFAULT_DATA,
 | 
			
		||||
        allowRedirects: Boolean = true,
 | 
			
		||||
        cacheTime: Int = DEFAULT_TIME,
 | 
			
		||||
        cacheUnit: TimeUnit = DEFAULT_TIME_UNIT,
 | 
			
		||||
        timeout: Long = 0L
 | 
			
		||||
    ): AppResponse {
 | 
			
		||||
        Log.i("OPTIONS", url)
 | 
			
		||||
        val client = baseClient
 | 
			
		||||
            .newBuilder()
 | 
			
		||||
            .followRedirects(allowRedirects)
 | 
			
		||||
            .followSslRedirects(allowRedirects)
 | 
			
		||||
            .callTimeout(timeout, TimeUnit.SECONDS)
 | 
			
		||||
            .build()
 | 
			
		||||
        val request =
 | 
			
		||||
            optionsRequestCreator(
 | 
			
		||||
                url,
 | 
			
		||||
                headers,
 | 
			
		||||
                referer,
 | 
			
		||||
                params,
 | 
			
		||||
                cookies,
 | 
			
		||||
                data,
 | 
			
		||||
                cacheTime,
 | 
			
		||||
                cacheUnit
 | 
			
		||||
            )
 | 
			
		||||
        val response = client.newCall(request).await()
 | 
			
		||||
        return AppResponse(response)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    suspend fun put(
 | 
			
		||||
        url: String,
 | 
			
		||||
        headers: Map<String, String> = mapOf(),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue