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(), | ||||
|  |  | |||
|  | @ -237,7 +237,7 @@ | |||
|     "TheFlixToProvider": { | ||||
|         "name": "TheFlix.to", | ||||
|         "url": "https://theflix.to", | ||||
|         "status": 1 | ||||
|         "status": 0 | ||||
|     }, | ||||
|     "TwoEmbedProvider": { | ||||
|         "name": "2Embed", | ||||
|  |  | |||
|  | @ -237,7 +237,7 @@ | |||
|     "TheFlixToProvider": { | ||||
|         "name": "TheFlix.to", | ||||
|         "url": "https://theflix.to", | ||||
|         "status": 1 | ||||
|         "status": 0 | ||||
|     }, | ||||
|     "TwoEmbedProvider": { | ||||
|         "name": "2Embed", | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue