From c9a53d66036546d8736b02df5052c8db6a734a3e Mon Sep 17 00:00:00 2001 From: Raymond M <159627856+raonsama@users.noreply.github.com> Date: Tue, 13 Aug 2024 01:10:12 +0800 Subject: [PATCH 1/8] Fix Issue: Oploverz (#130) * fix 404 error message * fix pagination * bump --- src/id/oploverz/build.gradle | 2 +- .../animeextension/id/oploverz/Oploverz.kt | 91 +++++++++---------- 2 files changed, 42 insertions(+), 51 deletions(-) diff --git a/src/id/oploverz/build.gradle b/src/id/oploverz/build.gradle index bfa2fdd5..33a8da51 100644 --- a/src/id/oploverz/build.gradle +++ b/src/id/oploverz/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'Oploverz' extClass = '.Oploverz' - extVersionCode = 26 + extVersionCode = 27 } apply from: "$rootDir/common.gradle" diff --git a/src/id/oploverz/src/eu/kanade/tachiyomi/animeextension/id/oploverz/Oploverz.kt b/src/id/oploverz/src/eu/kanade/tachiyomi/animeextension/id/oploverz/Oploverz.kt index dd1d5167..caa4b4d3 100644 --- a/src/id/oploverz/src/eu/kanade/tachiyomi/animeextension/id/oploverz/Oploverz.kt +++ b/src/id/oploverz/src/eu/kanade/tachiyomi/animeextension/id/oploverz/Oploverz.kt @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.animeextension.id.oploverz import android.app.Application import android.content.SharedPreferences +import android.util.Base64 import androidx.preference.ListPreference import androidx.preference.PreferenceScreen import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource @@ -12,14 +13,11 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.util.asJsoup -import eu.kanade.tachiyomi.util.parallelCatchingFlatMapBlocking -import eu.kanade.tachiyomi.util.parallelMapNotNullBlocking -import okhttp3.FormBody import okhttp3.Request import okhttp3.Response import org.json.JSONObject +import org.jsoup.Jsoup import org.jsoup.nodes.Element import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -39,28 +37,28 @@ class Oploverz : ConfigurableAnimeSource, AnimeHttpSource() { // ============================== Popular =============================== override fun popularAnimeRequest(page: Int): Request = - GET("$baseUrl/anime-list/page/$page/?order=popular") + GET("$baseUrl/anime/?page=$page&status=&type=&sub=&order=popular") override fun popularAnimeParse(response: Response): AnimesPage = - getAnimeParse(response, "div.relat > article") + getAnimeParse(response, "article[itemscope=itemscope]") // =============================== Latest =============================== override fun latestUpdatesRequest(page: Int): Request = - GET("$baseUrl/anime-list/page/$page/?order=latest") + GET("$baseUrl/anime/?page=$page&status=&type=&sub=&order=latest") override fun latestUpdatesParse(response: Response): AnimesPage = - getAnimeParse(response, "div.relat > article") + getAnimeParse(response, "article[itemscope=itemscope]") // =============================== Search =============================== override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request { val params = OploverzFilters.getSearchParameters(filters) - return GET("$baseUrl/anime-list/page/$page/?title=$query${params.filter}", headers) + return GET("$baseUrl/page/$page/?s=$query${params.filter}", headers) } override fun searchAnimeParse(response: Response): AnimesPage = - getAnimeParse(response, "div.relat > article") + getAnimeParse(response, "article[itemscope=itemscope]") // ============================== Filters =============================== @@ -70,16 +68,16 @@ class Oploverz : ConfigurableAnimeSource, AnimeHttpSource() { override fun animeDetailsParse(response: Response): SAnime { val doc = response.asJsoup() - val detail = doc.selectFirst("div.infox > div.spe")!! + val detail = doc.selectFirst("div.info-content > div.spe")!! return SAnime.create().apply { author = detail.getInfo("Studio") - status = parseStatus(doc.selectFirst("div.alternati > span:nth-child(2)")!!.text()) - title = doc.selectFirst("div.title > h1.entry-title")!!.text() + status = parseStatus(detail.getInfo("Status")) + title = doc.selectFirst("h1.entry-title")!!.text() thumbnail_url = - doc.selectFirst("div.infoanime.widget_senction > div.thumb > img")!! + doc.selectFirst("div.thumb > img")!! .attr("src") description = - doc.select("div.entry-content.entry-content-single > p") + doc.select("div.entry-content > p") .joinToString("\n\n") { it.text() } } } @@ -88,13 +86,13 @@ class Oploverz : ConfigurableAnimeSource, AnimeHttpSource() { override fun episodeListParse(response: Response): List { val doc = response.asJsoup() - return doc.select("div.lstepsiode.listeps > ul.scrolling > li").map { - val episode = it.selectFirst("span.eps > a")!! + return doc.select("div.eplister > ul > li").map { + val episode = it.selectFirst("a")!! SEpisode.create().apply { setUrlWithoutDomain(episode.attr("href")) - episode_number = episode.text().trim().toFloatOrNull() ?: 1F - name = it.selectFirst("span.lchx > a")!!.text() - date_upload = it.selectFirst("span.date")!!.text().toDate() + episode_number = it.selectFirst("div.epl-num")!!.text().toFloatOrNull() ?: 1F + name = it.selectFirst("div.epl-title")!!.text() + date_upload = it.selectFirst("div.epl-date")!!.text().toDate() } } } @@ -103,15 +101,25 @@ class Oploverz : ConfigurableAnimeSource, AnimeHttpSource() { override fun videoListParse(response: Response): List