diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NudeMoonParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NudeMoonParser.kt index ebc2363c..a88c3da9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NudeMoonParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NudeMoonParser.kt @@ -13,6 +13,8 @@ import java.text.SimpleDateFormat import java.util.* import java.util.regex.Pattern +private const val MAX_THUMB_INDEX = 20 + internal class NudeMoonParser( override val context: MangaLoaderContext, ) : MangaParser(MangaSource.NUDEMOON), MangaParserAuthProvider { @@ -120,7 +122,7 @@ internal class NudeMoonParser( chapters = listOf( MangaChapter( id = manga.id, - url = manga.url, + url = manga.url.replace("--", "-online-"), source = source, number = 1, name = manga.title, @@ -138,21 +140,30 @@ internal class NudeMoonParser( override suspend fun getPages(chapter: MangaChapter): List { val fullUrl = chapter.url.withDomain() val doc = context.httpGet(fullUrl).parseHtml() - val root = doc.body().selectFirst("td.main-body") - ?: parseFailed("Cannot find root") - val readlink = root.selectFirst("table.shoutbox")?.selectFirst("a")?.absUrl("href") - ?: parseFailed("Cannot obtain read link") - val fullPages = getFullPages(readlink) - return root.getElementsByAttributeValueMatching("href", pageUrlPatter).mapIndexedNotNull { i, a -> - val url = a.relUrl("href") + val mangaId = chapter.url.substringAfterLast('/').substringBefore('-').toIntOrNull() + + val script = doc.select("script").firstNotNullOfOrNull { + it.html().takeIf { x -> x.contains(" images = new ") } + } ?: parseFailed("Cannot find pages list") + val pagesRegex = Regex("images\\[(\\d+)].src\\s*=\\s*'([^']+)'", RegexOption.MULTILINE) + return pagesRegex.findAll(script).map { match -> + val i = match.groupValues[1].toInt() + val url = match.groupValues[2] MangaPage( id = generateUid(url), - url = fullPages[i] ?: return@mapIndexedNotNull null, + url = url, referer = fullUrl, - preview = a.selectFirst("img")?.absUrl("src"), + preview = if (i <= MAX_THUMB_INDEX && mangaId != null) { + val part2 = url.substringBeforeLast('/') + val part3 = url.substringAfterLast('/') + val part1 = part2.substringBeforeLast('/') + "$part1/thumb/$mangaId/thumb_$part3" + } else { + null + }, source = source, ) - } + }.toList() } override suspend fun getTags(): Set {