[NudeMoon] Fix large amount of pages parsing
This commit is contained in:
@@ -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<MangaPage> {
|
||||
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<MangaTag> {
|
||||
|
||||
Reference in New Issue
Block a user