From d9cbdcb9b58055c9d3f4ea5c9be0fccb03903b05 Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Thu, 14 Dec 2023 06:58:50 -0300 Subject: [PATCH] fix(id/kuramanime): Fix episode list in long series + fix video list (#2638) --- src/id/kuramanime/build.gradle | 3 +- .../id/kuramanime/Kuramanime.kt | 107 ++++++++++++++---- 2 files changed, 84 insertions(+), 26 deletions(-) diff --git a/src/id/kuramanime/build.gradle b/src/id/kuramanime/build.gradle index bdd5b83b8..41945e4d7 100644 --- a/src/id/kuramanime/build.gradle +++ b/src/id/kuramanime/build.gradle @@ -1,13 +1,14 @@ plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.serialization) } ext { extName = 'Kuramanime' pkgNameSuffix = 'id.kuramanime' extClass = '.Kuramanime' - extVersionCode = 10 + extVersionCode = 11 libVersion = '13' } diff --git a/src/id/kuramanime/src/eu/kanade/tachiyomi/animeextension/id/kuramanime/Kuramanime.kt b/src/id/kuramanime/src/eu/kanade/tachiyomi/animeextension/id/kuramanime/Kuramanime.kt index ea290a28a..1677f3186 100644 --- a/src/id/kuramanime/src/eu/kanade/tachiyomi/animeextension/id/kuramanime/Kuramanime.kt +++ b/src/id/kuramanime/src/eu/kanade/tachiyomi/animeextension/id/kuramanime/Kuramanime.kt @@ -1,7 +1,6 @@ package eu.kanade.tachiyomi.animeextension.id.kuramanime import android.app.Application -import android.util.Base64 import androidx.preference.ListPreference import androidx.preference.PreferenceScreen import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource @@ -13,14 +12,16 @@ import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.util.asJsoup -import okhttp3.Headers +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json import okhttp3.Response import org.jsoup.nodes.Document import org.jsoup.nodes.Element import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get +import uy.kohesive.injekt.injectLazy import java.lang.Exception -import java.net.URLEncoder class Kuramanime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override val name = "Kuramanime" @@ -37,6 +38,8 @@ class Kuramanime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { Injekt.get().getSharedPreferences("source_$id", 0x0000) } + private val json: Json by injectLazy() + // ============================== Popular =============================== override fun popularAnimeRequest(page: Int) = GET("$baseUrl/anime?page=$page") @@ -112,10 +115,31 @@ class Kuramanime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { val newDoc = response.asJsoup(html) - return newDoc.select("a") - .filterNot { it.attr("href").contains("batch") } - .map(::episodeFromElement) - .reversed() + val limits = newDoc.select("a.btn-secondary") + + return when { + limits.isEmpty() -> { // 12 episodes or less + newDoc.select("a") + .filterNot { it.attr("href").contains("batch") } + .map(::episodeFromElement) + .reversed() + } + else -> { // More than 12 episodes + val (start, end) = limits.eachText().take(2).map { + it.filter(Char::isDigit).toInt() + } + + val location = document.location() + + (end downTo start).map { episodeNumber -> + SEpisode.create().apply { + name = "Ep $episodeNumber" + episode_number = episodeNumber.toFloat() + setUrlWithoutDomain("$location/episode/$episodeNumber") + } + } + } + } } override fun episodeListSelector() = "a#episodeLists" @@ -137,6 +161,14 @@ class Kuramanime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override fun videoListParse(response: Response): List