feat(en/aniwatch): Update domains (#1854)

This commit is contained in:
enimax-anime
2023-07-09 07:03:06 -07:00
committed by GitHub
parent ed1914228c
commit 8006a14fd8
3 changed files with 44 additions and 19 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'AniWatch.to'
pkgNameSuffix = 'en.zoro'
extClass = '.AniWatch'
extVersionCode = 31
extVersionCode = 32
libVersion = '13'
}

View File

@ -47,7 +47,7 @@ class AniWatch : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override val name = "AniWatch.to"
override val baseUrl = "https://aniwatch.to"
override val baseUrl by lazy { preferences.getString(PREF_DOMAIN_KEY, PREF_DOMAIN_DEFAULT)!! }
override val id = 6706411382606718900L
@ -83,7 +83,9 @@ class AniWatch : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun episodeListRequest(anime: SAnime): Request {
val id = anime.url.substringAfterLast("-")
val referer = Headers.headersOf("Referer", baseUrl + anime.url)
return GET("$baseUrl/ajax/v2/episode/list/$id", referer)
val ajaxRoute = if (baseUrl == "https://kaido.to") "" else "/v2"
return GET("$baseUrl/ajax$ajaxRoute/episode/list/$id", referer)
}
override fun episodeListParse(response: Response): List<SEpisode> {
@ -111,7 +113,9 @@ class AniWatch : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun videoListRequest(episode: SEpisode): Request {
val id = episode.url.substringAfterLast("?ep=")
val referer = Headers.headersOf("Referer", baseUrl + episode.url)
return GET("$baseUrl/ajax/v2/episode/servers?episodeId=$id", referer)
val ajaxRoute = if (baseUrl == "https://kaido.to") "" else "/v2"
return GET("$baseUrl/ajax$ajaxRoute/episode/servers?episodeId=$id", referer)
}
override fun videoListParse(response: Response): List<Video> {
@ -126,7 +130,9 @@ class AniWatch : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
val name = server.text()
val id = server.attr("data-id")
val subDub = server.attr("data-type")
val url = "$baseUrl/ajax/v2/episode/sources?id=$id"
val ajaxRoute = if (baseUrl == "https://kaido.to") "" else "/v2"
val url = "$baseUrl/ajax$ajaxRoute/episode/sources?id=$id"
val reqBody = client.newCall(GET(url, episodeReferer)).execute()
.body.string()
val sourceUrl = reqBody.substringAfter("\"link\":\"")
@ -330,6 +336,22 @@ class AniWatch : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
// ============================== Settings ==============================
override fun setupPreferenceScreen(screen: PreferenceScreen) {
val domainPref = ListPreference(screen.context).apply {
key = PREF_DOMAIN_KEY
title = PREF_DOMAIN_TITLE
entries = PREF_DOMAIN_ENTRIES
entryValues = PREF_DOMAIN_ENTRY_VALUES
setDefaultValue(PREF_DOMAIN_DEFAULT)
summary = "%s"
setOnPreferenceChangeListener { _, newValue ->
val selected = newValue as String
val index = findIndexOfValue(selected)
val entry = entryValues[index] as String
preferences.edit().putString(key, entry).commit()
}
}
val videoQualityPref = ListPreference(screen.context).apply {
key = PREF_QUALITY_KEY
title = PREF_QUALITY_TITLE
@ -387,6 +409,7 @@ class AniWatch : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
}
}
screen.addPreference(domainPref)
screen.addPreference(videoQualityPref)
screen.addPreference(epTypePref)
screen.addPreference(subLangPref)
@ -436,6 +459,12 @@ class AniWatch : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
private const val PREF_QUALITY_TITLE = "Preferred video quality"
private val PREF_QUALITY_ENTRIES = arrayOf("360p", "720p", "1080p")
private const val PREF_DOMAIN_KEY = "preferred_domain"
private const val PREF_DOMAIN_TITLE = "Preferred domain (requires app restart)"
private const val PREF_DOMAIN_DEFAULT = "https://kaido.to"
private val PREF_DOMAIN_ENTRIES = arrayOf("kaido.to", "aniwatch.to")
private val PREF_DOMAIN_ENTRY_VALUES = arrayOf("https://kaido.to", "https://aniwatch.to")
private const val PREF_TYPE_KEY = "preferred_type"
private const val PREF_TYPE_TITLE = "Preferred episode type/mode"
private val PREF_TYPE_ENTRIES = arrayOf("sub", "dub")

View File

@ -17,27 +17,23 @@ class AniWatchExtractor(private val client: OkHttpClient) {
.build()
companion object {
private const val SERVER_URL = "https://megacloud.tv"
private const val JS_URL = SERVER_URL + "/js/player/a/prod/e1-player.min.js"
private const val SOURCES_URL = SERVER_URL + "/embed-2/ajax/e-1/getSources?id="
private val SERVER_URL = arrayOf("https://megacloud.tv", "https://rapid-cloud.co")
private val SOURCES_URL = arrayOf("/embed-2/ajax/e-1/getSources?id=", "/ajax/embed-6/getSources?id=")
private val SOURCES_SPLITTER = arrayOf("/e-1/", "/embed-6/")
private val SOURCES_KEY = arrayOf("6", "0")
}
// This will create a lag of 1~3s at the initialization of the class, but the
// speedup of the manual cache will be worth it.
private val cachedJs by lazy {
newClient.newCall(GET(JS_URL, cache = cacheControl)).execute()
.body.string()
}
init { cachedJs }
fun getSourcesJson(url: String): String? {
val id = url.substringAfter("/e-1/", "")
val type = if (url.startsWith("https://megacloud.tv")) 0 else 1
val keyType = SOURCES_KEY[type]
val id = url.substringAfter(SOURCES_SPLITTER[type], "")
.substringBefore("?", "").ifEmpty { return null }
val srcRes = newClient.newCall(GET(SOURCES_URL + id, cache = cacheControl))
val srcRes = newClient.newCall(GET(SERVER_URL[type] + SOURCES_URL[type] + id, cache = cacheControl))
.execute()
.body.string()
val key = newClient.newCall(GET("https://raw.githubusercontent.com/enimax-anime/key/e6/key.txt"))
val key = newClient.newCall(GET("https://raw.githubusercontent.com/enimax-anime/key/e$keyType/key.txt"))
.execute()
.body.string()