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