Misc fixes

Koitharu 3 years ago
parent f471a3513e
commit 8fef459346
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

@ -61,7 +61,7 @@ internal class TeamXNovel(context: MangaLoaderContext) : PagedMangaParser(contex
return doc.select("div.listupd .bs .bsx").ifEmpty { return doc.select("div.listupd .bs .bsx").ifEmpty {
doc.select("div.post-body .box") doc.select("div.post-body .box")
}.map { div -> }.map { div ->
val href = div.selectFirstOrThrow("a").attrAsAbsoluteUrl("href") val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href")
Manga( Manga(
id = generateUid(href), id = generateUid(href),
title = div.select(".tt, h3").text(), title = div.select(".tt, h3").text(),

@ -23,17 +23,17 @@ internal class CloneMangaParser(context: MangaLoaderContext) : MangaParser(conte
if (query != null || offset > 0) { if (query != null || offset > 0) {
return emptyList() return emptyList()
} }
val link = "https://${domain}/viewer_landing.php" val link = "https://$domain/viewer_landing.php"
val doc = webClient.httpGet(link).parseHtml() val doc = webClient.httpGet(link).parseHtml()
val mangas = doc.getElementsByClass("comicPreviewContainer") val mangas = doc.getElementsByClass("comicPreviewContainer")
return mangas.mapNotNull { item -> return mangas.mapNotNull { item ->
val background = item.selectFirstOrThrow(".comicPreview").styleValueOrNull("background") val background = item.selectFirstOrThrow(".comicPreview").styleValueOrNull("background")
val href = item.selectFirst("a")?.attrAsAbsoluteUrl("href") ?: return@mapNotNull null val href = item.selectFirst("a")?.attrAsRelativeUrl("href") ?: return@mapNotNull null
val cover = background?.substring(background.indexOf("site/themes"), background.indexOf(")")) val cover = background?.substring(background.indexOf("site/themes"), background.indexOf(")"))
Manga( Manga(
id = generateUid(href), id = generateUid(href),
title = item.selectFirst("h3")?.text() ?: return@mapNotNull null, title = item.selectFirst("h3")?.text() ?: return@mapNotNull null,
coverUrl = "https://${domain}/$cover", coverUrl = "https://$domain/$cover",
altTitle = null, altTitle = null,
author = "Dan Kim", author = "Dan Kim",
rating = RATING_UNKNOWN, rating = RATING_UNKNOWN,

@ -59,7 +59,7 @@ internal class ComicExtra(context: MangaLoaderContext) : PagedMangaParser(contex
val doc = webClient.httpGet(url).parseHtml() val doc = webClient.httpGet(url).parseHtml()
return doc.select("div.movie-list-index div.cartoon-box").map { div -> return doc.select("div.movie-list-index div.cartoon-box").map { div ->
val href = div.selectFirstOrThrow("a").attrAsAbsoluteUrl("href") val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href")
Manga( Manga(
id = generateUid(href), id = generateUid(href),
title = div.selectFirstOrThrow("h3").text(), title = div.selectFirstOrThrow("h3").text(),
@ -81,7 +81,6 @@ internal class ComicExtra(context: MangaLoaderContext) : PagedMangaParser(contex
} }
} }
override suspend fun getTags(): Set<MangaTag> { override suspend fun getTags(): Set<MangaTag> {
val doc = webClient.httpGet("https://$domain/popular-comic").parseHtml() val doc = webClient.httpGet("https://$domain/popular-comic").parseHtml()
return doc.select("li.tag-item a").mapNotNullToSet { a -> return doc.select("li.tag-item a").mapNotNullToSet { a ->
@ -146,5 +145,4 @@ internal class ComicExtra(context: MangaLoaderContext) : PagedMangaParser(contex
) )
} }
} }
} }

@ -49,7 +49,6 @@ internal class Comicastle(context: MangaLoaderContext) : PagedMangaParser(contex
} }
val postdata = "submit=Submit&search=" + query.urlEncoded() val postdata = "submit=Submit&search=" + query.urlEncoded()
webClient.httpPost(url, postdata).parseHtml() webClient.httpPost(url, postdata).parseHtml()
} else if (!tags.isNullOrEmpty()) { } else if (!tags.isNullOrEmpty()) {
val url = buildString { val url = buildString {
append("https://$domain/library/search/genre/") append("https://$domain/library/search/genre/")
@ -57,7 +56,6 @@ internal class Comicastle(context: MangaLoaderContext) : PagedMangaParser(contex
} }
val postdata = "submit=Submit&search=" + tag?.key.orEmpty() val postdata = "submit=Submit&search=" + tag?.key.orEmpty()
webClient.httpPost(url, postdata).parseHtml() webClient.httpPost(url, postdata).parseHtml()
} else { } else {
val url = buildString { val url = buildString {
append("https://$domain") append("https://$domain")
@ -75,7 +73,7 @@ internal class Comicastle(context: MangaLoaderContext) : PagedMangaParser(contex
return doc.select("div.card-body div.match-height div.col-6") return doc.select("div.card-body div.match-height div.col-6")
.map { div -> .map { div ->
val href = div.selectFirstOrThrow("a").attrAsAbsoluteUrl("href") val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href")
Manga( Manga(
id = generateUid(href), id = generateUid(href),
title = div.selectFirstOrThrow("p").text(), title = div.selectFirstOrThrow("p").text(),
@ -93,7 +91,6 @@ internal class Comicastle(context: MangaLoaderContext) : PagedMangaParser(contex
} }
} }
override suspend fun getTags(): Set<MangaTag> { override suspend fun getTags(): Set<MangaTag> {
val doc = webClient.httpGet("https://$domain/library/").parseHtml() val doc = webClient.httpGet("https://$domain/library/").parseHtml()
return doc.requireElementById("sidebar").selectFirstOrThrow(".card-body").select("button") return doc.requireElementById("sidebar").selectFirstOrThrow(".card-body").select("button")
@ -156,5 +153,4 @@ internal class Comicastle(context: MangaLoaderContext) : PagedMangaParser(contex
) )
} }
} }
} }

@ -52,11 +52,11 @@ internal class DynastyScans(context: MangaLoaderContext) : PagedMangaParser(cont
} }
val doc = webClient.httpGet(url).parseHtml() val doc = webClient.httpGet(url).parseHtml()
//There are no images on the search page // There are no images on the search page
if (!query.isNullOrEmpty()) { if (!query.isNullOrEmpty()) {
return doc.select("dl.chapter-list dd") return doc.select("dl.chapter-list dd")
.map { div -> .map { div ->
val href = div.selectFirstOrThrow("a").attrAsAbsoluteUrl("href") val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href")
Manga( Manga(
id = generateUid(href), id = generateUid(href),
title = div.selectFirstOrThrow("a").text(), title = div.selectFirstOrThrow("a").text(),
@ -81,7 +81,7 @@ internal class DynastyScans(context: MangaLoaderContext) : PagedMangaParser(cont
} else { } else {
return doc.select("li.span2") return doc.select("li.span2")
.map { div -> .map { div ->
val href = div.selectFirstOrThrow("a").attrAsAbsoluteUrl("href") val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href")
Manga( Manga(
id = generateUid(href), id = generateUid(href),
title = div.selectFirstOrThrow("div.caption").text(), title = div.selectFirstOrThrow("div.caption").text(),
@ -98,7 +98,6 @@ internal class DynastyScans(context: MangaLoaderContext) : PagedMangaParser(cont
) )
} }
} }
} }
override suspend fun getTags(): Set<MangaTag> = emptySet() override suspend fun getTags(): Set<MangaTag> = emptySet()
@ -169,4 +168,3 @@ internal class DynastyScans(context: MangaLoaderContext) : PagedMangaParser(cont
return pages return pages
} }
} }

@ -64,7 +64,7 @@ internal class KskMoe(context: MangaLoaderContext) : PagedMangaParser(context, M
return emptyList() return emptyList()
} }
return doc.requireElementById("galleries").select("article").map { div -> return doc.requireElementById("galleries").select("article").map { div ->
val href = div.selectFirstOrThrow("a").attrAsAbsoluteUrl("href") val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href")
Manga( Manga(
id = generateUid(href), id = generateUid(href),
title = div.selectLastOrThrow("h3 span").text(), title = div.selectLastOrThrow("h3 span").text(),
@ -72,7 +72,7 @@ internal class KskMoe(context: MangaLoaderContext) : PagedMangaParser(context, M
url = href, url = href,
publicUrl = href.toAbsoluteUrl(domain), publicUrl = href.toAbsoluteUrl(domain),
rating = RATING_UNKNOWN, rating = RATING_UNKNOWN,
isNsfw = false, isNsfw = true,
coverUrl = div.selectFirstOrThrow("img").src()?.toAbsoluteUrl(domain).orEmpty(), coverUrl = div.selectFirstOrThrow("img").src()?.toAbsoluteUrl(domain).orEmpty(),
tags = div.select("footer span").mapNotNullToSet { span -> tags = div.select("footer span").mapNotNullToSet { span ->
MangaTag( MangaTag(
@ -97,25 +97,23 @@ internal class KskMoe(context: MangaLoaderContext) : PagedMangaParser(context, M
} }
private suspend fun getTags(page: Int): Set<MangaTag> { private suspend fun getTags(page: Int): Set<MangaTag> {
val root = if (page == 1) { val url = if (page == 1) {
webClient.httpGet("https://${domain}/tags").parseHtml().body() "https://$domain/tags"
.getElementById("tags")
} else { } else {
webClient.httpGet("https://${domain}/tags/page/$page").parseHtml().body() "https://$domain/tags/page/$page"
.getElementById("tags")
} }
val root = webClient.httpGet(url).parseHtml().body().getElementById("tags")
return root?.parseTags().orEmpty() return root?.parseTags().orEmpty()
} }
private fun Element.parseTags() = select("section.tags div a").mapToSet { a -> private fun Element.parseTags() = select("section.tags div a").mapToSet { a ->
MangaTag( MangaTag(
key = a.attr("href").substringAfter("/tags/"), key = a.attr("href").substringAfterLast("/tags/"),
title = a.selectFirstOrThrow("span").text(), title = a.selectFirstOrThrow("span").text(),
source = source, source = source,
) )
} }
private val date = SimpleDateFormat("dd.MM.yyyy hh:mm 'UTC'", Locale.US) private val date = SimpleDateFormat("dd.MM.yyyy hh:mm 'UTC'", Locale.US)
override suspend fun getDetails(manga: Manga): Manga { override suspend fun getDetails(manga: Manga): Manga {
val doc = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() val doc = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml()
@ -123,7 +121,7 @@ internal class KskMoe(context: MangaLoaderContext) : PagedMangaParser(context, M
return manga.copy( return manga.copy(
tags = doc.requireElementById("metadata").select("main div:contains(Tag) a").mapNotNullToSet { a -> tags = doc.requireElementById("metadata").select("main div:contains(Tag) a").mapNotNullToSet { a ->
MangaTag( MangaTag(
key = a.attr("href").substringAfter("/tags/"), key = a.attr("href").substringAfterLast("/tags/"),
title = a.selectFirstOrThrow("span").text(), title = a.selectFirstOrThrow("span").text(),
source = source, source = source,
) )
@ -150,8 +148,7 @@ internal class KskMoe(context: MangaLoaderContext) : PagedMangaParser(context, M
) )
} }
// For the moment the pages are in poor quality.
//For the moment the pages are in poor quality.
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> { override suspend fun getPages(chapter: MangaChapter): List<MangaPage> {
val fullUrl = chapter.url.toAbsoluteUrl(domain) val fullUrl = chapter.url.toAbsoluteUrl(domain)
val doc = webClient.httpGet(fullUrl).parseHtml() val doc = webClient.httpGet(fullUrl).parseHtml()

@ -58,7 +58,7 @@ internal class LikeManga(context: MangaLoaderContext) : PagedMangaParser(context
} }
val doc = webClient.httpGet(url).parseHtml() val doc = webClient.httpGet(url).parseHtml()
return doc.select("div.card-body div.video").map { div -> return doc.select("div.card-body div.video").map { div ->
val href = div.selectFirstOrThrow("a").attrAsAbsoluteUrl("href") val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href")
Manga( Manga(
id = generateUid(href), id = generateUid(href),
title = div.selectFirstOrThrow("p.title-manga").text(), title = div.selectFirstOrThrow("p.title-manga").text(),
@ -134,7 +134,9 @@ internal class LikeManga(context: MangaLoaderContext) : PagedMangaParser(context
private suspend fun loadChapters(mangaId: Int, page: Int): List<MangaChapter> { private suspend fun loadChapters(mangaId: Int, page: Int): List<MangaChapter> {
val json = val json =
webClient.httpGet("https://$domain/?act=ajax&code=load_list_chapter&manga_id=$mangaId&page_num=$page&chap_id=0&keyword=") webClient.httpGet(
"https://$domain/?act=ajax&code=load_list_chapter&manga_id=$mangaId&page_num=$page&chap_id=0&keyword=",
)
.parseJson().getString("list_chap") .parseJson().getString("list_chap")
val chapters = json.split("wp-manga-chapter").drop(1) val chapters = json.split("wp-manga-chapter").drop(1)
return chapters.map { chapter -> return chapters.map { chapter ->

@ -59,7 +59,7 @@ internal class MangaGeko(context: MangaLoaderContext) : PagedMangaParser(context
val doc = webClient.httpGet(url).parseHtml() val doc = webClient.httpGet(url).parseHtml()
return doc.select("li.novel-item").map { div -> return doc.select("li.novel-item").map { div ->
val href = div.selectFirstOrThrow("a").attrAsAbsoluteUrl("href") val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href")
Manga( Manga(
id = generateUid(href), id = generateUid(href),
title = div.selectFirstOrThrow("h4").text(), title = div.selectFirstOrThrow("h4").text(),
@ -77,7 +77,6 @@ internal class MangaGeko(context: MangaLoaderContext) : PagedMangaParser(context
} }
} }
override suspend fun getTags(): Set<MangaTag> { override suspend fun getTags(): Set<MangaTag> {
val doc = webClient.httpGet("https://$domain/browse-comics/").parseHtml() val doc = webClient.httpGet("https://$domain/browse-comics/").parseHtml()
return doc.select("label.checkbox-inline").mapNotNullToSet { label -> return doc.select("label.checkbox-inline").mapNotNullToSet { label ->
@ -143,5 +142,4 @@ internal class MangaGeko(context: MangaLoaderContext) : PagedMangaParser(context
) )
} }
} }
} }

@ -23,7 +23,7 @@ class Manhwa18Parser(context: MangaLoaderContext) :
override suspend fun getFavicons(): Favicons { override suspend fun getFavicons(): Favicons {
return Favicons( return Favicons(
listOf( listOf(
Favicon("https://${domain}/uploads/logos/logo-mini.png", 92, null), Favicon("https://$domain/uploads/logos/logo-mini.png", 92, null),
), ),
domain, domain,
) )

@ -28,7 +28,7 @@ internal class Po2Scans(context: MangaLoaderContext) : MangaParser(context, Mang
} }
val doc = webClient.httpGet(url).parseHtml() val doc = webClient.httpGet(url).parseHtml()
return doc.select(".series-list").map { div -> return doc.select(".series-list").map { div ->
val href = div.selectFirstOrThrow("a").attrAsAbsoluteUrl("href") val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href")
Manga( Manga(
id = generateUid(href), id = generateUid(href),
title = div.selectFirstOrThrow("h2").text(), title = div.selectFirstOrThrow("h2").text(),

@ -55,7 +55,7 @@ internal class LireScan(context: MangaLoaderContext) : PagedMangaParser(context,
} }
return doc.select("div.sect__content.grid-items div.item-poster").map { div -> return doc.select("div.sect__content.grid-items div.item-poster").map { div ->
val href = div.selectFirstOrThrow("a").attrAsAbsoluteUrl("href") val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href")
Manga( Manga(
id = generateUid(href), id = generateUid(href),
title = div.select(".item-poster__title").text(), title = div.select(".item-poster__title").text(),

@ -41,7 +41,6 @@ internal class ScantradUnion(context: MangaLoaderContext) : PagedMangaParser(con
append(page.toString()) append(page.toString())
append("/?s=") append("/?s=")
append(query.urlEncoded()) append(query.urlEncoded())
} }
!tags.isNullOrEmpty() -> { !tags.isNullOrEmpty() -> {
@ -55,7 +54,6 @@ internal class ScantradUnion(context: MangaLoaderContext) : PagedMangaParser(con
} }
else -> { else -> {
if (sortOrder == SortOrder.ALPHABETICAL) { if (sortOrder == SortOrder.ALPHABETICAL) {
append("/manga/") append("/manga/")
append("/page/") append("/page/")
@ -65,7 +63,6 @@ internal class ScantradUnion(context: MangaLoaderContext) : PagedMangaParser(con
if (sortOrder == SortOrder.UPDATED) { if (sortOrder == SortOrder.UPDATED) {
append("") append("")
} }
} }
} }
} }
@ -74,7 +71,7 @@ internal class ScantradUnion(context: MangaLoaderContext) : PagedMangaParser(con
val root = doc.requireElementById("dernierschapitres") val root = doc.requireElementById("dernierschapitres")
return root.select("div.colonne") return root.select("div.colonne")
.map { article -> .map { article ->
val href = article.selectFirstOrThrow("a.index-top4-a").attrAsAbsoluteUrl("href") val href = article.selectFirstOrThrow("a.index-top4-a").attrAsRelativeUrl("href")
Manga( Manga(
id = generateUid(href), id = generateUid(href),
title = article.select(".carteinfos a").text(), title = article.select(".carteinfos a").text(),
@ -94,7 +91,7 @@ internal class ScantradUnion(context: MangaLoaderContext) : PagedMangaParser(con
val root = doc.requireElementById("main") val root = doc.requireElementById("main")
return root.select("article.post-outer") return root.select("article.post-outer")
.map { article -> .map { article ->
val href = article.selectFirstOrThrow("a.thumb-link").attrAsAbsoluteUrl("href") val href = article.selectFirstOrThrow("a.thumb-link").attrAsRelativeUrl("href")
Manga( Manga(
id = generateUid(href), id = generateUid(href),
title = article.select(".index-post-header a").text(), title = article.select(".index-post-header a").text(),
@ -111,8 +108,6 @@ internal class ScantradUnion(context: MangaLoaderContext) : PagedMangaParser(con
) )
} }
} }
} }
override suspend fun getDetails(manga: Manga): Manga { override suspend fun getDetails(manga: Manga): Manga {

@ -1,6 +1,5 @@
package org.koitharu.kotatsu.parsers.site.heancmsalt package org.koitharu.kotatsu.parsers.site.heancmsalt
import kotlinx.coroutines.coroutineScope
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.PagedMangaParser
import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.config.ConfigKey
@ -26,7 +25,6 @@ internal abstract class HeanCmsAlt(
protected open val listUrl = "/comics" protected open val listUrl = "/comics"
protected open val datePattern = "MMMM d, yyyy" protected open val datePattern = "MMMM d, yyyy"
init { init {
paginator.firstPage = 1 paginator.firstPage = 1
searchPaginator.firstPage = 1 searchPaginator.firstPage = 1
@ -41,7 +39,7 @@ internal abstract class HeanCmsAlt(
tags: Set<MangaTag>?, tags: Set<MangaTag>?,
sortOrder: SortOrder, sortOrder: SortOrder,
): List<Manga> { ): List<Manga> {
//No search or tag // No search or tag
if (!query.isNullOrEmpty()) { if (!query.isNullOrEmpty()) {
return emptyList() return emptyList()
} }
@ -82,11 +80,12 @@ internal abstract class HeanCmsAlt(
protected open val selectChapter = "ul.MuiList-root a" protected open val selectChapter = "ul.MuiList-root a"
protected open val selectChapterTitle = "div.MuiListItemText-multiline span" protected open val selectChapterTitle = "div.MuiListItemText-multiline span"
protected open val selectChapterDate = "div.MuiListItemText-multiline p" protected open val selectChapterDate = "div.MuiListItemText-multiline p"
override suspend fun getDetails(manga: Manga): Manga = coroutineScope {
override suspend fun getDetails(manga: Manga): Manga {
val fullUrl = manga.url.toAbsoluteUrl(domain) val fullUrl = manga.url.toAbsoluteUrl(domain)
val doc = webClient.httpGet(fullUrl).parseHtml() val doc = webClient.httpGet(fullUrl).parseHtml()
val dateFormat = SimpleDateFormat(datePattern, sourceLocale) val dateFormat = SimpleDateFormat(datePattern, sourceLocale)
manga.copy( return manga.copy(
altTitle = doc.selectFirst(selectAlt)?.text().orEmpty(), altTitle = doc.selectFirst(selectAlt)?.text().orEmpty(),
description = doc.selectFirstOrThrow(selectDesc).html(), description = doc.selectFirstOrThrow(selectDesc).html(),
chapters = doc.select(selectChapter) chapters = doc.select(selectChapter)

@ -27,7 +27,6 @@ internal class Bakai(context: MangaLoaderContext) : PagedMangaParser(context, Ma
tags: Set<MangaTag>?, tags: Set<MangaTag>?,
sortOrder: SortOrder, sortOrder: SortOrder,
): List<Manga> { ): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)
@ -45,7 +44,6 @@ internal class Bakai(context: MangaLoaderContext) : PagedMangaParser(context, Ma
} }
append("&quick=1&type=cms_records1&page=") append("&quick=1&type=cms_records1&page=")
append(page.toString()) append(page.toString())
} else { } else {
append("/hentai/") append("/hentai/")
append("page/") append("page/")
@ -54,10 +52,9 @@ internal class Bakai(context: MangaLoaderContext) : PagedMangaParser(context, Ma
} }
val doc = webClient.httpGet(url).parseHtml() val doc = webClient.httpGet(url).parseHtml()
if (!tags.isNullOrEmpty() or !query.isNullOrEmpty()) { if (!tags.isNullOrEmpty() or !query.isNullOrEmpty()) {
return doc.select("ol.ipsStream li.ipsStreamItem") return doc.select("ol.ipsStream li.ipsStreamItem")
.map { div -> .map { div ->
val href = div.selectFirstOrThrow("div.ipsStreamItem_snippet a").attrAsAbsoluteUrl("href") val href = div.selectFirstOrThrow("div.ipsStreamItem_snippet a").attrAsRelativeUrl("href")
Manga( Manga(
id = generateUid(href), id = generateUid(href),
title = div.selectFirstOrThrow("h2.ipsStreamItem_title").text(), title = div.selectFirstOrThrow("h2.ipsStreamItem_title").text(),

@ -42,7 +42,6 @@ internal class BrMangas(context: MangaLoaderContext) : PagedMangaParser(context,
} }
append("/?s=") append("/?s=")
append(query.urlEncoded()) append(query.urlEncoded())
} else { } else {
when (sortOrder) { when (sortOrder) {
SortOrder.POPULARITY -> append("/") SortOrder.POPULARITY -> append("/")
@ -64,7 +63,7 @@ internal class BrMangas(context: MangaLoaderContext) : PagedMangaParser(context,
} }
return item.map { div -> return item.map { div ->
val href = div.selectFirstOrThrow("a").attrAsAbsoluteUrl("href") val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href")
Manga( Manga(
id = generateUid(href), id = generateUid(href),
title = div.selectFirstOrThrow("h2").text(), title = div.selectFirstOrThrow("h2").text(),

@ -26,7 +26,6 @@ internal class GoldenManga(context: MangaLoaderContext) : PagedMangaParser(conte
tags: Set<MangaTag>?, tags: Set<MangaTag>?,
sortOrder: SortOrder, sortOrder: SortOrder,
): List<Manga> { ): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)
@ -48,7 +47,7 @@ internal class GoldenManga(context: MangaLoaderContext) : PagedMangaParser(conte
val doc = webClient.httpGet(url).parseHtml() val doc = webClient.httpGet(url).parseHtml()
return doc.select("section.row div.mangas") return doc.select("section.row div.mangas")
.map { div -> .map { div ->
val href = div.selectFirstOrThrow("a").attrAsAbsoluteUrl("href") val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href")
Manga( Manga(
id = generateUid(href), id = generateUid(href),
title = div.selectFirstOrThrow("a h3").text(), title = div.selectFirstOrThrow("a h3").text(),
@ -102,7 +101,6 @@ internal class GoldenManga(context: MangaLoaderContext) : PagedMangaParser(conte
author = root.select("h5.cg_color a")[1].text(), author = root.select("h5.cg_color a")[1].text(),
description = root.getElementById("manga_capitulo_descricao")?.html(), description = root.getElementById("manga_capitulo_descricao")?.html(),
chapters = root.requireElementById("capitulos").select("li") chapters = root.requireElementById("capitulos").select("li")
.mapChapters(reversed = true) { i, div -> .mapChapters(reversed = true) { i, div ->
val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href") val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href")
val dateText = div.selectFirstOrThrow("div.col-sm-5 span").text() val dateText = div.selectFirstOrThrow("div.col-sm-5 span").text()

@ -28,7 +28,7 @@ internal class SadScans(context: MangaLoaderContext) : MangaParser(context, Mang
} }
val doc = webClient.httpGet(url).parseHtml() val doc = webClient.httpGet(url).parseHtml()
return doc.select(".series-list").map { div -> return doc.select(".series-list").map { div ->
val href = div.selectFirstOrThrow("a").attrAsAbsoluteUrl("href") val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href")
Manga( Manga(
id = generateUid(href), id = generateUid(href),
title = div.selectFirstOrThrow("h2").text(), title = div.selectFirstOrThrow("h2").text(),

Loading…
Cancel
Save