diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/FoolSlideParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/FoolSlideParser.kt index c7e7696a6..6d937b78d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/FoolSlideParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/FoolSlideParser.kt @@ -114,7 +114,7 @@ internal abstract class FoolSlideParser( manga.copy( tags = emptySet(), - coverUrl = doc.selectFirst(".thumbnail img")?.src().orEmpty(),// for manga result on search + coverUrl = doc.selectFirst(".thumbnail img")?.src() ?: manga.coverUrl, description = desc, altTitle = null, author = author, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/en/AssortedScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/en/AssortedScans.kt index bbcaa1294..1e9152e2b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/en/AssortedScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/en/AssortedScans.kt @@ -8,7 +8,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.* import org.koitharu.kotatsu.parsers.site.foolslide.FoolSlideParser import org.koitharu.kotatsu.parsers.util.* -import java.util.ArrayList @MangaSourceParser("ASSORTEDSCANS", "AssortedScans", "en") @@ -28,13 +27,17 @@ internal class AssortedScans(context: MangaLoaderContext) : val doc = if (!query.isNullOrEmpty()) { + if (page > 1) { + return emptyList() + } + val url = buildString { - append("https://$domain/$searchUrl") + append("https://") + append(domain) + append('/') + append(searchUrl) append("?q=") append(query.urlEncoded()) - if (page > 1) { - return emptyList() - } } webClient.httpGet(url).parseHtml() } else { @@ -87,8 +90,7 @@ internal class AssortedScans(context: MangaLoaderContext) : val author = doc.getElementById("series-authors")?.selectFirst("div.author")?.text() val state = doc.getElementById("series-status")?.selectFirst("span")?.text() manga.copy( - tags = emptySet(), - coverUrl = doc.selectFirst(".cover")?.src().orEmpty(),// for manga result on search + coverUrl = doc.selectFirst(".cover")?.src() ?: manga.coverUrl, description = desc, altTitle = alt, author = author, @@ -120,22 +122,23 @@ internal class AssortedScans(context: MangaLoaderContext) : } override suspend fun getPages(chapter: MangaChapter): List { - val chapterUrl = chapter.url.toAbsoluteUrl(domain) - val docs = webClient.httpGet(chapterUrl).parseHtml() - val max = docs.selectFirstOrThrow(".curr-page input").attr("data-max").toInt() + 1 - val pages = ArrayList(max) - for (i in 1 until max) { - val pagesUrl = chapterUrl + i - val page = webClient.httpGet(pagesUrl).parseHtml().requireElementById("page-image").attr("src") - pages.add( - MangaPage( - id = generateUid(page), - url = page, - preview = null, - source = source, - ), + val doc = webClient.httpGet(chapter.url.toAbsoluteUrl(domain)).parseHtml() + return doc.body().select(".page-list .dropdown-list li a").map { a -> + val url = a.attr("href").toRelativeUrl(domain) + MangaPage( + id = generateUid(url), + url = url, + preview = null, + source = source, ) } - return pages } + + override suspend fun getPageUrl(page: MangaPage): String { + val doc = webClient.httpGet(page.url.toAbsoluteUrl(domain)).parseHtml() + val root = doc.body() + return root.requireElementById("page-image").attr("src") ?: doc.parseFailed("Page image not found") + } + + } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/en/Seinagi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/en/Seinagi.kt index f6a19fb36..e365699a5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/en/Seinagi.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/en/Seinagi.kt @@ -39,8 +39,7 @@ internal class Seinagi(context: MangaLoaderContext) : } manga.copy( - tags = emptySet(), - coverUrl = doc.selectFirst(".thumbnail img")?.src().orEmpty(),// for manga result on search + coverUrl = doc.selectFirst(".thumbnail img")?.src() ?: manga.coverUrl, description = desc, altTitle = null, author = author, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/es/Pzykosis666hFansub.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/es/Pzykosis666hFansub.kt index 8a2deaca3..3a60241bb 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/es/Pzykosis666hFansub.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/es/Pzykosis666hFansub.kt @@ -38,7 +38,7 @@ internal class Pzykosis666hFansub(context: MangaLoaderContext) : manga.copy( tags = emptySet(), - coverUrl = doc.selectFirst(".thumbnail img")?.src().orEmpty(),// for manga result on search + coverUrl = doc.selectFirst(".thumbnail img")?.src() ?: manga.coverUrl, description = desc, altTitle = null, author = author, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/es/SeinagiAdulto.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/es/SeinagiAdulto.kt index 57440d4e8..f159dee72 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/es/SeinagiAdulto.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/foolslide/es/SeinagiAdulto.kt @@ -44,7 +44,6 @@ internal class SeinagiAdulto(context: MangaLoaderContext) : } manga.copy( - tags = emptySet(), coverUrl = doc.selectFirst(".thumbnail img")?.src().orEmpty(),// for manga result on search description = desc, altTitle = null, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/Manhwa18Cc.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/Manhwa18Cc.kt index f1e3077ae..a5cdab11c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/Manhwa18Cc.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/Manhwa18Cc.kt @@ -117,7 +117,7 @@ internal class Manhwa18Cc(context: MangaLoaderContext) : val doc = webClient.httpGet(fullUrl).parseHtml() val root = doc.body().selectFirstOrThrow(selectBodyPage) return root.select("img").map { img -> - val url = img.src().orEmpty() + val url = img.src() ?: img.parseFailed("Image src not found") MangaPage( id = generateUid(url), url = url, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/InstaManhwa.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/InstaManhwa.kt index 90908052a..7249c8faf 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/InstaManhwa.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/InstaManhwa.kt @@ -90,8 +90,8 @@ internal class InstaManhwa(context: MangaLoaderContext) : author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(), state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText()?.trim() ?.lowercase()) { - "Ongoing" -> MangaState.ONGOING - "Completed " -> MangaState.FINISHED + "ongoing" -> MangaState.ONGOING + "completed " -> MangaState.FINISHED else -> null }, source = source, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TmoManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TmoManga.kt index 4517d8df6..8ec8ac63f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TmoManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TmoManga.kt @@ -65,7 +65,7 @@ internal class TmoManga(context: MangaLoaderContext) : val doc = webClient.httpGet(url).parseHtml() return doc.select("div.page-item-detail").map { div -> - val href = div.selectFirst("a")?.attrAsRelativeUrlOrNull("href") ?: div.parseFailed("Link not found") + val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href") Manga( id = generateUid(href), url = href, @@ -85,8 +85,8 @@ internal class TmoManga(context: MangaLoaderContext) : override suspend fun getChapters(manga: Manga, doc: Document): List { return doc.body().select(selectChapter).mapChapters(reversed = true) { i, li -> - val a = li.selectFirst("a") - val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") + val a = li.selectFirstOrThrow("a") + val href = a.attrAsRelativeUrl("href") val link = href + stylepage val name = a.selectFirst("p")?.text() ?: a.ownText() MangaChapter( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/TitanManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/TitanManga.kt index 754552a4b..cf71a49ae 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/TitanManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/TitanManga.kt @@ -18,8 +18,8 @@ internal class TitanManga(context: MangaLoaderContext) : val url = mangaUrl.toAbsoluteUrl(domain).removeSuffix('/') + "/ajax/chapters/" val doc = webClient.httpPost(url, emptyMap()).parseHtml() return doc.select(selectChapter).mapChapters(reversed = true) { i, li -> - val a = li.selectFirst("a") - val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") + val a = li.selectFirstOrThrow("a") + val href = a.attrAsRelativeUrl("href") val link = href + stylepage val name = a.selectFirst("p")?.text() ?: a.ownText() MangaChapter( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/all/ManhuaScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/all/ManhuaScan.kt index b0f75f0db..8c0876a3c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/all/ManhuaScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/all/ManhuaScan.kt @@ -23,7 +23,9 @@ internal class ManhuaScan(context: MangaLoaderContext) : val url = buildString { append("https://") append(domain) - append("/$listUrl?sort=") + append('/') + append(listUrl) + append("?sort=") when (sortOrder) { SortOrder.POPULARITY -> append("views") SortOrder.UPDATED -> append("updated_at") @@ -84,19 +86,14 @@ internal class ManhuaScan(context: MangaLoaderContext) : val script = docs.selectFirstOrThrow("script:containsData(var chapImages)") val images = script.data().substringAfter("= \"").substringBefore("\";").split(",") - - val pages = ArrayList() - images.map { - pages.add( - MangaPage( - id = generateUid(it), - url = it, - preview = null, - source = source, - ), + return images.map { + MangaPage( + id = generateUid(it), + url = it, + preview = null, + source = source, ) } - return pages } } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Constellarcomic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Constellarcomic.kt index d582c275a..deb021492 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Constellarcomic.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Constellarcomic.kt @@ -18,7 +18,7 @@ internal class Constellarcomic(context: MangaLoaderContext) : val url = element.selectFirst("a")?.attrAsRelativeUrl("href") ?: return@mapChapters null MangaChapter( id = generateUid(url), - name = element.selectFirst(".chapternum")?.text() ?: "Chapter ${index + 1}", + name = element.selectFirst(".chapternum")?.textOrNull() ?: "Chapter ${index + 1}", url = url, number = index + 1, scanlator = null, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/TuManhwas.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/TuManhwas.kt index fae9588e9..d9fc72502 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/TuManhwas.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/TuManhwas.kt @@ -57,7 +57,7 @@ internal class TuManhwas(context: MangaLoaderContext) : val url = element.selectFirst("a")?.attrAsRelativeUrl("href") ?: return@mapChapters null MangaChapter( id = generateUid(url), - name = element.selectFirst(".chapternum")?.text() ?: "Chapter ${index + 1}", + name = element.selectFirst(".chapternum")?.textOrNull() ?: "Chapter ${index + 1}", url = url, number = index + 1, scanlator = null, @@ -77,9 +77,9 @@ internal class TuManhwas(context: MangaLoaderContext) : val stateSelect = docs.selectFirst(".tsinfo div:contains(Estado)") val state = stateSelect?.lastElementChild() val mangaState = state?.let { - when (it.text()) { + when (it.text().lowercase()) { "publishing" -> MangaState.ONGOING - "Terminado" -> MangaState.FINISHED + "terminado" -> MangaState.FINISHED else -> null } } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/ar/Onma.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/ar/Onma.kt index bf20b1df3..2ffee433d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/ar/Onma.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/ar/Onma.kt @@ -72,7 +72,7 @@ internal class Onma(context: MangaLoaderContext) : return doc.select("div.manga-item").map { div -> val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href") - val deeplink = href.substringAfterLast("/") + val deeplink = href.substringAfterLast('/') Manga( id = generateUid(href), url = href,