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.lagradost.cloudstream3.animeproviders.*
|
||||
import com.lagradost.cloudstream3.metaproviders.CrossTmdbProvider
|
||||
import com.lagradost.cloudstream3.metaproviders.MultiAnimeProvider
|
||||
import com.lagradost.cloudstream3.movieproviders.*
|
||||
import com.lagradost.cloudstream3.syncproviders.OAuth2API.Companion.aniListApi
|
||||
import com.lagradost.cloudstream3.syncproviders.OAuth2API.Companion.malApi
|
||||
|
@ -103,6 +104,7 @@ object APIHolder {
|
|||
DubbedAnimeProvider(),
|
||||
MonoschinosProvider(),
|
||||
KawaiifuProvider(), // disabled due to cloudflare
|
||||
//MultiAnimeProvider(),
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -268,7 +270,8 @@ object APIHolder {
|
|||
} else {
|
||||
// Filter API depending on preferred media type
|
||||
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 mediaTypeList = when (currentPrefMedia) {
|
||||
2 -> listEnumAnime
|
||||
|
@ -741,7 +744,7 @@ interface LoadResponse {
|
|||
this.syncData[aniListIdPrefix] = (id ?: return).toString()
|
||||
}
|
||||
|
||||
fun LoadResponse.addImdbUrl(url : String?) {
|
||||
fun LoadResponse.addImdbUrl(url: String?) {
|
||||
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? {
|
||||
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
|
||||
|
||||
return SyncAPI.SyncResult(
|
||||
|
@ -95,7 +96,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI {
|
|||
(it.timeUntilAiring ?: return@let null) + unixTime
|
||||
)
|
||||
},
|
||||
genres = season.genres,
|
||||
title = season.title?.userPreferred,
|
||||
synonyms = season.synonyms,
|
||||
isAdult = season.isAdult,
|
||||
totalEpisodes = season.episodes,
|
||||
|
@ -333,6 +334,12 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI {
|
|||
medium
|
||||
color
|
||||
}
|
||||
title {
|
||||
romaji
|
||||
english
|
||||
native
|
||||
userPreferred
|
||||
}
|
||||
duration
|
||||
episodes
|
||||
genres
|
||||
|
@ -750,6 +757,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI {
|
|||
|
||||
data class SeasonMedia(
|
||||
@JsonProperty("id") val id: Int?,
|
||||
@JsonProperty("title") val title: MediaTitle?,
|
||||
@JsonProperty("idMal") val idMal: Int?,
|
||||
@JsonProperty("format") val format: String?,
|
||||
@JsonProperty("nextAiringEpisode") val nextAiringEpisode: SeasonNextAiringEpisode?,
|
||||
|
@ -871,6 +879,13 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI {
|
|||
@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(
|
||||
@JsonProperty("id") val id: Int,
|
||||
@JsonProperty("format") val format: String?,
|
||||
|
|
Loading…
Reference in a new issue