diff --git a/src/en/animeowl/build.gradle b/src/en/animeowl/build.gradle index e5849d46..40b4fa1d 100644 --- a/src/en/animeowl/build.gradle +++ b/src/en/animeowl/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'AnimeOwl' extClass = '.AnimeOwl' - extVersionCode = 22 + extVersionCode = 23 } apply from: "$rootDir/common.gradle" diff --git a/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwl.kt b/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwl.kt index b53606e8..3b061288 100644 --- a/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwl.kt +++ b/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwl.kt @@ -129,20 +129,20 @@ class AnimeOwl : ConfigurableAnimeSource, ParsedAnimeHttpSource() { val document = response.asJsoup() val sub = document.select("#anime-cover-sub-content .episode-node").mapIndexed { idx, it -> EpisodeResponse.Episode( - id = it.text().toDouble(), + id = it.attr("title").toDoubleOrNull(), episodeIndex = idx.toString(), - name = it.text(), + name = it.attr("title"), lang = "Sub", - href = it.attr("abs:href"), + href = it.absUrl("href"), ) } val dub = document.select("#anime-cover-dub-content .episode-node").mapIndexed { idx, it -> EpisodeResponse.Episode( - id = it.text().toDouble(), + id = it.attr("title").toDoubleOrNull(), episodeIndex = idx.toString(), - name = it.text(), + name = it.attr("title"), lang = "Dub", - href = it.attr("abs:href"), + href = it.absUrl("href"), ) } diff --git a/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwlDto.kt b/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwlDto.kt index 0e39f027..66ae5673 100644 --- a/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwlDto.kt +++ b/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwlDto.kt @@ -53,12 +53,13 @@ data class Link( @Serializable data class OwlServers( - val kaido: String? = null, - val luffy: String? = null, - val zoro: String? = null, + val kaido: List? = null, + val luffy: List? = null, + val zoro: List? = null, ) @Serializable data class Stream( val url: String, + val resolution: String?, ) diff --git a/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/extractors/OwlExtractor.kt b/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/extractors/OwlExtractor.kt index e3fa8ef1..3d4c22a9 100644 --- a/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/extractors/OwlExtractor.kt +++ b/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/extractors/OwlExtractor.kt @@ -45,23 +45,32 @@ class OwlExtractor(private val client: OkHttpClient, private val baseUrl: String coroutineScope { val lufDeferred = async { servers.luffy?.let { luffy -> - noRedirectClient.newCall(GET("${luffy}$jwt")).execute() - .use { it.headers["Location"] } - ?.let { videoList.add(Video(it, "${link.lang} Luffy:1080p", it)) } + luffy.forEach { stream -> + noRedirectClient.newCall(GET("${stream.url}$jwt")).execute() + .use { it.headers["Location"] }?.let { + videoList.add( + Video(it, "${link.lang} Luffy:${stream.resolution}", it), + ) + } + } } } val kaiDeferred = async { - servers.kaido?.let { - videoList.addAll( - getHLS("${it}$jwt", "Kaido", link.lang), - ) + servers.kaido?.let { kaido -> + kaido.forEach { stream -> + videoList.addAll( + getHLS("${stream.url}$jwt", "Kaido", link.lang), + ) + } } } val zorDeferred = async { - servers.zoro?.let { - videoList.addAll( - getHLS("${it}$jwt", "Boa", link.lang), - ) + servers.zoro?.let { zoro -> + zoro.forEach { stream -> + videoList.addAll( + getHLS("${stream.url}$jwt", "Boa", link.lang), + ) + } } } @@ -71,7 +80,7 @@ class OwlExtractor(private val client: OkHttpClient, private val baseUrl: String } private fun getHLS(url: String, server: String, lang: String): List