From fbac669189212f4665908a1bf6f03d0068308e64 Mon Sep 17 00:00:00 2001 From: hollow <35398794+hollowshiroyuki@users.noreply.github.com> Date: Sat, 28 Oct 2023 01:12:50 +0100 Subject: [PATCH] Fix: Removed myvi, added vido and vk players --- src/fr/franime/build.gradle | 5 +++-- .../animeextension/fr/franime/FrAnime.kt | 18 +++++++++++++----- .../fr/franime/dto/FrAnimeDto.kt | 8 ++++---- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/fr/franime/build.gradle b/src/fr/franime/build.gradle index 7528ec30ea..5c8f12d1b5 100644 --- a/src/fr/franime/build.gradle +++ b/src/fr/franime/build.gradle @@ -8,13 +8,14 @@ ext { extName = 'FrAnime' pkgNameSuffix = 'fr.franime' extClass = '.FrAnime' - extVersionCode = 8 + extVersionCode = 9 libVersion = '13' containsNsfw = true } dependencies { - implementation(project(':lib-mytv-extractor')) + implementation(project(':lib-vido-extractor')) + implementation(project(':lib-vk-extractor')) implementation(project(':lib-sendvid-extractor')) implementation(project(':lib-sibnet-extractor')) } diff --git a/src/fr/franime/src/eu/kanade/tachiyomi/animeextension/fr/franime/FrAnime.kt b/src/fr/franime/src/eu/kanade/tachiyomi/animeextension/fr/franime/FrAnime.kt index 98be16c116..150e3cc8cc 100644 --- a/src/fr/franime/src/eu/kanade/tachiyomi/animeextension/fr/franime/FrAnime.kt +++ b/src/fr/franime/src/eu/kanade/tachiyomi/animeextension/fr/franime/FrAnime.kt @@ -7,10 +7,14 @@ import eu.kanade.tachiyomi.animesource.model.SAnime import eu.kanade.tachiyomi.animesource.model.SEpisode import eu.kanade.tachiyomi.animesource.model.Video 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.sibnetextractor.SibnetExtractor +import eu.kanade.tachiyomi.lib.vkextractor.VkExtractor 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 okhttp3.HttpUrl.Companion.toHttpUrl 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 videos = players.flatMapIndexed { index, playerName -> + val videos = players.parallelCatchingFlatMapIndexed { index, playerName -> val apiUrl = "$videoBaseUrl/$episodeLang/$index" val playerUrl = client.newCall(GET(apiUrl, headers)).execute().body.string() when (playerName) { - "franime_myvi" -> listOf(Video(playerUrl, "FRAnime", playerUrl)) - "myvi" -> MytvExtractor(client).videosFromUrl(playerUrl) + "vido" -> listOf(Video(playerUrl, "FRAnime (Vido)", playerUrl)) "sendvid" -> SendvidExtractor(client, headers).videosFromUrl(playerUrl) "sibnet" -> SibnetExtractor(client).videosFromUrl(playerUrl) + "vk" -> VkExtractor(client, headers).videosFromUrl(playerUrl) else -> emptyList() } } - return Observable.just(videos) } // ============================= Utilities ============================== + private inline fun Iterable.parallelCatchingFlatMapIndexed(crossinline f: suspend (Int, A) -> Iterable): List = + runBlocking { + mapIndexed { index, it -> async(Dispatchers.Default) { runCatching { f(index, it) }.getOrElse { emptyList() } } }.awaitAll().flatten() + } + private fun pagesToAnimesPage(pages: List, page: Int): Observable { val chunks = pages.chunked(50) val hasNextPage = chunks.size > page diff --git a/src/fr/franime/src/eu/kanade/tachiyomi/animeextension/fr/franime/dto/FrAnimeDto.kt b/src/fr/franime/src/eu/kanade/tachiyomi/animeextension/fr/franime/dto/FrAnimeDto.kt index b6397ef5e8..eafe06d293 100644 --- a/src/fr/franime/src/eu/kanade/tachiyomi/animeextension/fr/franime/dto/FrAnimeDto.kt +++ b/src/fr/franime/src/eu/kanade/tachiyomi/animeextension/fr/franime/dto/FrAnimeDto.kt @@ -38,8 +38,8 @@ private object BigIntegerSerializer : KSerializer { @Serializable data class Anime( - @SerialName("themes") val genres: Array, - @SerialName("saisons") val seasons: Array, + @SerialName("themes") val genres: List, + @SerialName("saisons") val seasons: List, @SerialName("_id") val uid: String?, @SerialName("id") val id: BigIntegerJson, @SerialName("source_url") val sourceUrl: String, @@ -63,7 +63,7 @@ data class Anime( @Serializable data class Season( @SerialName("title") val title: String, - @SerialName("episodes") val episodes: Array, + @SerialName("episodes") val episodes: List, ) @Serializable @@ -80,7 +80,7 @@ data class EpisodeLanguages( @Serializable data class EpisodeLanguage( - @SerialName("lecteurs") val players: Array, + @SerialName("lecteurs") val players: List, ) @Serializable