diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangagg.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangagg.kt index ad88ee5c..b83191c4 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangagg.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangagg.kt @@ -1,13 +1,69 @@ package org.koitharu.kotatsu.parsers.site.madara.en +import org.jsoup.nodes.Document import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.removeSuffix +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import java.text.SimpleDateFormat @MangaSourceParser("MANGAGG", "MangaGg", "en") internal class Mangagg(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANGAGG, "mangagg.com") { override val tagPrefix = "genre/" override val datePattern = "MM/dd/yyyy" + + override suspend fun loadChapters(mangaUrl: String, document: Document): List { + val chapters = mutableListOf() + var page = 1 + + while (true) { + val url = mangaUrl.toAbsoluteUrl(domain).removeSuffix('/') + "/ajax/chapters/?t=$page" + val doc = webClient.httpPost(url, emptyMap()).parseHtml() + val pageChapters = parseChapterPage(doc) + + if (pageChapters.isEmpty()) { + break + } + + chapters.addAll(pageChapters) + page++ + } + + return chapters.reversed().mapIndexed { index, chapter -> + chapter.copy(number = index + 1f) + } + } + + private fun parseChapterPage(doc: Document): List { + val dateFormat = SimpleDateFormat(datePattern, sourceLocale) + return doc.select(selectChapter).map { li -> + val a = li.selectFirstOrThrow("a") + val href = a.attrAsRelativeUrl("href") + val link = href + stylePage + val dateText = li.selectFirst("a.c-new-tag")?.attr("title") ?: li.selectFirst(selectDate)?.text() + val name = a.selectFirst("p")?.text() ?: a.ownText() + MangaChapter( + id = generateUid(href), + title = name, + number = 0f, + volume = 0, + url = link, + uploadDate = parseChapterDate( + dateFormat, + dateText, + ), + source = source, + scanlator = null, + branch = null, + ) + } + } }