From 9f385108fcc45e7d4ee8751b0c745337be3abfdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20Franti=C5=A1ek=20Straka?= <71689727+JosefFStraka@users.noreply.github.com> Date: Thu, 6 Feb 2025 21:43:30 +0100 Subject: [PATCH] fix(en/Aniplay): new server, fixed dub with subtitles showing as softsub, latest fixes (#628) * fix(en/aniplay): fixed dub with subtitles showing as softdub * fix(en/aniplay): new server added "maze" * fix(en/aniplay): implemented proxy mechanic * fix(en/aniplay): version bump --- src/en/aniplay/build.gradle | 2 +- .../animeextension/en/aniplay/AniPlay.kt | 45 +++++++++++++------ .../animeextension/en/aniplay/AniPlayDto.kt | 1 + 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/src/en/aniplay/build.gradle b/src/en/aniplay/build.gradle index d3638755..d0f6531a 100644 --- a/src/en/aniplay/build.gradle +++ b/src/en/aniplay/build.gradle @@ -2,7 +2,7 @@ ext { extName = 'AniPlay' extClass = '.AniPlay' themePkg = 'anilist' - overrideVersionCode = 9 + overrideVersionCode = 10 } apply from: "$rootDir/common.gradle" diff --git a/src/en/aniplay/src/eu/kanade/tachiyomi/animeextension/en/aniplay/AniPlay.kt b/src/en/aniplay/src/eu/kanade/tachiyomi/animeextension/en/aniplay/AniPlay.kt index fcb1baf2..cb2d4c69 100644 --- a/src/en/aniplay/src/eu/kanade/tachiyomi/animeextension/en/aniplay/AniPlay.kt +++ b/src/en/aniplay/src/eu/kanade/tachiyomi/animeextension/en/aniplay/AniPlay.kt @@ -270,13 +270,29 @@ class AniPlay : AniListAnimeHttpSource(), ConfigurableAnimeSource { ?.map { Track(it.url ?: throw Exception("episodeData.response.subtitles.url is null ($it)"), it.lang ?: "Unk") } ?: emptyList() - val serverName = getServerName(episodeData.source) - val typeName = when { - subtitles.isNotEmpty() -> "SoftSub" - else -> getTypeName(episodeData.language) + var serverName = getServerName(episodeData.source) + if (serverName == SERVER_UNKNOWN) { + serverName = episodeData.source.substring(0, 69) + "!" + } + var typeName = getTypeName(episodeData.language) + if (typeName == "Sub" && subtitles.isNotEmpty()) { + typeName = "SoftSub" + } else if (serverName == "Yuki" && typeName == "Dub" && subtitles.isNotEmpty()) { + typeName = "Dubtitles" } try { + if (episodeData.response.proxy == true) { + var proxyUrl = "$PROXY_URL/fetch?url=${defaultSource.url}" + if (episodeData.response.headers != null && episodeData.response.headers.Referer?.startsWith("https://") == true) { + proxyUrl += "&ref=${episodeData.response.headers.Referer}" + } + return playlistUtils.extractFromHls( + playlistUrl = proxyUrl, + videoNameGen = { quality -> "$serverName - $quality - $typeName" }, + subtitleList = subtitles, + ) + } if (episodeData.response.headers != null && episodeData.response.headers.Referer?.startsWith("https://") == true) { return playlistUtils.extractFromHls( playlistUrl = defaultSource.url, @@ -451,7 +467,7 @@ class AniPlay : AniListAnimeHttpSource(), ConfigurableAnimeSource { private fun getServerName(value: String): String { val index = PREF_SERVER_ENTRY_VALUES.indexOf(value) if (index == -1) { - return "Other" + return SERVER_UNKNOWN } return PREF_SERVER_ENTRIES[index] } @@ -459,7 +475,7 @@ class AniPlay : AniListAnimeHttpSource(), ConfigurableAnimeSource { private fun getTypeName(value: String): String { val index = PREF_TYPE_ENTRY_VALUES.indexOf(value.lowercase()) if (index == -1) { - return "Other" + return TYPE_UNKNOWN } return PREF_TYPE_ENTRIES[index] } @@ -477,14 +493,15 @@ class AniPlay : AniListAnimeHttpSource(), ConfigurableAnimeSource { companion object { private const val PREF_DOMAIN_KEY = "domain" - private val PREF_DOMAIN_ENTRIES = arrayOf("aniplaynow.live (default)", "aniplay.lol (backup)") + private val PREF_DOMAIN_ENTRIES = arrayOf("aniplaynow.live (default)", "aniplay.lol (backup/experimental)") private val PREF_DOMAIN_ENTRY_VALUES = arrayOf("aniplaynow.live", "aniplay.lol") private const val PREF_DOMAIN_DEFAULT = "aniplaynow.live" private const val PREF_SERVER_KEY = "server" - private val PREF_SERVER_ENTRIES = arrayOf("Kuro", "Anya", "Yuki", "Pahe") - private val PREF_SERVER_ENTRY_VALUES = arrayOf("kuro", "anya", "yuki", "pahe") - private const val PREF_SERVER_DEFAULT = "kuro" + private val PREF_SERVER_ENTRIES = arrayOf("Maze", "Yuki", "Pahe", "Kuro") + private val PREF_SERVER_ENTRY_VALUES = arrayOf("maze", "yuki", "pahe", "kuro") + private const val PREF_SERVER_DEFAULT = "yuki" + private const val SERVER_UNKNOWN = "Other" private const val PREF_QUALITY_KEY = "quality" private val PREF_QUALITY_ENTRIES = arrayOf("1080p", "720p", "480p", "360p") @@ -492,9 +509,10 @@ class AniPlay : AniListAnimeHttpSource(), ConfigurableAnimeSource { private const val PREF_QUALITY_DEFAULT = "1080" private const val PREF_TYPE_KEY = "type" - private val PREF_TYPE_ENTRIES = arrayOf("Sub", "SoftSub", "Dub") - private val PREF_TYPE_ENTRY_VALUES = arrayOf("sub", "softsub", "dub") - private const val PREF_TYPE_DEFAULT = "sub" + private val PREF_TYPE_ENTRIES = arrayOf("Sub", "SoftSub", "Dub", "Dubtitles") + private val PREF_TYPE_ENTRY_VALUES = arrayOf("sub", "softsub", "dub", "dubtitles") + private const val PREF_TYPE_DEFAULT = "softsub" + private const val TYPE_UNKNOWN = "Other" private const val PREF_TITLE_LANGUAGE_KEY = "title_language" private val PREF_TITLE_LANGUAGE_ENTRIES = arrayOf("Romaji", "English", "Native") @@ -518,6 +536,7 @@ class AniPlay : AniListAnimeHttpSource(), ConfigurableAnimeSource { "NEXT_ACTION_SOURCES_LIST" to "8a76af451978c817dde2364326a5e4e45eb43db1", ), ) + private const val PROXY_URL = "https://aniplay-cors.yqizw7.easypanel.host" private val DATE_FORMATTER = SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH) } diff --git a/src/en/aniplay/src/eu/kanade/tachiyomi/animeextension/en/aniplay/AniPlayDto.kt b/src/en/aniplay/src/eu/kanade/tachiyomi/animeextension/en/aniplay/AniPlayDto.kt index e75eb504..4f909466 100644 --- a/src/en/aniplay/src/eu/kanade/tachiyomi/animeextension/en/aniplay/AniPlayDto.kt +++ b/src/en/aniplay/src/eu/kanade/tachiyomi/animeextension/en/aniplay/AniPlayDto.kt @@ -37,6 +37,7 @@ data class VideoSourceResponse( val outro: Timestamp?, val subtitles: List?, val headers: Headers?, + val proxy: Boolean?, ) { @Serializable data class Source(