diff --git a/src/en/gogoanime/build.gradle b/src/en/gogoanime/build.gradle index 37fd2b550..ab51a355f 100644 --- a/src/en/gogoanime/build.gradle +++ b/src/en/gogoanime/build.gradle @@ -5,13 +5,14 @@ ext { extName = 'Gogoanime' pkgNameSuffix = 'en.gogoanime' extClass = '.GogoAnime' - extVersionCode = 65 + extVersionCode = 66 libVersion = '13' } dependencies { implementation(project(':lib-streamsb-extractor')) implementation(project(':lib-dood-extractor')) + implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1" } apply from: "$rootDir/common.gradle" diff --git a/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt b/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt index ef1f96a1b..7bb202ab9 100644 --- a/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt +++ b/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt @@ -3,8 +3,10 @@ package eu.kanade.tachiyomi.animeextension.en.gogoanime import android.app.Application import android.content.SharedPreferences import androidx.preference.ListPreference +import androidx.preference.MultiSelectListPreference import androidx.preference.PreferenceScreen import eu.kanade.tachiyomi.animeextension.en.gogoanime.extractors.GogoCdnExtractor +import eu.kanade.tachiyomi.animeextension.en.gogoanime.extractors.Mp4uploadExtractor import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.model.AnimeFilter import eu.kanade.tachiyomi.animesource.model.AnimeFilterList @@ -16,6 +18,10 @@ import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.util.asJsoup +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.runBlocking import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.json.Json import okhttp3.OkHttpClient @@ -33,7 +39,7 @@ class GogoAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override val name = "Gogoanime" - override val baseUrl by lazy { preferences.getString("preferred_domain", "https://gogoanime.cl")!! } + override val baseUrl by lazy { preferences.getString(PREF_DOMAIN_KEY, PREF_DOMAIN_DEFAULT)!! } override val lang = "en" @@ -47,98 +53,37 @@ class GogoAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { Injekt.get().getSharedPreferences("source_$id", 0x0000) } - override fun popularAnimeSelector(): String = "div.img a" + // ============================== Popular =============================== override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/popular.html?page=$page") - override fun popularAnimeFromElement(element: Element): SAnime { - val anime = SAnime.create() - anime.setUrlWithoutDomain(element.attr("href")) - anime.thumbnail_url = element.selectFirst("img")!!.attr("src") - anime.title = element.attr("title") - return anime + override fun popularAnimeSelector(): String = "div.img a" + + override fun popularAnimeFromElement(element: Element): SAnime = SAnime.create().apply { + setUrlWithoutDomain(element.attr("href")) + thumbnail_url = element.selectFirst("img")!!.attr("src") + title = element.attr("title") } override fun popularAnimeNextPageSelector(): String = "ul.pagination-list li:last-child:not(.selected)" - override fun episodeListSelector() = "ul#episode_page li a" + // =============================== Latest =============================== - override fun episodeListParse(response: Response): List { - val document = response.asJsoup() - val totalEpisodes = document.select(episodeListSelector()).last()!!.attr("ep_end") - val id = document.select("input#movie_id").attr("value") - return episodesRequest(totalEpisodes, id) + override fun latestUpdatesRequest(page: Int): Request = + GET("https://ajax.gogo-load.com/ajax/page-recent-release-ongoing.html?page=$page&type=1", headers) + + override fun latestUpdatesSelector(): String = "div.added_series_body.popular li a:has(div)" + + override fun latestUpdatesFromElement(element: Element): SAnime = SAnime.create().apply { + setUrlWithoutDomain(element.attr("abs:href")) + thumbnail_url = element.select("div.thumbnail-popular").attr("style") + .substringAfter("background: url('").substringBefore("');") + title = element.attr("title") } - private fun episodesRequest(totalEpisodes: String, id: String): List { - val request = GET("https://ajax.gogo-load.com/ajax/load-list-episode?ep_start=0&ep_end=$totalEpisodes&id=$id", headers) - val epResponse = client.newCall(request).execute() - val document = epResponse.asJsoup() - return document.select("a").map { episodeFromElement(it) } - } + override fun latestUpdatesNextPageSelector(): String = popularAnimeNextPageSelector() - override fun episodeFromElement(element: Element): SEpisode { - val episode = SEpisode.create() - episode.setUrlWithoutDomain(baseUrl + element.attr("href").substringAfter(" ")) - val ep = element.selectFirst("div.name")!!.ownText().substringAfter(" ") - episode.episode_number = ep.toFloat() - episode.name = "Episode $ep" - return episode - } - - override fun videoListParse(response: Response): List