forked from recloudstream/cloudstream
		
	multianime (not done)
This commit is contained in:
		
							parent
							
								
									3db8864e7c
								
							
						
					
					
						commit
						ca8b1293bb
					
				
					 3 changed files with 66 additions and 4 deletions
				
			
		|  | @ -12,6 +12,7 @@ import com.fasterxml.jackson.databind.json.JsonMapper | ||||||
| import com.fasterxml.jackson.module.kotlin.KotlinModule | import com.fasterxml.jackson.module.kotlin.KotlinModule | ||||||
| import com.lagradost.cloudstream3.animeproviders.* | import com.lagradost.cloudstream3.animeproviders.* | ||||||
| import com.lagradost.cloudstream3.metaproviders.CrossTmdbProvider | import com.lagradost.cloudstream3.metaproviders.CrossTmdbProvider | ||||||
|  | import com.lagradost.cloudstream3.metaproviders.MultiAnimeProvider | ||||||
| import com.lagradost.cloudstream3.movieproviders.* | import com.lagradost.cloudstream3.movieproviders.* | ||||||
| import com.lagradost.cloudstream3.syncproviders.OAuth2API.Companion.aniListApi | import com.lagradost.cloudstream3.syncproviders.OAuth2API.Companion.aniListApi | ||||||
| import com.lagradost.cloudstream3.syncproviders.OAuth2API.Companion.malApi | import com.lagradost.cloudstream3.syncproviders.OAuth2API.Companion.malApi | ||||||
|  | @ -103,6 +104,7 @@ object APIHolder { | ||||||
|             DubbedAnimeProvider(), |             DubbedAnimeProvider(), | ||||||
|             MonoschinosProvider(), |             MonoschinosProvider(), | ||||||
|             KawaiifuProvider(), // disabled due to cloudflare |             KawaiifuProvider(), // disabled due to cloudflare | ||||||
|  |             //MultiAnimeProvider(), | ||||||
|         ) |         ) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -268,7 +270,8 @@ object APIHolder { | ||||||
|         } else { |         } else { | ||||||
|             // Filter API depending on preferred media type |             // Filter API depending on preferred media type | ||||||
|             val listEnumAnime = listOf(TvType.Anime, TvType.AnimeMovie, TvType.OVA) |             val listEnumAnime = listOf(TvType.Anime, TvType.AnimeMovie, TvType.OVA) | ||||||
|             val listEnumMovieTv = listOf(TvType.Movie, TvType.TvSeries, TvType.Cartoon, TvType.AsianDrama) |             val listEnumMovieTv = | ||||||
|  |                 listOf(TvType.Movie, TvType.TvSeries, TvType.Cartoon, TvType.AsianDrama) | ||||||
|             val listEnumDoc = listOf(TvType.Documentary) |             val listEnumDoc = listOf(TvType.Documentary) | ||||||
|             val mediaTypeList = when (currentPrefMedia) { |             val mediaTypeList = when (currentPrefMedia) { | ||||||
|                 2 -> listEnumAnime |                 2 -> listEnumAnime | ||||||
|  | @ -741,7 +744,7 @@ interface LoadResponse { | ||||||
|             this.syncData[aniListIdPrefix] = (id ?: return).toString() |             this.syncData[aniListIdPrefix] = (id ?: return).toString() | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         fun LoadResponse.addImdbUrl(url : String?) { |         fun LoadResponse.addImdbUrl(url: String?) { | ||||||
|             addImdbId(imdbUrlToIdNullable(url)) |             addImdbId(imdbUrlToIdNullable(url)) | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,44 @@ | ||||||
|  | package com.lagradost.cloudstream3.metaproviders | ||||||
|  | 
 | ||||||
|  | import com.lagradost.cloudstream3.* | ||||||
|  | import com.lagradost.cloudstream3.LoadResponse.Companion.addAniListId | ||||||
|  | import com.lagradost.cloudstream3.syncproviders.OAuth2API | ||||||
|  | 
 | ||||||
|  | class MultiAnimeProvider : MainAPI() { | ||||||
|  |     override var name = "MultiAnime" | ||||||
|  |     override val lang = "en" | ||||||
|  |     override val usesWebView = true | ||||||
|  |     override val supportedTypes = setOf(TvType.Anime) | ||||||
|  |     private val syncApi = OAuth2API.aniListApi | ||||||
|  | 
 | ||||||
|  |     private val validApis by lazy { | ||||||
|  |         APIHolder.apis.filter { | ||||||
|  |             it.lang == this.lang && it::class.java != this::class.java && it.supportedTypes.contains( | ||||||
|  |                 TvType.Anime | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private fun filterName(name: String): String { | ||||||
|  |         return Regex("""[^a-zA-Z0-9-]""").replace(name, "") | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     override suspend fun search(query: String): List<SearchResponse>? { | ||||||
|  |         return syncApi.search(query)?.map { | ||||||
|  |             AnimeSearchResponse(it.name, it.url, this.name, TvType.Anime, it.posterUrl) | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     override suspend fun load(url: String): LoadResponse? { | ||||||
|  |         return syncApi.getResult(url)?.let { res -> | ||||||
|  |             newAnimeLoadResponse(res.title!!, url, TvType.Anime) { | ||||||
|  |                 posterUrl = res.posterUrl | ||||||
|  |                 plot = res.synopsis | ||||||
|  |                 tags = res.genres | ||||||
|  |                 rating = res.publicScore | ||||||
|  |                 trailerUrl = res.trailerUrl | ||||||
|  |                 addAniListId(res.id.toIntOrNull()) | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -84,7 +84,8 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     override suspend fun getResult(id: String): SyncAPI.SyncResult? { |     override suspend fun getResult(id: String): SyncAPI.SyncResult? { | ||||||
|         val internalId = id.toIntOrNull() ?: return null |         val internalId = (Regex("anilist\\.co/anime/(\\d*)").find(id)?.groupValues?.getOrNull(1) | ||||||
|  |             ?: id).toIntOrNull() ?: return null | ||||||
|         val season = getSeason(internalId).data.Media |         val season = getSeason(internalId).data.Media | ||||||
| 
 | 
 | ||||||
|         return SyncAPI.SyncResult( |         return SyncAPI.SyncResult( | ||||||
|  | @ -95,7 +96,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { | ||||||
|                     (it.timeUntilAiring ?: return@let null) + unixTime |                     (it.timeUntilAiring ?: return@let null) + unixTime | ||||||
|                 ) |                 ) | ||||||
|             }, |             }, | ||||||
|             genres = season.genres, |             title = season.title?.userPreferred, | ||||||
|             synonyms = season.synonyms, |             synonyms = season.synonyms, | ||||||
|             isAdult = season.isAdult, |             isAdult = season.isAdult, | ||||||
|             totalEpisodes = season.episodes, |             totalEpisodes = season.episodes, | ||||||
|  | @ -333,6 +334,12 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { | ||||||
|                            medium |                            medium | ||||||
|                            color |                            color | ||||||
|                        } |                        } | ||||||
|  |                        title { | ||||||
|  |                             romaji | ||||||
|  |                             english | ||||||
|  |                             native | ||||||
|  |                             userPreferred | ||||||
|  |                        } | ||||||
|                        duration |                        duration | ||||||
|                        episodes |                        episodes | ||||||
|                        genres |                        genres | ||||||
|  | @ -750,6 +757,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { | ||||||
| 
 | 
 | ||||||
|     data class SeasonMedia( |     data class SeasonMedia( | ||||||
|         @JsonProperty("id") val id: Int?, |         @JsonProperty("id") val id: Int?, | ||||||
|  |         @JsonProperty("title") val title: MediaTitle?, | ||||||
|         @JsonProperty("idMal") val idMal: Int?, |         @JsonProperty("idMal") val idMal: Int?, | ||||||
|         @JsonProperty("format") val format: String?, |         @JsonProperty("format") val format: String?, | ||||||
|         @JsonProperty("nextAiringEpisode") val nextAiringEpisode: SeasonNextAiringEpisode?, |         @JsonProperty("nextAiringEpisode") val nextAiringEpisode: SeasonNextAiringEpisode?, | ||||||
|  | @ -871,6 +879,13 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { | ||||||
|         @JsonProperty("anime") val anime: AniListFavoritesMediaConnection, |         @JsonProperty("anime") val anime: AniListFavoritesMediaConnection, | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|  |     data class MediaTitle( | ||||||
|  |         @JsonProperty("romaji") val romaji: String?, | ||||||
|  |         @JsonProperty("english") val english: String?, | ||||||
|  |         @JsonProperty("native") val native: String?, | ||||||
|  |         @JsonProperty("userPreferred") val userPreferred: String?, | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|     data class SeasonNode( |     data class SeasonNode( | ||||||
|         @JsonProperty("id") val id: Int, |         @JsonProperty("id") val id: Int, | ||||||
|         @JsonProperty("format") val format: String?, |         @JsonProperty("format") val format: String?, | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue