From 6433c41cb747f7b7ed6fed07a23b1aa144338273 Mon Sep 17 00:00:00 2001 From: A2va <49582555+A2va@users.noreply.github.com> Date: Thu, 24 Apr 2025 19:10:18 +0200 Subject: [PATCH] AnimeSama: fix chapter list parsing (#8608) Closes #5075 --- src/fr/animesama/build.gradle | 2 +- .../extension/fr/animesama/AnimeSama.kt | 37 +++++++++++-------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/fr/animesama/build.gradle b/src/fr/animesama/build.gradle index 3b48bb2ce..1c46e3873 100644 --- a/src/fr/animesama/build.gradle +++ b/src/fr/animesama/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'AnimeSama' extClass = '.AnimeSama' - extVersionCode = 4 + extVersionCode = 5 } apply from: "$rootDir/common.gradle" diff --git a/src/fr/animesama/src/eu/kanade/tachiyomi/extension/fr/animesama/AnimeSama.kt b/src/fr/animesama/src/eu/kanade/tachiyomi/extension/fr/animesama/AnimeSama.kt index 789907e47..5c68c1996 100644 --- a/src/fr/animesama/src/eu/kanade/tachiyomi/extension/fr/animesama/AnimeSama.kt +++ b/src/fr/animesama/src/eu/kanade/tachiyomi/extension/fr/animesama/AnimeSama.kt @@ -114,12 +114,10 @@ class AnimeSama : ParsedHttpSource() { val javascriptFileContent = javascriptFile.body.string() val parsedJavascriptFileToJson = javascriptFileContent - .split(" ", ",") - .filter { it.contains("eps") && !it.contains("drive.google.com") } - .mapNotNull { it.replace("=", "").replace("eps", "").toIntOrNull() } - .sorted() - .asReversed() - .toSet() // Remove duplicate episodes + .let { Regex("""eps(\d+)""").findAll(it) } + .map { it.groupValues[1].toInt() } + .distinct() // Remove duplicate episodes + .sortedDescending().toList() val parsedChapterList: MutableList = ArrayList() var chapterDelay = 0 @@ -214,19 +212,28 @@ class AnimeSama : ParsedHttpSource() { val title = url.queryParameter("title") val chapter = url.queryParameter("id") - val allChapters = document.body().toString().split("var") + val documentString = document.body().toString() - val chapterImageListString = allChapters.firstOrNull { it.contains("eps$chapter=") } - ?: return emptyList() + val allChapters: Map = Regex("""eps(\d+)\s*(?:=\s*\[(.*?)\]|\.length\s*=\s*(\d+))""") + .findAll(documentString) + .associate { match -> + val episode = match.groupValues[1].toInt() + val arrayContent = match.groupValues[2] + val explicitLength = match.groupValues[3] - val chapterImageListParsed = chapterImageListString - .substringAfter("[") - .substringBefore("]") - .split(",") + val length = when { + explicitLength.isNotEmpty() -> explicitLength.toInt() + arrayContent.isNotEmpty() -> arrayContent.split(Regex(",\\s*")).count { it.isNotBlank() } + else -> 0 + } + + episode to length + } + + val chapterSize = allChapters.get(chapter?.toInt()) ?: 1 val image_list = mutableListOf() - - for (index in 1 until chapterImageListParsed.size) { + for (index in 1 until chapterSize + 1) { image_list.add( Page(index, imageUrl = "$cdn$title/$chapter/$index.jpg"), )