diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/en/LuaScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/en/LuaScans.kt new file mode 100644 index 000000000..39ee71cdd --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/en/LuaScans.kt @@ -0,0 +1,34 @@ +package org.koitharu.kotatsu.parsers.site.heancms.en + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.* +import org.koitharu.kotatsu.parsers.site.heancms.HeanCms +import org.koitharu.kotatsu.parsers.util.* + +@MangaSourceParser("LUASCANS", "luaComic.net", "en") +internal class LuaScans(context: MangaLoaderContext) : + HeanCms(context, MangaParserSource.LUASCANS, "luacomic.org") { + + // The reader is a Next.js client-rendered page: page image URLs are embedded (with escaped + // slashes) in the server-sent flight data under /uploads/series/..., already in page order. + private val pageUrlRegex = + Regex("""https://[^"'\\ ]*?/uploads/series/[^"'\\ ]+?\.(?:webp|jpg|jpeg|png|avif)(?:\.(?:webp|jpg|jpeg|png|avif))?""") + + override suspend fun getPages(chapter: MangaChapter): List { + val fullUrl = chapter.url.toAbsoluteUrl(domain) + val html = webClient.httpGet(fullUrl).parseRaw().replace("\\/", "/") + return pageUrlRegex.findAll(html) + .map { it.value } + .distinct() + .map { url -> + MangaPage( + id = generateUid(url), + url = url, + preview = null, + source = source, + ) + } + .toList() + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/LuaScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/LuaScans.kt deleted file mode 100644 index a29546626..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/LuaScans.kt +++ /dev/null @@ -1,12 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.keyoapp.en - -import org.koitharu.kotatsu.parsers.Broken -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.site.keyoapp.KeyoappParser - -@Broken("Site is online but parser is broken — layout/API changed, needs rewrite") -@MangaSourceParser("LUASCANS", "luaComic.net", "en") -internal class LuaScans(context: MangaLoaderContext) : - KeyoappParser(context, MangaParserSource.LUASCANS, "luacomic.org")