diff --git a/src/en/animeowl/build.gradle b/src/en/animeowl/build.gradle index e205c901..d3790cac 100644 --- a/src/en/animeowl/build.gradle +++ b/src/en/animeowl/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'AnimeOwl' extClass = '.AnimeOwl' - extVersionCode = 18 + extVersionCode = 19 } 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 5de012b5..dee4ddad 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 @@ -17,7 +17,6 @@ import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.util.asJsoup import eu.kanade.tachiyomi.util.parallelFlatMap import eu.kanade.tachiyomi.util.parseAs -import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import kotlinx.serialization.json.buildJsonObject @@ -35,12 +34,11 @@ import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy import kotlin.math.ceil -@ExperimentalSerializationApi class AnimeOwl : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override val name = "AnimeOwl" - override val baseUrl = "https://animeowl.us" + override val baseUrl = "https://animeowl.live" override val lang = "en" @@ -109,6 +107,7 @@ class AnimeOwl : ConfigurableAnimeSource, ParsedAnimeHttpSource() { genre = document.select("div.genre > a").joinToString { it.text() } author = document.select("div.type > a").text() status = parseStatus(document.select("div.status > span").text()) + thumbnail_url = document.selectFirst(".cover-img-container > img")?.attr("abs:src") description = buildString { document.select("div.anime-desc.desc-content").text() .takeIf { it.isNotBlank() } @@ -127,32 +126,33 @@ class AnimeOwl : ConfigurableAnimeSource, ParsedAnimeHttpSource() { // ============================== Episodes ============================== override fun episodeListParse(response: Response): List { - val animeId = response.asJsoup().select("div#unq-anime-id").attr("animeId") - val episodes = client.newCall( - GET("$baseUrl/api/anime/$animeId/episodes"), - ).execute() - .parseAs() + val document = response.asJsoup() + val sub = document.select("#anime-cover-sub-content .episode-node").mapIndexed { idx, it -> + EpisodeResponse.Episode( + id = it.text().toDouble(), + episodeIndex = idx.toString(), + name = it.text(), + lang = "Sub", + href = it.attr("abs:href"), + ) + } + val dub = document.select("#anime-cover-dub-content .episode-node").mapIndexed { idx, it -> + EpisodeResponse.Episode( + id = it.text().toDouble(), + episodeIndex = idx.toString(), + name = it.text(), + lang = "Dub", + href = it.attr("abs:href"), + ) + } - return listOf( - episodes.sub.map { it.copy(lang = "Sub") }, - episodes.dub.map { it.copy(lang = "Dub") }, - ).flatten() - .groupBy { it.name } - .map { (epNum, epList) -> - SEpisode.create().apply { - url = LinkData( - epList.map { ep -> - Link( - ep.buildUrl(episodes.subSlug, episodes.dubSlug), - ep.lang!!, - ) - }, - ).toJsonString() - episode_number = epNum.toFloatOrNull() ?: 0F - name = "Episode $epNum" - } + return listOf(sub, dub).flatten().groupBy { it.name }.map { (epNum, epList) -> + SEpisode.create().apply { + url = LinkData(epList.map { ep -> Link(ep.href!!, ep.lang!!) }).toJsonString() + episode_number = epNum.toFloatOrNull() ?: 0F + name = "Episode $epNum" } - .sortedByDescending { it.episode_number } + }.sortedByDescending { it.episode_number } } override fun episodeListSelector(): String = throw UnsupportedOperationException() @@ -160,9 +160,9 @@ class AnimeOwl : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override fun episodeFromElement(element: Element): SEpisode = throw UnsupportedOperationException() // ============================ Video Links ============================= - override suspend fun getVideoList(episode: SEpisode): List