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
This commit is contained in:
Josef František Straka 2025-02-06 21:43:30 +01:00 committed by GitHub
parent ba2ba44dc4
commit 9f385108fc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 34 additions and 14 deletions

View file

@ -2,7 +2,7 @@ ext {
extName = 'AniPlay' extName = 'AniPlay'
extClass = '.AniPlay' extClass = '.AniPlay'
themePkg = 'anilist' themePkg = 'anilist'
overrideVersionCode = 9 overrideVersionCode = 10
} }
apply from: "$rootDir/common.gradle" apply from: "$rootDir/common.gradle"

View file

@ -270,13 +270,29 @@ class AniPlay : AniListAnimeHttpSource(), ConfigurableAnimeSource {
?.map { Track(it.url ?: throw Exception("episodeData.response.subtitles.url is null ($it)"), it.lang ?: "Unk") } ?.map { Track(it.url ?: throw Exception("episodeData.response.subtitles.url is null ($it)"), it.lang ?: "Unk") }
?: emptyList() ?: emptyList()
val serverName = getServerName(episodeData.source) var serverName = getServerName(episodeData.source)
val typeName = when { if (serverName == SERVER_UNKNOWN) {
subtitles.isNotEmpty() -> "SoftSub" serverName = episodeData.source.substring(0, 69) + "!"
else -> getTypeName(episodeData.language) }
var typeName = getTypeName(episodeData.language)
if (typeName == "Sub" && subtitles.isNotEmpty()) {
typeName = "SoftSub"
} else if (serverName == "Yuki" && typeName == "Dub" && subtitles.isNotEmpty()) {
typeName = "Dubtitles"
} }
try { 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) { if (episodeData.response.headers != null && episodeData.response.headers.Referer?.startsWith("https://") == true) {
return playlistUtils.extractFromHls( return playlistUtils.extractFromHls(
playlistUrl = defaultSource.url, playlistUrl = defaultSource.url,
@ -451,7 +467,7 @@ class AniPlay : AniListAnimeHttpSource(), ConfigurableAnimeSource {
private fun getServerName(value: String): String { private fun getServerName(value: String): String {
val index = PREF_SERVER_ENTRY_VALUES.indexOf(value) val index = PREF_SERVER_ENTRY_VALUES.indexOf(value)
if (index == -1) { if (index == -1) {
return "Other" return SERVER_UNKNOWN
} }
return PREF_SERVER_ENTRIES[index] return PREF_SERVER_ENTRIES[index]
} }
@ -459,7 +475,7 @@ class AniPlay : AniListAnimeHttpSource(), ConfigurableAnimeSource {
private fun getTypeName(value: String): String { private fun getTypeName(value: String): String {
val index = PREF_TYPE_ENTRY_VALUES.indexOf(value.lowercase()) val index = PREF_TYPE_ENTRY_VALUES.indexOf(value.lowercase())
if (index == -1) { if (index == -1) {
return "Other" return TYPE_UNKNOWN
} }
return PREF_TYPE_ENTRIES[index] return PREF_TYPE_ENTRIES[index]
} }
@ -477,14 +493,15 @@ class AniPlay : AniListAnimeHttpSource(), ConfigurableAnimeSource {
companion object { companion object {
private const val PREF_DOMAIN_KEY = "domain" 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 val PREF_DOMAIN_ENTRY_VALUES = arrayOf("aniplaynow.live", "aniplay.lol")
private const val PREF_DOMAIN_DEFAULT = "aniplaynow.live" private const val PREF_DOMAIN_DEFAULT = "aniplaynow.live"
private const val PREF_SERVER_KEY = "server" private const val PREF_SERVER_KEY = "server"
private val PREF_SERVER_ENTRIES = arrayOf("Kuro", "Anya", "Yuki", "Pahe") private val PREF_SERVER_ENTRIES = arrayOf("Maze", "Yuki", "Pahe", "Kuro")
private val PREF_SERVER_ENTRY_VALUES = arrayOf("kuro", "anya", "yuki", "pahe") private val PREF_SERVER_ENTRY_VALUES = arrayOf("maze", "yuki", "pahe", "kuro")
private const val PREF_SERVER_DEFAULT = "kuro" private const val PREF_SERVER_DEFAULT = "yuki"
private const val SERVER_UNKNOWN = "Other"
private const val PREF_QUALITY_KEY = "quality" private const val PREF_QUALITY_KEY = "quality"
private val PREF_QUALITY_ENTRIES = arrayOf("1080p", "720p", "480p", "360p") 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_QUALITY_DEFAULT = "1080"
private const val PREF_TYPE_KEY = "type" private const val PREF_TYPE_KEY = "type"
private val PREF_TYPE_ENTRIES = arrayOf("Sub", "SoftSub", "Dub") private val PREF_TYPE_ENTRIES = arrayOf("Sub", "SoftSub", "Dub", "Dubtitles")
private val PREF_TYPE_ENTRY_VALUES = arrayOf("sub", "softsub", "dub") private val PREF_TYPE_ENTRY_VALUES = arrayOf("sub", "softsub", "dub", "dubtitles")
private const val PREF_TYPE_DEFAULT = "sub" private const val PREF_TYPE_DEFAULT = "softsub"
private const val TYPE_UNKNOWN = "Other"
private const val PREF_TITLE_LANGUAGE_KEY = "title_language" private const val PREF_TITLE_LANGUAGE_KEY = "title_language"
private val PREF_TITLE_LANGUAGE_ENTRIES = arrayOf("Romaji", "English", "Native") private val PREF_TITLE_LANGUAGE_ENTRIES = arrayOf("Romaji", "English", "Native")
@ -518,6 +536,7 @@ class AniPlay : AniListAnimeHttpSource(), ConfigurableAnimeSource {
"NEXT_ACTION_SOURCES_LIST" to "8a76af451978c817dde2364326a5e4e45eb43db1", "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) private val DATE_FORMATTER = SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH)
} }

View file

@ -37,6 +37,7 @@ data class VideoSourceResponse(
val outro: Timestamp?, val outro: Timestamp?,
val subtitles: List<Subtitle>?, val subtitles: List<Subtitle>?,
val headers: Headers?, val headers: Headers?,
val proxy: Boolean?,
) { ) {
@Serializable @Serializable
data class Source( data class Source(