fix(fr/franime): Removed myvi, added vido and vk players (#2430)
This commit is contained in:
@ -8,13 +8,14 @@ ext {
|
|||||||
extName = 'FrAnime'
|
extName = 'FrAnime'
|
||||||
pkgNameSuffix = 'fr.franime'
|
pkgNameSuffix = 'fr.franime'
|
||||||
extClass = '.FrAnime'
|
extClass = '.FrAnime'
|
||||||
extVersionCode = 8
|
extVersionCode = 9
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
containsNsfw = true
|
containsNsfw = true
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-mytv-extractor'))
|
implementation(project(':lib-vido-extractor'))
|
||||||
|
implementation(project(':lib-vk-extractor'))
|
||||||
implementation(project(':lib-sendvid-extractor'))
|
implementation(project(':lib-sendvid-extractor'))
|
||||||
implementation(project(':lib-sibnet-extractor'))
|
implementation(project(':lib-sibnet-extractor'))
|
||||||
}
|
}
|
||||||
|
@ -7,10 +7,14 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
|
|||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.mytvextractor.MytvExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.sendvidextractor.SendvidExtractor
|
import eu.kanade.tachiyomi.lib.sendvidextractor.SendvidExtractor
|
||||||
import eu.kanade.tachiyomi.lib.sibnetextractor.SibnetExtractor
|
import eu.kanade.tachiyomi.lib.sibnetextractor.SibnetExtractor
|
||||||
|
import eu.kanade.tachiyomi.lib.vkextractor.VkExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.async
|
||||||
|
import kotlinx.coroutines.awaitAll
|
||||||
|
import kotlinx.coroutines.runBlocking
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
@ -126,22 +130,26 @@ class FrAnime : AnimeHttpSource() {
|
|||||||
|
|
||||||
val players = if (episodeLang == "vo") episodeData.languages.vo.players else episodeData.languages.vf.players
|
val players = if (episodeLang == "vo") episodeData.languages.vo.players else episodeData.languages.vf.players
|
||||||
|
|
||||||
val videos = players.flatMapIndexed { index, playerName ->
|
val videos = players.parallelCatchingFlatMapIndexed { index, playerName ->
|
||||||
val apiUrl = "$videoBaseUrl/$episodeLang/$index"
|
val apiUrl = "$videoBaseUrl/$episodeLang/$index"
|
||||||
val playerUrl = client.newCall(GET(apiUrl, headers)).execute().body.string()
|
val playerUrl = client.newCall(GET(apiUrl, headers)).execute().body.string()
|
||||||
when (playerName) {
|
when (playerName) {
|
||||||
"franime_myvi" -> listOf(Video(playerUrl, "FRAnime", playerUrl))
|
"vido" -> listOf(Video(playerUrl, "FRAnime (Vido)", playerUrl))
|
||||||
"myvi" -> MytvExtractor(client).videosFromUrl(playerUrl)
|
|
||||||
"sendvid" -> SendvidExtractor(client, headers).videosFromUrl(playerUrl)
|
"sendvid" -> SendvidExtractor(client, headers).videosFromUrl(playerUrl)
|
||||||
"sibnet" -> SibnetExtractor(client).videosFromUrl(playerUrl)
|
"sibnet" -> SibnetExtractor(client).videosFromUrl(playerUrl)
|
||||||
|
"vk" -> VkExtractor(client, headers).videosFromUrl(playerUrl)
|
||||||
else -> emptyList()
|
else -> emptyList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Observable.just(videos)
|
return Observable.just(videos)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ============================= Utilities ==============================
|
// ============================= Utilities ==============================
|
||||||
|
private inline fun <A, B> Iterable<A>.parallelCatchingFlatMapIndexed(crossinline f: suspend (Int, A) -> Iterable<B>): List<B> =
|
||||||
|
runBlocking {
|
||||||
|
mapIndexed { index, it -> async(Dispatchers.Default) { runCatching { f(index, it) }.getOrElse { emptyList() } } }.awaitAll().flatten()
|
||||||
|
}
|
||||||
|
|
||||||
private fun pagesToAnimesPage(pages: List<Anime>, page: Int): Observable<AnimesPage> {
|
private fun pagesToAnimesPage(pages: List<Anime>, page: Int): Observable<AnimesPage> {
|
||||||
val chunks = pages.chunked(50)
|
val chunks = pages.chunked(50)
|
||||||
val hasNextPage = chunks.size > page
|
val hasNextPage = chunks.size > page
|
||||||
|
@ -38,8 +38,8 @@ private object BigIntegerSerializer : KSerializer<BigInteger> {
|
|||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class Anime(
|
data class Anime(
|
||||||
@SerialName("themes") val genres: Array<String>,
|
@SerialName("themes") val genres: List<String>,
|
||||||
@SerialName("saisons") val seasons: Array<Season>,
|
@SerialName("saisons") val seasons: List<Season>,
|
||||||
@SerialName("_id") val uid: String?,
|
@SerialName("_id") val uid: String?,
|
||||||
@SerialName("id") val id: BigIntegerJson,
|
@SerialName("id") val id: BigIntegerJson,
|
||||||
@SerialName("source_url") val sourceUrl: String,
|
@SerialName("source_url") val sourceUrl: String,
|
||||||
@ -63,7 +63,7 @@ data class Anime(
|
|||||||
@Serializable
|
@Serializable
|
||||||
data class Season(
|
data class Season(
|
||||||
@SerialName("title") val title: String,
|
@SerialName("title") val title: String,
|
||||||
@SerialName("episodes") val episodes: Array<Episode>,
|
@SerialName("episodes") val episodes: List<Episode>,
|
||||||
)
|
)
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
@ -80,7 +80,7 @@ data class EpisodeLanguages(
|
|||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class EpisodeLanguage(
|
data class EpisodeLanguage(
|
||||||
@SerialName("lecteurs") val players: Array<String>,
|
@SerialName("lecteurs") val players: List<String>,
|
||||||
)
|
)
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
|
Reference in New Issue
Block a user