fix(fr/franime): Removed myvi, added vido and vk players (#2430)

This commit is contained in:
hollow
2023-10-28 09:41:09 +01:00
committed by GitHub
parent 3dbe30186c
commit 93cba14068
3 changed files with 20 additions and 11 deletions

View File

@ -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'))
} }

View File

@ -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

View File

@ -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