From 09500c0734402e46987e13b1e4d062713e8403fb Mon Sep 17 00:00:00 2001 From: devi Date: Sat, 7 Oct 2023 17:10:29 +0200 Subject: [PATCH] add sources and fix --- .../kotatsu/parsers/site/all/HentaiFox.kt | 178 ++++++++++++++++++ .../kotatsu/parsers/site/ar/FlixScans.kt | 163 ++++++++++++++++ .../kotatsu/parsers/site/ar/MangaStorm.kt | 123 ++++++++++++ .../kotatsu/parsers/site/fr/LugnicaScans.kt | 4 + .../parsers/site/madara/MadaraParser.kt | 39 ++-- .../kotatsu/parsers/site/madara/all/Ero18x.kt | 2 +- .../parsers/site/madara/all/MangaTop.kt | 2 +- .../parsers/site/madara/all/ManhwaRaw.kt | 2 +- .../parsers/site/madara/all/ManyToonClub.kt | 2 +- .../parsers/site/madara/ar/GateManga.kt | 2 +- .../parsers/site/madara/ar/MangaLeks.kt | 2 +- .../parsers/site/madara/ar/Manga_Lek.kt | 2 +- .../parsers/site/madara/ar/Mangarbic.kt | 2 +- .../parsers/site/madara/ar/Mangaspark.kt | 2 +- .../site/madara/ar/NijiTranslations.kt | 2 +- .../parsers/site/madara/en/AdultWebtoon.kt | 2 +- .../parsers/site/madara/en/Astrallibrary.kt | 2 +- .../parsers/site/madara/en/BlogManga.kt | 2 +- .../parsers/site/madara/en/BoysLove.kt | 2 +- .../parsers/site/madara/en/CoffeeMangaTop.kt | 2 +- .../parsers/site/madara/en/CreepyScans.kt | 2 +- .../parsers/site/madara/en/FreeComicOnline.kt | 2 +- .../parsers/site/madara/en/GourmetScans.kt | 2 +- .../kotatsu/parsers/site/madara/en/HManhwa.kt | 2 +- .../parsers/site/madara/en/HentaiManga.kt | 2 +- .../parsers/site/madara/en/HentaiWebtoon.kt | 2 +- .../parsers/site/madara/en/HentaixComic.kt | 2 +- .../parsers/site/madara/en/HentaixYuri.kt | 2 +- .../parsers/site/madara/en/Hentaixdickgirl.kt | 4 +- .../parsers/site/madara/en/InstaManhwa.kt | 4 +- .../parsers/site/madara/en/IsekaiScan.kt | 2 +- .../parsers/site/madara/en/LoliconMobi.kt | 2 +- .../parsers/site/madara/en/MangaBob.kt | 2 +- .../parsers/site/madara/en/MangaClashTv.kt | 2 +- .../parsers/site/madara/en/MangaDass.kt | 2 +- .../parsers/site/madara/en/MangaDinoTop.kt | 2 +- .../parsers/site/madara/en/MangaDna.kt | 2 +- .../parsers/site/madara/en/MangaForFree.kt | 3 +- .../parsers/site/madara/en/MangaFoxFull.kt | 2 +- .../parsers/site/madara/en/MangaFreak.kt | 2 +- .../parsers/site/madara/en/MangaLeveling.kt | 2 +- .../parsers/site/madara/en/MangaOwlBlog.kt | 2 +- .../parsers/site/madara/en/MangaPure.kt | 2 +- .../parsers/site/madara/en/MangaRawInfo.kt | 2 +- .../parsers/site/madara/en/MangaRocky.kt | 2 +- .../parsers/site/madara/en/MangaUpdatesTop.kt | 2 +- .../parsers/site/madara/en/Manganelo.kt | 2 +- .../parsers/site/madara/en/MangaowlOne.kt | 2 +- .../kotatsu/parsers/site/madara/en/Mangax1.kt | 2 +- .../parsers/site/madara/en/ManhuaScanInfo.kt | 2 +- .../parsers/site/madara/en/Manhuaes.kt | 2 +- .../parsers/site/madara/en/Manhwa18App.kt | 2 +- .../parsers/site/madara/en/Manhwa18Org.kt | 3 +- .../parsers/site/madara/en/ManhwaRawCom.kt | 2 +- .../parsers/site/madara/en/ManhwaTop.kt | 4 +- .../parsers/site/madara/en/ManyComic.kt | 2 +- .../parsers/site/madara/en/MilfToon.kt | 2 +- .../parsers/site/madara/en/MortalsGroove.kt | 2 +- .../parsers/site/madara/en/MurimScan.kt | 2 +- .../parsers/site/madara/en/NightComic.kt | 2 +- .../parsers/site/madara/en/Novelmic.kt | 2 +- .../site/madara/en/PetrotechSociety.kt | 2 +- .../parsers/site/madara/en/PlatinumScans.kt | 2 +- .../parsers/site/madara/en/ReadManhua.kt | 2 +- .../parsers/site/madara/en/SectScans.kt | 12 ++ .../parsers/site/madara/en/StkissMangaBlog.kt | 2 +- .../parsers/site/madara/en/StkissMangaTv.kt | 2 +- .../parsers/site/madara/en/Theguildscans.kt | 2 +- .../parsers/site/madara/en/WebComic.kt | 2 +- .../kotatsu/parsers/site/madara/en/Webtoon.kt | 2 +- .../parsers/site/madara/en/Webtoons.kt | 2 +- .../parsers/site/madara/en/YaoiMobi.kt | 2 +- .../parsers/site/madara/en/ZuttoManga.kt | 2 +- .../parsers/site/madara/es/KoinoboriScan.kt | 2 +- .../parsers/site/madara/es/ManhwaEs.kt | 2 +- .../parsers/site/madara/es/ManhwaLatino.kt | 2 +- .../parsers/site/madara/es/RagnarokScan.kt | 2 +- .../parsers/site/madara/es/Stickhorse.kt | 2 +- .../parsers/site/madara/es/TmoManga.kt | 2 +- .../kotatsu/parsers/site/madara/fr/FrScan.kt | 5 +- .../parsers/site/madara/fr/Kataitake.kt | 2 +- .../parsers/site/madara/id/GourmetScansId.kt | 2 +- .../kotatsu/parsers/site/madara/id/Mgkomik.kt | 2 +- .../parsers/site/madara/ja/HachiManga.kt | 2 +- .../parsers/site/madara/pt/AkumanoTenshi.kt | 2 +- .../parsers/site/madara/pt/CafecomYaoi.kt | 2 +- .../parsers/site/madara/pt/Pirulitorosa.kt | 2 +- .../parsers/site/madara/pt/WickedWitchScan.kt | 2 +- .../parsers/site/madara/pt/ZeroScan.kt | 2 +- .../parsers/site/madara/ru/BestManga.kt | 2 +- .../parsers/site/madara/ru/MangaMammy.kt | 2 +- .../parsers/site/madara/ru/MangaoneLove.kt | 2 +- .../parsers/site/madara/th/KingsManga.kt | 2 +- .../parsers/site/madara/th/NekoPost.kt | 2 +- .../kotatsu/parsers/site/madara/tr/Anikiga.kt | 2 +- .../parsers/site/madara/tr/ArazNovel.kt | 2 +- .../site/madara/tr/Cizgiromanarsivi.kt | 2 +- .../parsers/site/madara/tr/EsoManga.kt | 2 +- .../parsers/site/madara/tr/Jiangzaitoon.kt | 2 +- .../parsers/site/madara/tr/Timenaight.kt | 2 +- .../parsers/site/madara/tr/TitanManga.kt | 2 +- .../parsers/site/madara/vi/HentaiCube.kt | 2 +- .../site/mangareader/MangaReaderParser.kt | 6 +- .../es/AiyuMangaScanlation.kt | 9 +- .../parsers/site/mangareader/fr/LelManga.kt | 3 + .../parsers/site/mmrcms/MmrcmsParser.kt | 60 +++--- .../parsers/site/mmrcms/fr/MangaScan.kt | 4 +- .../parsers/site/pt/UnionMangasParser.kt | 21 +-- .../kotatsu/parsers/site/vi/Truyenqq.kt | 134 +++++++++++++ .../koitharu/kotatsu/parsers/util/Jsoup.kt | 2 +- 110 files changed, 788 insertions(+), 173 deletions(-) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/HentaiFox.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/FlixScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/MangaStorm.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/SectScans.kt rename src/main/kotlin/org/koitharu/kotatsu/parsers/site/{madara => mangareader}/es/AiyuMangaScanlation.kt (52%) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/Truyenqq.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/HentaiFox.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/HentaiFox.kt new file mode 100644 index 00000000..e6a766c4 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/HentaiFox.kt @@ -0,0 +1,178 @@ +package org.koitharu.kotatsu.parsers.site.all + +import androidx.collection.ArraySet +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.coroutineScope +import org.jsoup.nodes.Element +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.PagedMangaParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.* +import org.koitharu.kotatsu.parsers.util.* +import java.util.* + +@MangaSourceParser("HENTAIFOX", "Hentai Fox", type = ContentType.HENTAI) +internal class HentaiFox(context: MangaLoaderContext) : PagedMangaParser(context, MangaSource.HENTAIFOX, 20) { + + override val sortOrders: Set = EnumSet.of(SortOrder.UPDATED) + override val configKeyDomain = ConfigKey.Domain("hentaifox.com") + + override suspend fun getListPage( + page: Int, + query: String?, + tags: Set?, + sortOrder: SortOrder, + ): List { + val tag = tags.oneOrThrowIfMany() + + val url = buildString { + append("https://$domain") + if (!tags.isNullOrEmpty()) { + append("/tag/") + append(tag?.key.orEmpty()) + if (page > 1) { + append("/pag/") + append(page) + append("/") + } + } else if (!query.isNullOrEmpty()) { + append("/search/?q=") + append(query.urlEncoded()) + if (page > 1) { + append("&page=") + append(page) + } + } else { + if (page > 2) { + append("/pag/") + append(page) + append("/") + } else if (page > 1) { + append("/page/") + append(page) + append("/") + } + } + } + val doc = webClient.httpGet(url).parseHtml() + return doc.select(".lc_galleries .thumb").map { div -> + val href = div.selectFirstOrThrow(".inner_thumb a").attrAsRelativeUrl("href") + Manga( + id = generateUid(href), + title = div.select("h2.g_title").text(), + altTitle = null, + url = href, + publicUrl = href.toAbsoluteUrl(domain), + rating = RATING_UNKNOWN, + isNsfw = isNsfwSource, + coverUrl = div.selectFirstOrThrow("img").src().orEmpty(), + tags = emptySet(), + state = null, + author = null, + source = source, + ) + } + } + + override suspend fun getTags(): Set { + val root = webClient.httpGet("https://$domain/tags/").parseHtml() + val totalPagesTags = root.select("ul.pagination a.page-link").dropLast(1).last().text().toInt() + return coroutineScope { + (1..totalPagesTags).map { page -> + async { getTags(page) } + } + }.awaitAll().flattenTo(ArraySet(360)) + } + + private suspend fun getTags(page: Int): Set { + val url = "https://$domain/tags/pag/$page/" + val root = webClient.httpGet(url).parseHtml() + return root.parseTags() + } + + private fun Element.parseTags() = select(".list_tags a.tag_btn").mapToSet { it -> + val key = it.attr("href").removeSuffix('/').substringAfterLast('/') + MangaTag( + key = key, + title = it.selectFirstOrThrow("h3").text(), + source = source, + ) + } + + + override suspend fun getDetails(manga: Manga): Manga { + val doc = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() + val urlChapters = manga.url.replace("/gallery/", "/g/") + "1/" + return manga.copy( + altTitle = null, + tags = doc.select("ul.tags a.tag_btn ").mapNotNullToSet { + val key = it.attr("href").removeSuffix('/').substringAfterLast('/') + MangaTag( + key = key, + title = it.html().substringBefore(" { + val doc = webClient.httpGet(seed.url.toAbsoluteUrl(domain)).parseHtml() + val root = doc.body().selectFirstOrThrow(".related_galleries") + return root.select("div.thumb").mapNotNull { div -> + val a = div.selectFirst(".inner_thumb a") ?: return@mapNotNull null + val href = a.attrAsRelativeUrl("href") + Manga( + id = generateUid(href), + url = href, + publicUrl = href.toAbsoluteUrl(a.host ?: domain), + altTitle = null, + title = div.selectFirstOrThrow("h2.g_title").text(), + author = null, + coverUrl = div.selectFirst("img")?.src().orEmpty(), + tags = emptySet(), + rating = RATING_UNKNOWN, + state = null, + isNsfw = isNsfwSource, + source = source, + ) + } + } + + override suspend fun getPages(chapter: MangaChapter): List { + val doc = webClient.httpGet(chapter.url.toAbsoluteUrl(domain)).parseHtml() + val totalPages = doc.selectFirstOrThrow(".total_pages").text().toInt() + val rawUrl = chapter.url.replace("/1/", "/") + return (1..totalPages).map { + val url = "$rawUrl$it/" + MangaPage( + id = generateUid(url), + url = url, + preview = null, + source = source, + ) + } + } + + override suspend fun getPageUrl(page: MangaPage): String { + val doc = webClient.httpGet(page.url.toAbsoluteUrl(domain)).parseHtml() + val root = doc.body() + return root.requireElementById("gimg").attr("data-src") ?: doc.parseFailed("Page image not found") + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/FlixScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/FlixScans.kt new file mode 100644 index 00000000..919532ce --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/FlixScans.kt @@ -0,0 +1,163 @@ +package org.koitharu.kotatsu.parsers.site.ar + +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope +import org.json.JSONArray +import org.json.JSONObject +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.PagedMangaParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.* +import org.koitharu.kotatsu.parsers.util.* +import org.koitharu.kotatsu.parsers.util.json.mapJSON +import org.koitharu.kotatsu.parsers.util.json.mapJSONIndexed +import java.text.SimpleDateFormat +import java.util.* + +@MangaSourceParser("FLIXSCANS", "Flix Scans", "ar") +internal class FlixScans(context: MangaLoaderContext) : PagedMangaParser(context, MangaSource.FLIXSCANS, 18) { + + override val sortOrders: Set = EnumSet.of(SortOrder.UPDATED) + override val configKeyDomain = ConfigKey.Domain("flixscans.com") + + override suspend fun getListPage( + page: Int, + query: String?, + tags: Set?, + sortOrder: SortOrder, + ): List { + val json = if (!query.isNullOrEmpty()) { + if (page > 1) { + return emptyList() + } + val url = "https://api.$domain/api/v1/search/serie" + val body = JSONObject() + body.put("title", query.urlEncoded()) + webClient.httpPost(url, body).parseJson().getJSONArray("data") + } else if (!tags.isNullOrEmpty()) { + if (page > 1) { + return emptyList() + } + val tagQuery = tags.joinToString(separator = ",") { it.key } + val url = "https://api.$domain/api/v1/search/advance?=&genres=$tagQuery&serie_type=webtoon" + webClient.httpGet(url).parseJson().getJSONArray("data") + } else { + val url = "https://api.$domain/api/v1/webtoon/homepage/latest/home?page=$page" + webClient.httpGet(url).parseJson().getJSONArray("data") + } + return json.mapJSON { j -> + val href = "https://$domain/series/${j.getString("prefix")}-${j.getString("id")}-${j.getString("slug")}" + val cover = "https://api.$domain/storage/" + j.getString("thumbnail") + Manga( + id = generateUid(href), + title = j.getString("title"), + altTitle = null, + url = href, + publicUrl = href.toAbsoluteUrl(domain), + rating = RATING_UNKNOWN, + isNsfw = false, + coverUrl = cover, + tags = emptySet(), + state = when (j.getString("status")) { + "ongoing" -> MangaState.ONGOING + "completed" -> MangaState.FINISHED + else -> null + }, + author = null, + source = source, + ) + } + } + + override suspend fun getTags(): Set { + val doc = webClient.httpGet("https://$domain/search/advance").parseHtml() + val json = JSONArray(doc.requireElementById("__NUXT_DATA__").data()) + val tagsList = json.getJSONArray(3).toString().replace("[", "").replace("]", "").split(",") + return tagsList.mapNotNullToSet { idTag -> + val id = idTag.toInt() + val idKey = json.getJSONObject(id).getInt("id") + val key = json.get(idKey).toString() + val idName = json.getJSONObject(id).getInt("name") + val name = json.get(idName).toString() + MangaTag( + key = key, + title = name, + source = source, + ) + } + } + + override suspend fun getDetails(manga: Manga): Manga = coroutineScope { + val doc = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() + val chaptersDeferred = async { loadChapters(manga.url) } + val json = JSONArray(doc.requireElementById("__NUXT_DATA__").data()) + val descId = json.getJSONObject(6).getInt("story") + val desc = json.getString(descId) + val tagsId = json.getJSONObject(6).getInt("genres") + val tagsList = json.getJSONArray(tagsId).toString().replace("[", "").replace("]", "").split(",") + val ratingId = json.getJSONObject(6).getInt("rating") + val rating = json.getString(ratingId) + val nsfwId = json.getJSONObject(6).getInt("nsfw") + val nsfw = json.getBoolean(nsfwId) + manga.copy( + description = desc, + tags = tagsList.mapToSet { idTag -> + val id = idTag.toInt() + val idKey = json.getJSONObject(id).getInt("id") + val key = json.get(idKey).toString() + val idName = json.getJSONObject(id).getInt("name") + val name = json.get(idName).toString() + MangaTag( + key = key, + title = name, + source = source, + ) + }, + rating = rating?.toFloatOrNull()?.div(5f) ?: RATING_UNKNOWN, + isNsfw = nsfw, + chapters = chaptersDeferred.await(), + ) + } + + private val dateFormat = SimpleDateFormat("yyyy-MM-dd", sourceLocale) + + private suspend fun loadChapters(baseUrl: String): List { + val key = baseUrl.substringAfter("-").substringBefore("-") + val seriesKey = baseUrl.substringAfterLast("/").substringBefore("-") + val json = JSONArray(webClient.httpGet("https://api.$domain/api/v1/webtoon/chapters/$key-desc").parseRaw()) + return json.mapJSONIndexed { i, j -> + val url = "https://$domain/read/webtoon/$seriesKey-${j.getString("id")}-${j.getString("slug")}" + val date = j.getString("createdAt").substringBeforeLast("T") + MangaChapter( + id = generateUid(url), + url = url, + name = j.getString("slug").replace("-", " "), + number = i + 1, + branch = null, + uploadDate = dateFormat.tryParse(date), + scanlator = null, + source = source, + ) + } + } + + override suspend fun getPages(chapter: MangaChapter): List { + val fullUrl = chapter.url.toAbsoluteUrl(domain) + val doc = webClient.httpGet(fullUrl).parseHtml() + val json = JSONArray(doc.requireElementById("__NUXT_DATA__").data()) + val chapterData = json.getJSONObject(6).getInt("chapterData") + val pageLocate = json.getJSONObject(chapterData).getInt("webtoon") + val pages = json.getJSONArray(pageLocate).toString().replace("[", "").replace("]", "").split(",") + return pages.map { + val id = it.toInt() + val url = "https://api.$domain/storage/" + json.getString(id) + MangaPage( + id = generateUid(url), + url = url, + preview = null, + source = source, + ) + } + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/MangaStorm.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/MangaStorm.kt new file mode 100644 index 00000000..70088a21 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/MangaStorm.kt @@ -0,0 +1,123 @@ +package org.koitharu.kotatsu.parsers.site.ar + +import okhttp3.Headers +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.PagedMangaParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.* +import org.koitharu.kotatsu.parsers.network.UserAgents +import org.koitharu.kotatsu.parsers.util.* +import java.util.* + +@MangaSourceParser("MANGASTORM", "Manga Storm", "ar") +internal class MangaStorm(context: MangaLoaderContext) : PagedMangaParser(context, MangaSource.MANGASTORM, 30) { + + override val sortOrders: Set = EnumSet.of(SortOrder.POPULARITY) + override val configKeyDomain = ConfigKey.Domain("mangastorm.org") + + override val headers: Headers = Headers.Builder() + .add("User-Agent", UserAgents.CHROME_DESKTOP) + .build() + + override suspend fun getListPage( + page: Int, + query: String?, + tags: Set?, + sortOrder: SortOrder, + ): List { + val tag = tags.oneOrThrowIfMany() + + val url = + if (!tags.isNullOrEmpty()) { + buildString { + append("https://") + append(domain) + append("/categories/") + append(tag?.key.orEmpty()) + append("?page=") + append(page) + } + } else { + buildString { + append("https://") + append(domain) + append("/mangas?page=") + append(page) + if (!query.isNullOrEmpty()) { + append("&query=") + append(query.urlEncoded()) + } + } + } + + val doc = webClient.httpGet(url).parseHtml() + + return doc.select("div.row div.col").map { div -> + val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href") + Manga( + id = generateUid(href), + title = div.select(".manga-ct-title").text(), + altTitle = null, + url = href, + publicUrl = href.toAbsoluteUrl(domain), + rating = RATING_UNKNOWN, + isNsfw = false, + coverUrl = div.selectFirstOrThrow("img").src().orEmpty(), + tags = emptySet(), + state = null, + author = null, + source = source, + ) + } + } + + override suspend fun getTags(): Set = emptySet() + + override suspend fun getDetails(manga: Manga): Manga { + val doc = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() + + val root = doc.selectFirstOrThrow(".card-body .col-lg-9") + + return manga.copy( + altTitle = null, + state = null, + tags = root.select(".flex-wrap a").mapNotNullToSet { a -> + MangaTag( + key = a.attr("href").substringAfterLast('/'), + title = a.text(), + source = source, + ) + }, + author = null, + description = root.selectFirstOrThrow(".card-text").text(), + chapters = doc.select(".card-body a.btn-fixed-width").mapChapters(reversed = true) { i, a -> + val url = a.attrAsRelativeUrl("href") + MangaChapter( + id = generateUid(url), + name = a.text(), + number = i + 1, + url = url, + scanlator = null, + uploadDate = 0, + branch = null, + source = source, + ) + }, + ) + } + + override suspend fun getPages(chapter: MangaChapter): List { + val fullUrl = chapter.url.toAbsoluteUrl(domain) + val doc = webClient.httpGet(fullUrl).parseHtml().requireElementById("content") + return doc.select("div.text-center .img-fluid").map { img -> + val url = img.src()?.toRelativeUrl(domain) ?: img.parseFailed("Image src not found") + MangaPage( + id = generateUid(url), + url = url, + preview = null, + source = source, + ) + } + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/LugnicaScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/LugnicaScans.kt index 7ddd2cb4..6f3ed91c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/LugnicaScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/LugnicaScans.kt @@ -49,6 +49,10 @@ internal class LugnicaScans(context: MangaLoaderContext) : PagedMangaParser(cont sortOrder: SortOrder, ): List { + if (!query.isNullOrEmpty()) { + return emptyList() + } + if (sortOrder == SortOrder.ALPHABETICAL) { if (page > 1) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt index 44ee2bdc..353fc4e2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt @@ -33,9 +33,8 @@ internal abstract class MadaraParser( protected open val tagPrefix = "manga-genre/" protected open val datePattern = "MMMM d, yyyy" - protected open val stylepage = "?style=list" - - protected open val postreq = false + protected open val stylePage = "?style=list" + protected open val postReq = false init { paginator.firstPage = 0 @@ -52,7 +51,6 @@ internal abstract class MadaraParser( parseFailed("Cannot find tableValue for node ${text()}") } - @JvmField protected val ongoing: Set = hashSetOf( "مستمرة", @@ -358,7 +356,7 @@ internal abstract class MadaraParser( 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 link = href + stylepage + 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( @@ -378,8 +376,7 @@ internal abstract class MadaraParser( } protected open suspend fun loadChapters(mangaUrl: String, document: Document): List { - - val doc = if (postreq) { + val doc = if (postReq) { val mangaId = document.select("div#manga-chapters-holder").attr("data-id") val url = "https://$domain/wp-admin/admin-ajax.php" val postdata = "action=manga_get_chapters&manga=$mangaId" @@ -388,13 +385,11 @@ internal abstract class MadaraParser( val url = mangaUrl.toAbsoluteUrl(domain).removeSuffix('/') + "/ajax/chapters/" webClient.httpPost(url, emptyMap()).parseHtml() } - val dateFormat = SimpleDateFormat(datePattern, sourceLocale) - 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 link = href + stylepage + 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( @@ -413,13 +408,35 @@ internal abstract class MadaraParser( } } + override suspend fun getRelatedManga(seed: Manga): List { + val doc = webClient.httpGet(seed.url.toAbsoluteUrl(domain)).parseHtml() + val root = doc.body().selectFirstOrThrow(".related-manga") + return root.select("div.related-reading-wrap").mapNotNull { div -> + val a = div.selectFirst("a") ?: return@mapNotNull null + val href = a.attrAsRelativeUrl("href") + Manga( + id = generateUid(href), + url = href, + publicUrl = href.toAbsoluteUrl(a.host ?: domain), + altTitle = null, + title = div.selectFirstOrThrow(".widget-title").text(), + author = null, + coverUrl = div.selectFirst("img")?.src().orEmpty(), + tags = emptySet(), + rating = RATING_UNKNOWN, + state = null, + isNsfw = isNsfwSource, + source = source, + ) + } + } + protected open val selectBodyPage = "div.main-col-inner div.reading-content" protected open val selectPage = "div.page-break, div.login-required" override suspend fun getPages(chapter: MangaChapter): List { val fullUrl = chapter.url.toAbsoluteUrl(domain) val doc = webClient.httpGet(fullUrl).parseHtml() - val chapterProtector = doc.getElementById("chapter-protector-data") if (chapterProtector == null) { val root = doc.body().selectFirstOrThrow(selectBodyPage) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/Ero18x.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/Ero18x.kt index fe37616a..94d2d948 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/Ero18x.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/Ero18x.kt @@ -21,7 +21,7 @@ internal class Ero18x(context: MangaLoaderContext) : return doc.body().select(selectChapter).mapChapters(reversed = true) { i, li -> val a = li.selectFirstOrThrow("a") val href = a.attrAsRelativeUrl("href") - val link = href + stylepage + 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( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/MangaTop.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/MangaTop.kt index 474c1224..7135e03a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/MangaTop.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/MangaTop.kt @@ -12,5 +12,5 @@ internal class MangaTop(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGATOP, "mangatop.site") { override val datePattern = "d MMMM yyyy" override val sourceLocale: Locale = Locale.ENGLISH - override val stylepage = "" + override val stylePage = "" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/ManhwaRaw.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/ManhwaRaw.kt index 9a72d2e5..29fae1b2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/ManhwaRaw.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/ManhwaRaw.kt @@ -27,7 +27,7 @@ internal class ManhwaRaw(context: MangaLoaderContext) : 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 link = href + stylepage + 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() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/ManyToonClub.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/ManyToonClub.kt index 1b562c53..b6031141 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/ManyToonClub.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/ManyToonClub.kt @@ -10,7 +10,7 @@ import java.util.Locale @MangaSourceParser("MANYTOON_CLUB", "Many Toon .Club", "", ContentType.HENTAI) internal class ManyToonClub(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANYTOON_CLUB, "manytoon.club") { - override val postreq = true + override val postReq = true override val listUrl = "manhwa-raw/" override val tagPrefix = "manhwa-raw-genre/" override val sourceLocale: Locale = Locale.ENGLISH diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/GateManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/GateManga.kt index 86033375..4814aca3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/GateManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/GateManga.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("GATEMANGA", "Gate Manga", "ar") internal class GateManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.GATEMANGA, "gatemanga.com") { - override val postreq = true + override val postReq = true override val datePattern = "d MMMM، yyyy" override val listUrl = "ar/" override val withoutAjax = true diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLeks.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLeks.kt index 3fb8d031..ff8725c2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLeks.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLeks.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class MangaLeks(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGALEKS, "mangaleks.com") { override val datePattern = "yyyy/MM/dd" - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Manga_Lek.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Manga_Lek.kt index 02e16751..019f2152 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Manga_Lek.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Manga_Lek.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class Manga_Lek(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGA_LEK, "manga-lek.com") { override val listUrl = "mangalek/" - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Mangarbic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Mangarbic.kt index 9ae000fa..f673d214 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Mangarbic.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Mangarbic.kt @@ -8,6 +8,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGARBIC", "Mangarbic", "ar") internal class Mangarbic(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGARBIC, "mangarabic.com") { - override val postreq = true + override val postReq = true override val datePattern = "yyyy/MM/dd" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Mangaspark.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Mangaspark.kt index 5cf92796..e82e2b0d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Mangaspark.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Mangaspark.kt @@ -8,6 +8,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGASPARK", "Manga Spark", "ar") internal class Mangaspark(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGASPARK, "mangaspark.org", pageSize = 10) { - override val postreq = true + override val postReq = true override val datePattern = "d MMMM، yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/NijiTranslations.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/NijiTranslations.kt index 9224c7b2..3f4e9af1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/NijiTranslations.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/NijiTranslations.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("NIJITRANSLATIONS", "Niji Translations", "ar") internal class NijiTranslations(context: MangaLoaderContext) : MadaraParser(context, MangaSource.NIJITRANSLATIONS, "niji-translations.com") { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt index af58a8db..eb76f61d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt @@ -10,5 +10,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class AdultWebtoon(context: MangaLoaderContext) : MadaraParser(context, MangaSource.ADULT_WEBTOON, "adultwebtoon.com") { override val tagPrefix = "adult-webtoon-genre/" - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Astrallibrary.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Astrallibrary.kt index a0d64cc2..d7caa531 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Astrallibrary.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Astrallibrary.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class Astrallibrary(context: MangaLoaderContext) : MadaraParser(context, MangaSource.ASTRALLIBRARY, "astrallibrary.net", 18) { override val datePattern = "dd MMM" - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BlogManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BlogManga.kt index bbd63e8b..77543f15 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BlogManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BlogManga.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("BLOG_MANGA", "Blog Manga", "en") internal class BlogManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.BLOG_MANGA, "blogmanga.net") { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt index 9ef7d7bd..abd46938 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt @@ -11,5 +11,5 @@ internal class BoysLove(context: MangaLoaderContext) : MadaraParser(context, MangaSource.BOYS_LOVE, "boyslove.me", 20) { override val tagPrefix = "boyslove-genre/" override val listUrl = "boyslove/" - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeMangaTop.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeMangaTop.kt index ac169a03..c5bbb0eb 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeMangaTop.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeMangaTop.kt @@ -110,7 +110,7 @@ internal class CoffeeMangaTop(context: MangaLoaderContext) : 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 link = href + stylepage + val link = href + stylePage MangaChapter( id = generateUid(href), url = link, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CreepyScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CreepyScans.kt index dda2f332..2f1f7e67 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CreepyScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CreepyScans.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("CREEPYSCANS", "Creepy Scans", "en") internal class CreepyScans(context: MangaLoaderContext) : MadaraParser(context, MangaSource.CREEPYSCANS, "creepyscans.com") { - override val stylepage = "" + override val stylePage = "" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeComicOnline.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeComicOnline.kt index 6c6dd117..86ba6205 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeComicOnline.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeComicOnline.kt @@ -9,7 +9,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("FREECOMICONLINE", "Free Comic Online", "en", ContentType.HENTAI) internal class FreeComicOnline(context: MangaLoaderContext) : MadaraParser(context, MangaSource.FREECOMICONLINE, "freecomiconline.me") { - override val postreq = true + override val postReq = true override val listUrl = "comic/" override val tagPrefix = "comic-genre/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/GourmetScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/GourmetScans.kt index f2b9d8d5..38f3e809 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/GourmetScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/GourmetScans.kt @@ -10,5 +10,5 @@ internal class GourmetScans(context: MangaLoaderContext) : MadaraParser(context, MangaSource.GOURMETSCANS, "gourmetscans.net") { override val listUrl = "project/" override val tagPrefix = "genre/" - override val stylepage = "" + override val stylePage = "" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HManhwa.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HManhwa.kt index eef14c7c..91cbd3bc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HManhwa.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HManhwa.kt @@ -12,5 +12,5 @@ internal class HManhwa(context: MangaLoaderContext) : override val tagPrefix = "manhwa-genre/" override val listUrl = "manhwa/" override val datePattern = "dd MMM" - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiManga.kt index 5706c2c5..e249865c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiManga.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("HENTAIMANGA", "Hentai Manga", "en", ContentType.HENTAI) internal class HentaiManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HENTAIMANGA, "hentaimanga.me", 36) { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiWebtoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiWebtoon.kt index cd1a78fb..3b02167a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiWebtoon.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiWebtoon.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("HENTAIWEBTOON", "Hentai Webtoon", "en", ContentType.HENTAI) internal class HentaiWebtoon(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HENTAIWEBTOON, "hentaiwebtoon.com") { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixComic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixComic.kt index cef04f22..bd4c2877 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixComic.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixComic.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("HENTAIXCOMIC", "Hentai x Comic", "en", ContentType.HENTAI) internal class HentaixComic(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HENTAIXCOMIC, "hentaixcomic.com", 16) { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixYuri.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixYuri.kt index 2cfbbe13..2968cd7b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixYuri.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixYuri.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("HENTAIXYURI", "Hentai x Yuri", "en", ContentType.HENTAI) internal class HentaixYuri(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HENTAIXYURI, "hentaixyuri.com", 16) { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentaixdickgirl.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentaixdickgirl.kt index f35d1c3c..e30f4962 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentaixdickgirl.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentaixdickgirl.kt @@ -14,15 +14,15 @@ import java.text.SimpleDateFormat @MangaSourceParser("HENTAIXDICKGIRL", "Hentai x Dickgirl", "en", ContentType.HENTAI) internal class Hentaixdickgirl(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HENTAIXDICKGIRL, "hentaixdickgirl.com", 16) { + override val postReq = true - override val postreq = true override suspend fun getChapters(manga: Manga, doc: Document): List { val root2 = doc.body().selectFirstOrThrow("div.listing-chapters_wrap") val dateFormat = SimpleDateFormat(datePattern, sourceLocale) return root2.select(selectChapter).mapChapters(reversed = true) { i, li -> val a = li.selectFirst("a") val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") - val link = href + stylepage + 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( 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 7249c8fa..c10c7b1a 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 @@ -14,7 +14,7 @@ internal class InstaManhwa(context: MangaLoaderContext) : MadaraParser(context, MangaSource.INSTAMANHWA, "www.instamanhwa.com", 15) { override val tagPrefix = "genre/" override val listUrl = "latest/" - override val postreq = true + override val postReq = true override val datePattern = "d MMMM, yyyy" override val sortOrders: Set = EnumSet.of( @@ -113,7 +113,7 @@ internal class InstaManhwa(context: MangaLoaderContext) : 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 link = href + stylepage + 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( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScan.kt index af835269..7d35f1a6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScan.kt @@ -113,7 +113,7 @@ internal class IsekaiScan(context: MangaLoaderContext) : 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 link = href + stylepage + val link = href + stylePage MangaChapter( id = generateUid(href), url = link, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LoliconMobi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LoliconMobi.kt index e3370396..44430562 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LoliconMobi.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LoliconMobi.kt @@ -9,6 +9,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("LOLICONMOBI", "Lolicon Mobi", "en", ContentType.HENTAI) internal class LoliconMobi(context: MangaLoaderContext) : MadaraParser(context, MangaSource.LOLICONMOBI, "lolicon.mobi") { - override val postreq = true + override val postReq = true override val tagPrefix = "lolicon-genre/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaBob.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaBob.kt index 14723206..d7a06317 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaBob.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaBob.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGABOB", "Manga Bob", "en") internal class MangaBob(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGABOB, "mangabob.com") { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaClashTv.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaClashTv.kt index 9b7010f6..65857894 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaClashTv.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaClashTv.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class MangaClashTv(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGACLASH_TV, "mangaclash.tv", pageSize = 10) { override val datePattern = "MM/dd/yyyy" - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDass.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDass.kt index 2b7e5005..6cab64d5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDass.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDass.kt @@ -146,7 +146,7 @@ internal class MangaDass(context: MangaLoaderContext) : return root2.select(selectChapter).mapChapters(reversed = true) { i, li -> val a = li.selectFirst("a") val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") - val link = href + stylepage + 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( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDinoTop.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDinoTop.kt index bbf93a7f..84df063c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDinoTop.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDinoTop.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGADINOTOP", "Manga Dino", "en") internal class MangaDinoTop(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGADINOTOP, "mangadino.top", 10) { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDna.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDna.kt index 8599d9e8..ba7af66b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDna.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDna.kt @@ -144,7 +144,7 @@ internal class MangaDna(context: MangaLoaderContext) : return root2.select(selectChapter).mapChapters(reversed = true) { i, li -> val a = li.selectFirst("a") val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") - val link = href + stylepage + 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( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaForFree.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaForFree.kt index b014baf1..5994f94b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaForFree.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaForFree.kt @@ -9,6 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGAFORFREE", "Manga For Free", "en", ContentType.HENTAI) internal class MangaForFree(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAFORFREE, "mangaforfree.com", 10) { - - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFoxFull.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFoxFull.kt index 20e8a665..4d5d8d73 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFoxFull.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFoxFull.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGAFOXFULL", "Manga Fox Full", "en") internal class MangaFoxFull(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAFOXFULL, "mangafoxfull.com") { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFreak.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFreak.kt index 9a747577..47282397 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFreak.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFreak.kt @@ -8,6 +8,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGAFREAK", "Manga Freak", "en") internal class MangaFreak(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAFREAK, "mangafreak.online") { - override val postreq = true + override val postReq = true override val datePattern = "dd MMMM، yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaLeveling.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaLeveling.kt index c0286319..c3c23a60 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaLeveling.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaLeveling.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGALEVELING", "Manga Leveling", "en") internal class MangaLeveling(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGALEVELING, "mangaleveling.com", 30) { - override val postreq = true + override val postReq = true override val tagPrefix = "comics-genre/" override val listUrl = "comics/" override val datePattern = "MM/dd/yyyy" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaOwlBlog.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaOwlBlog.kt index e5322ba9..793c8a3b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaOwlBlog.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaOwlBlog.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGAOWLBLOG", "MangaOwl .Blog", "en", ContentType.HENTAI) internal class MangaOwlBlog(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAOWLBLOG, "mangaowl.blog", 20) { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaPure.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaPure.kt index f735fc92..ea69adb9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaPure.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaPure.kt @@ -112,7 +112,7 @@ internal class MangaPure(context: MangaLoaderContext) : 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 link = href + stylepage + val link = href + stylePage MangaChapter( id = generateUid(href), url = link, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRawInfo.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRawInfo.kt index b0ed9bbb..b5545ad2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRawInfo.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRawInfo.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGARAWINFO", "Manga-Raw .Info", "en") internal class MangaRawInfo(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGARAWINFO, "manga-raw.info", 20) { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRocky.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRocky.kt index 5ea77b9e..52b0661f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRocky.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRocky.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGAROCKY", "Manga Rocky", "en") internal class MangaRocky(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAROCKY, "mangarocky.com") { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaUpdatesTop.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaUpdatesTop.kt index 80ea8211..8580bc1e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaUpdatesTop.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaUpdatesTop.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGAUPDATESTOP", "Manga Updates .Top", "en") internal class MangaUpdatesTop(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAUPDATESTOP, "mangaupdates.top", 10) { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manganelo.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manganelo.kt index 774b2e5e..d4b9cdad 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manganelo.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manganelo.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGANELO", "Manga Nelo", "en") internal class Manganelo(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGANELO, "manganelo.biz", 10) { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaowlOne.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaowlOne.kt index f09e08ab..744a218f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaowlOne.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaowlOne.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGAOWL_ONE", "MangaOwl .One", "en", ContentType.HENTAI) internal class MangaowlOne(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAOWL_ONE, "mangaowl.one") { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangax1.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangax1.kt index db4ebfed..0a1e6826 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangax1.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangax1.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGAX1", "MangaX1", "en") internal class Mangax1(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAX1, "mangax1.com") { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhuaScanInfo.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhuaScanInfo.kt index a8966ed4..2a357c5e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhuaScanInfo.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhuaScanInfo.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANHUASCANINFO", "Manhua Scan .Info", "en") internal class ManhuaScanInfo(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANHUASCANINFO, "manhuascan.info", 10) { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaes.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaes.kt index efbb7c64..4920ed08 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaes.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaes.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANHUAES", "Manhuaes", "en") internal class Manhuaes(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANHUAES, "manhuaes.com") { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa18App.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa18App.kt index 5a0f3544..b36f6d65 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa18App.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa18App.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANHWA18APP", "Manhwa18 .App", "en", ContentType.HENTAI) internal class Manhwa18App(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANHWA18APP, "manhwa18.app") { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa18Org.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa18Org.kt index 954a0a15..f462d263 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa18Org.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa18Org.kt @@ -9,6 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANHWA18ORG", "Manhwa18 .Org", "en", ContentType.HENTAI) internal class Manhwa18Org(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANHWA18ORG, "manhwa18.org") { - - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaRawCom.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaRawCom.kt index 8702ee8e..3f80f302 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaRawCom.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaRawCom.kt @@ -9,7 +9,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANHWARAW_COM", "Manhwa Raw .Com", "en", ContentType.HENTAI) internal class ManhwaRawCom(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANHWARAW_COM, "manhwaraw.com") { - override val postreq = true + override val postReq = true override val listUrl = "manhwa-raw/" override val tagPrefix = "manhwa-raw-genre/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaTop.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaTop.kt index 785f1714..d72be859 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaTop.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaTop.kt @@ -13,7 +13,7 @@ import java.text.SimpleDateFormat internal class ManhwaTop(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANHWATOP, "manhwatop.com") { - override val postreq = true + override val postReq = true override suspend fun loadChapters(mangaUrl: String, document: Document): List { @@ -27,7 +27,7 @@ internal class ManhwaTop(context: MangaLoaderContext) : 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 link = href + stylepage + 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() val dateText2 = if (dateText != "Complete") { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyComic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyComic.kt index 646a6d8c..7615083e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyComic.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyComic.kt @@ -9,6 +9,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANYCOMIC", "Many Comic", "en", ContentType.HENTAI) internal class ManyComic(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANYCOMIC, "manycomic.com") { - override val postreq = true + override val postReq = true override val tagPrefix = "comic-genre/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MilfToon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MilfToon.kt index ac4bb744..39296919 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MilfToon.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MilfToon.kt @@ -9,6 +9,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MILFTOON", "Milf Toon", "en", ContentType.HENTAI) internal class MilfToon(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MILFTOON, "milftoon.xxx", 20) { - override val postreq = true + override val postReq = true override val datePattern = "d MMMM, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MortalsGroove.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MortalsGroove.kt index e6f8810e..6ee8e0e4 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MortalsGroove.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MortalsGroove.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MORTALSGROOVE", "Mortals Groove", "en") internal class MortalsGroove(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MORTALSGROOVE, "mortalsgroove.com") { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MurimScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MurimScan.kt index f47b86ff..309b9a3c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MurimScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MurimScan.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class MurimScan(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MURIMSCAN, "murimscan.run", 100) { override val withoutAjax = true - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/NightComic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/NightComic.kt index a61af973..3ca23d5a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/NightComic.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/NightComic.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("NIGHTCOMIC", "Night Comic", "en") internal class NightComic(context: MangaLoaderContext) : MadaraParser(context, MangaSource.NIGHTCOMIC, "www.nightcomic.com") { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Novelmic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Novelmic.kt index 9138e719..77036416 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Novelmic.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Novelmic.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("NOVELMIC", "Novel Mic", "en") internal class Novelmic(context: MangaLoaderContext) : MadaraParser(context, MangaSource.NOVELMIC, "novelmic.com", 20) { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PetrotechSociety.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PetrotechSociety.kt index d949bf70..871a732e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PetrotechSociety.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PetrotechSociety.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("PETROTECHSOCIETY", "PetrotechSociety", "en", ContentType.HENTAI) internal class PetrotechSociety(context: MangaLoaderContext) : MadaraParser(context, MangaSource.PETROTECHSOCIETY, "www.petrotechsociety.org", pageSize = 10) { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PlatinumScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PlatinumScans.kt index ad8b0e35..4558ffcd 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PlatinumScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PlatinumScans.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("PLATINUMSCANS", "Platinum Scans", "en") internal class PlatinumScans(context: MangaLoaderContext) : MadaraParser(context, MangaSource.PLATINUMSCANS, "platinumscans.com", pageSize = 10) { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ReadManhua.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ReadManhua.kt index 4f11f9b0..9e88d6a4 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ReadManhua.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ReadManhua.kt @@ -9,6 +9,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("READMANHUA", "Read Manhua", "en", ContentType.HENTAI) internal class ReadManhua(context: MangaLoaderContext) : MadaraParser(context, MangaSource.READMANHUA, "readmanhua.net", 20) { - override val postreq = true + override val postReq = true override val datePattern = "d MMM yy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/SectScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/SectScans.kt new file mode 100644 index 00000000..dc4f56a7 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/SectScans.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.en + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("SECTSCANS", "Sect Scans", "en") +internal class SectScans(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.SECTSCANS, "sectscans.com") { + override val listUrl = "comics/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StkissMangaBlog.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StkissMangaBlog.kt index adc3dbcd..3276f616 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StkissMangaBlog.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StkissMangaBlog.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("STKISSMANGABLOG", "StkissManga .Blog", "en") internal class StkissMangaBlog(context: MangaLoaderContext) : MadaraParser(context, MangaSource.STKISSMANGABLOG, "1stkissmanga.blog", 10) { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StkissMangaTv.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StkissMangaTv.kt index 72065b63..3815ec33 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StkissMangaTv.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StkissMangaTv.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("STKISSMANGA_TV", "1stKissManga .Tv", "en") internal class StkissMangaTv(context: MangaLoaderContext) : MadaraParser(context, MangaSource.STKISSMANGA_TV, "1stkissmanga.tv", 20) { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Theguildscans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Theguildscans.kt index 6f5584a6..40c96cb1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Theguildscans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Theguildscans.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("THEGUILDSCANS", "The Guild Scans", "en") internal class Theguildscans(context: MangaLoaderContext) : MadaraParser(context, MangaSource.THEGUILDSCANS, "theguildscans.com") { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/WebComic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/WebComic.kt index cdead5f0..778c4512 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/WebComic.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/WebComic.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("WEBCOMIC", "WebComic", "en") internal class WebComic(context: MangaLoaderContext) : MadaraParser(context, MangaSource.WEBCOMIC, "webcomic.me") { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Webtoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Webtoon.kt index f4ff0b56..ee109787 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Webtoon.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Webtoon.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class Webtoon(context: MangaLoaderContext) : MadaraParser(context, MangaSource.WEBTOON, "webtoon.uk", 20) { override val tagPrefix = "manhwa-genre/" - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Webtoons.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Webtoons.kt index a2fed113..97186c61 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Webtoons.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Webtoons.kt @@ -10,5 +10,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class Webtoons(context: MangaLoaderContext) : MadaraParser(context, MangaSource.WEBTOONS, "webtoons.top", 20) { override val listUrl = "read/" - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/YaoiMobi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/YaoiMobi.kt index 57b9b67f..29365ed6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/YaoiMobi.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/YaoiMobi.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("YAOIMOBI", "Yaoi .Mobi", "en", ContentType.HENTAI) internal class YaoiMobi(context: MangaLoaderContext) : MadaraParser(context, MangaSource.YAOIMOBI, "yaoi.mobi") { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZuttoManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZuttoManga.kt index a2944ffb..46385137 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZuttoManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZuttoManga.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("ZUTTOMANGA", "Zutto Manga", "en") internal class ZuttoManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.ZUTTOMANGA, "zuttomanga.com") { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/KoinoboriScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/KoinoboriScan.kt index edfc7885..524703a0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/KoinoboriScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/KoinoboriScan.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("KOINOBORISCAN", "Koinobori Scan", "es") internal class KoinoboriScan(context: MangaLoaderContext) : MadaraParser(context, MangaSource.KOINOBORISCAN, "koinoboriscan.com") { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaEs.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaEs.kt index 5c455c4e..112d2910 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaEs.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaEs.kt @@ -20,7 +20,7 @@ internal class ManhwaEs(context: MangaLoaderContext) : return doc.body().select(selectChapter).mapChapters(reversed = true) { i, li -> val a = li.selectFirstOrThrow("a") val href = a.attrAsRelativeUrl("href") - val link = href + stylepage + val link = href + stylePage val dateText = li.selectFirst("a.c-new-tag")?.attr("title") ?: li.selectFirst(selectDate)?.text() val name = li.selectFirstOrThrow(".mini-letters a").text() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaLatino.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaLatino.kt index 151c9171..0314d91f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaLatino.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaLatino.kt @@ -24,7 +24,7 @@ internal class ManhwaLatino(context: MangaLoaderContext) : return root2.select(selectChapter).mapChapters(reversed = true) { i, li -> val a = li.selectFirst("a") val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") - val link = href + stylepage + val link = href + stylePage val dateText = li.selectFirst("a.c-new-tag")?.attr("title") ?: li.selectFirst(selectDate)?.text() val dateText2 = if (dateText == "¡Recién publicado!") { "1 mins ago" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/RagnarokScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/RagnarokScan.kt index 5d29c47a..e7653d8f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/RagnarokScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/RagnarokScan.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("RAGNAROKSCAN", "Ragnarok Scan", "es") internal class RagnarokScan(context: MangaLoaderContext) : MadaraParser(context, MangaSource.RAGNAROKSCAN, "ragnarokscan.com") { - override val stylepage = "" + override val stylePage = "" override val listUrl = "series/" override val tagPrefix = "genero/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Stickhorse.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Stickhorse.kt index c92891ad..1a0eb868 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Stickhorse.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Stickhorse.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("STICKHORSE", "Stickhorse", "es") internal class Stickhorse(context: MangaLoaderContext) : MadaraParser(context, MangaSource.STICKHORSE, "www.stickhorse.cl") { - override val postreq = true + override val postReq = true } 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 6bf48dee..f5ebd397 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 @@ -86,7 +86,7 @@ internal class TmoManga(context: MangaLoaderContext) : return doc.body().select(selectChapter).mapChapters(reversed = true) { i, li -> val a = li.selectFirstOrThrow("a") val href = a.attrAsRelativeUrl("href") - val link = href + stylepage + val link = href + stylePage val name = a.selectFirst("p")?.text() ?: a.ownText() MangaChapter( id = generateUid(href), diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/FrScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/FrScan.kt index 204eedf0..50ac406b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/FrScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/FrScan.kt @@ -4,7 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import java.util.Locale @MangaSourceParser("FRSCAN", "Fr-Scan", "fr") internal class FrScan(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.FRSCAN, "fr-scan.cc") + MadaraParser(context, MangaSource.FRSCAN, "fr-scan.cc") { + override val sourceLocale: Locale = Locale.ENGLISH +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Kataitake.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Kataitake.kt index 783e1dbf..a6fc8259 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Kataitake.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Kataitake.kt @@ -11,5 +11,5 @@ internal class Kataitake(context: MangaLoaderContext) : MadaraParser(context, MangaSource.KATAITAKE, "www.kataitake.fr", 10) { override val datePattern = "dd/MM/yyyy" override val tagPrefix = "genre/" - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/GourmetScansId.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/GourmetScansId.kt index cce12a05..8313204d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/GourmetScansId.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/GourmetScansId.kt @@ -10,5 +10,5 @@ internal class GourmetScansId(context: MangaLoaderContext) : MadaraParser(context, MangaSource.GOURMETSCANS_ID, "id.gourmetscans.net") { override val listUrl = "project/" override val tagPrefix = "genre/" - override val stylepage = "" + override val stylePage = "" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Mgkomik.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Mgkomik.kt index dea68f67..a63d63d3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Mgkomik.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Mgkomik.kt @@ -12,6 +12,6 @@ internal class Mgkomik(context: MangaLoaderContext) : override val tagPrefix = "genres/" override val listUrl = "komik/" override val datePattern = "dd MMM yy" - override val stylepage = "" + override val stylePage = "" override val sourceLocale: Locale = Locale.ENGLISH } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ja/HachiManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ja/HachiManga.kt index 1795b524..8cad125b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ja/HachiManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ja/HachiManga.kt @@ -153,7 +153,7 @@ internal class HachiManga(context: MangaLoaderContext) : MadaraParser(context, M return root2.select(selectChapter).mapChapters(reversed = true) { i, li -> val a = li.selectFirst("a") val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") - val link = href + stylepage + 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( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/AkumanoTenshi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/AkumanoTenshi.kt index dbed2c1a..2284081b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/AkumanoTenshi.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/AkumanoTenshi.kt @@ -11,5 +11,5 @@ internal class AkumanoTenshi(context: MangaLoaderContext) : override val listUrl = "series/" override val tagPrefix = "series-genre/" override val datePattern = "dd/MM/yyyy" - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CafecomYaoi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CafecomYaoi.kt index b70f2243..299c5d89 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CafecomYaoi.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CafecomYaoi.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class CafecomYaoi(context: MangaLoaderContext) : MadaraParser(context, MangaSource.CAFECOMYAOI, "cafecomyaoi.com.br") { override val datePattern = "dd/MM/yyyy" - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Pirulitorosa.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Pirulitorosa.kt index c24fa58e..ab74fcb7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Pirulitorosa.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Pirulitorosa.kt @@ -9,6 +9,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("PIRULITOROSA", "Pirulitorosa", "pt", ContentType.HENTAI) internal class Pirulitorosa(context: MangaLoaderContext) : MadaraParser(context, MangaSource.PIRULITOROSA, "pirulitorosa.site") { - override val postreq = true + override val postReq = true override val datePattern: String = "dd/MM/yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/WickedWitchScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/WickedWitchScan.kt index a1a6e6d1..36c794c6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/WickedWitchScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/WickedWitchScan.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("WICKEDWITCHSCAN", "WickedWitch Scan", "pt") internal class WickedWitchScan(context: MangaLoaderContext) : MadaraParser(context, MangaSource.WICKEDWITCHSCAN, "wickedwitchscan.com", pageSize = 10) { - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ZeroScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ZeroScan.kt index 2abc235f..20d5f561 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ZeroScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ZeroScan.kt @@ -8,6 +8,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("ZEROSCAN", "Zero Scan", "pt") internal class ZeroScan(context: MangaLoaderContext) : MadaraParser(context, MangaSource.ZEROSCAN, "zeroscan.com.br") { - override val postreq = true + override val postReq = true override val datePattern: String = "dd/MM/yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/BestManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/BestManga.kt index b0068f3f..80bd3f94 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/BestManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/BestManga.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class BestManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.BEST_MANGA, "bestmanga.club") { override val datePattern = "dd.MM.yyyy" - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/MangaMammy.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/MangaMammy.kt index 5e15330c..444a63c3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/MangaMammy.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/MangaMammy.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class MangaMammy(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAMAMMY, "mangamammy.ru") { override val datePattern = "dd.MM.yyyy" - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/MangaoneLove.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/MangaoneLove.kt index 63eee42b..55f8ab1a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/MangaoneLove.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/MangaoneLove.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class MangaoneLove(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAONELOVE, "mangaonelove.site", 10) { override val datePattern = "dd.MM.yyyy" - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/KingsManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/KingsManga.kt index e7a8beb3..21318def 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/KingsManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/KingsManga.kt @@ -8,6 +8,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("KINGS_MANGA", "Kings Manga", "th") internal class KingsManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.KINGS_MANGA, "www.kings-manga.co") { - override val postreq = true + override val postReq = true override val datePattern = "d MMMM yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/NekoPost.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/NekoPost.kt index 68fb7024..5add1e05 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/NekoPost.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/NekoPost.kt @@ -8,6 +8,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("NEKOPOST", "Neko Post", "th") internal class NekoPost(context: MangaLoaderContext) : MadaraParser(context, MangaSource.NEKOPOST, "www.nekopost.co") { - override val postreq = true + override val postReq = true override val datePattern = "d MMMM yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Anikiga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Anikiga.kt index 24828ecb..22c93016 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Anikiga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Anikiga.kt @@ -10,5 +10,5 @@ internal class Anikiga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.ANIKIGA, "anikiga.com") { override val tagPrefix = "manga-tur/" override val datePattern = "d MMMM yyyy" - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ArazNovel.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ArazNovel.kt index 153d7215..2dca9ce4 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ArazNovel.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ArazNovel.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class ArazNovel(context: MangaLoaderContext) : MadaraParser(context, MangaSource.ARAZNOVEL, "araznovel.com", 10) { override val datePattern = "d MMMM yyyy" - override val postreq = true + override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Cizgiromanarsivi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Cizgiromanarsivi.kt index a0533b9c..bd3cff7d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Cizgiromanarsivi.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Cizgiromanarsivi.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("CIZGIROMANARSIVI", "Cizgiromanarsivi", "tr") internal class Cizgiromanarsivi(context: MangaLoaderContext) : MadaraParser(context, MangaSource.CIZGIROMANARSIVI, "cizgiromanarsivi.com", 24) { - override val stylepage = "" + override val stylePage = "" override val tagPrefix = "kategori/" override val listUrl = "seri/" override val datePattern = "dd.MM.yyyy" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/EsoManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/EsoManga.kt index 74dc4348..6cae564d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/EsoManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/EsoManga.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("ESOMANGA", "Eso Manga", "tr") internal class EsoManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.ESOMANGA, "esomanga.com", 10) { - override val postreq = true + override val postReq = true override val datePattern = "dd/MM/yyyy" override val tagPrefix = "manga-kategoriler/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Jiangzaitoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Jiangzaitoon.kt index 985f1fc3..56efc299 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Jiangzaitoon.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Jiangzaitoon.kt @@ -9,6 +9,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("JIANGZAITOON", "Jiangzaitoon", "tr", ContentType.HENTAI) internal class Jiangzaitoon(context: MangaLoaderContext) : MadaraParser(context, MangaSource.JIANGZAITOON, "jiangzaitoon.cc") { - override val postreq = true + override val postReq = true override val datePattern = "d MMMM yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Timenaight.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Timenaight.kt index 30361795..33f05efd 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Timenaight.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Timenaight.kt @@ -8,6 +8,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("TIMENAIGHT", "Timenaight", "tr") internal class Timenaight(context: MangaLoaderContext) : MadaraParser(context, MangaSource.TIMENAIGHT, "timenaight.com") { - override val postreq = true + override val postReq = true override val datePattern = "dd/MM/yyyy" } 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 4c0b4337..63aa996a 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,7 +18,7 @@ internal class TitanManga(context: MangaLoaderContext) : return doc.select(selectChapter).mapChapters(reversed = true) { i, li -> val a = li.selectFirstOrThrow("a") val href = a.attrAsRelativeUrl("href") - val link = href + stylepage + val link = href + stylePage val name = a.selectFirst("p")?.text() ?: a.ownText() MangaChapter( id = generateUid(href), diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt index 692c4273..64dde5c1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt @@ -16,7 +16,7 @@ internal class HentaiCube(context: MangaLoaderContext) : override val datePattern = "dd/MM/yyyy" override val tagPrefix = "the-loai/" - override val postreq = true + override val postReq = true override suspend fun getPages(chapter: MangaChapter): List { val fullUrl = chapter.url.toAbsoluteUrl(domain) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt index 3e978752..59f5560b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt @@ -93,7 +93,6 @@ internal abstract class MangaReaderParser( val relativeUrl = a.attrAsRelativeUrl("href") val rating = it.selectFirst(".numscore")?.text() ?.toFloatOrNull()?.div(10) ?: RATING_UNKNOWN - Manga( id = generateUid(relativeUrl), url = relativeUrl, @@ -132,7 +131,6 @@ internal abstract class MangaReaderParser( } open suspend fun parseInfo(docs: Document, manga: Manga, chapters: List): Manga { - /// set if is table val tableMode = docs.selectFirst("div.seriestucontent > div.seriestucontentr") ?: docs.selectFirst("div.seriestucontentr") @@ -214,6 +212,10 @@ internal abstract class MangaReaderParser( ) } + override suspend fun getRelatedManga(seed: Manga): List { + return parseMangaList(webClient.httpGet(seed.url.toAbsoluteUrl(domain)).parseHtml()) + } + protected open val encodedSrc = false protected open val selectScript = "div.wrapper script" protected open val selectPage = "div#readerarea img" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/AiyuMangaScanlation.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/AiyuMangaScanlation.kt similarity index 52% rename from src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/AiyuMangaScanlation.kt rename to src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/AiyuMangaScanlation.kt index baadc6d5..0fa14aba 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/AiyuMangaScanlation.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/AiyuMangaScanlation.kt @@ -1,13 +1,10 @@ -package org.koitharu.kotatsu.parsers.site.madara.es +package org.koitharu.kotatsu.parsers.site.mangareader.es import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("AIYUMANGASCANLATION", "Aiyu Manga", "es") internal class AiyuMangaScanlation(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.AIYUMANGASCANLATION, "aiyumanga.com") { - override val datePattern = "MM/dd/yyyy" - override val listUrl = "series/" -} + MangaReaderParser(context, MangaSource.AIYUMANGASCANLATION, "aiyumanhua.com", 20, 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LelManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LelManga.kt index 0512380c..b9ecf1fc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LelManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LelManga.kt @@ -7,11 +7,14 @@ import org.koitharu.kotatsu.parsers.model.MangaPage import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.util.* +import java.util.Locale @MangaSourceParser("LELMANGA", "Lel Manga", "fr") internal class LelManga(context: MangaLoaderContext) : MangaReaderParser(context, MangaSource.LELMANGA, "www.lelmanga.com", pageSize = 21, searchPageSize = 20) { + override val sourceLocale: Locale = Locale.ENGLISH + override suspend fun getPages(chapter: MangaChapter): List { val fullUrl = chapter.url.toAbsoluteUrl(domain) val doc = webClient.httpGet(fullUrl).parseHtml() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/MmrcmsParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/MmrcmsParser.kt index 193a04e0..2f1a0564 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/MmrcmsParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/MmrcmsParser.kt @@ -22,21 +22,19 @@ internal abstract class MmrcmsParser( override val sortOrders: Set = EnumSet.of( SortOrder.POPULARITY, - SortOrder.ALPHABETICAL, SortOrder.UPDATED, + SortOrder.ALPHABETICAL, ) protected open val listUrl = "filterList" protected open val tagUrl = "manga-list" protected open val datePattern = "dd MMM. yyyy" - init { paginator.firstPage = 1 searchPaginator.firstPage = 1 } - @JvmField protected val ongoing: Set = hashSetOf( "On Going", @@ -66,15 +64,7 @@ internal abstract class MmrcmsParser( sortOrder: SortOrder, ): List { val tag = tags.oneOrThrowIfMany() - val url = if (sortOrder == SortOrder.UPDATED) { - buildString { - append("https://") - append(domain) - append("/latest-release") - append("?page=") - append(page.toString()) - } - } else { + val url = if (!query.isNullOrEmpty() || !tags.isNullOrEmpty() || sortOrder != SortOrder.UPDATED) { buildString { append("https://") append(domain) @@ -83,40 +73,41 @@ internal abstract class MmrcmsParser( append(page.toString()) append("&asc=true&author=&tag=") append("&alpha=") - if (!query.isNullOrEmpty()) { append(query.urlEncoded()) } - append("&cat=") if (!tags.isNullOrEmpty()) { append(tag?.key.orEmpty()) } - append("&sortBy=") when (sortOrder) { SortOrder.POPULARITY -> append("views") SortOrder.ALPHABETICAL -> append("name") - else -> append("views") + else -> append("name") } } + } else { + buildString { + append("https://") + append(domain) + append("/latest-release") + append("?page=") + append(page.toString()) + } } - val doc = webClient.httpGet(url).parseHtml() - - if (sortOrder == SortOrder.UPDATED) { - - return doc.select("div.manga-item").map { div -> + if (!query.isNullOrEmpty() || !tags.isNullOrEmpty() || sortOrder != SortOrder.UPDATED) { + return doc.select("div.media").map { div -> val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href") - val deeplink = href.substringAfterLast("/") Manga( id = generateUid(href), url = href, publicUrl = href.toAbsoluteUrl(div.host ?: domain), - coverUrl = "https://$domain/uploads/manga/$deeplink$imgUpdated", - title = div.selectFirstOrThrow("h3 a").text().orEmpty(), + coverUrl = div.selectFirst("img")?.src().orEmpty(), + title = div.selectFirstOrThrow("div.media-body h5").text().orEmpty(), altTitle = null, - rating = RATING_UNKNOWN, + rating = div.selectFirstOrThrow("span").ownText().toFloatOrNull()?.div(5f) ?: RATING_UNKNOWN, tags = emptySet(), author = null, state = null, @@ -125,16 +116,17 @@ internal abstract class MmrcmsParser( ) } } else { - return doc.select("div.media").map { div -> + return doc.select("div.manga-item").map { div -> val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href") + val deeplink = href.substringAfterLast("/") Manga( id = generateUid(href), url = href, publicUrl = href.toAbsoluteUrl(div.host ?: domain), - coverUrl = div.selectFirst("img")?.src().orEmpty(), - title = div.selectFirstOrThrow("div.media-body h5").text().orEmpty(), + coverUrl = "https://$domain/uploads/manga/$deeplink$imgUpdated", + title = div.selectFirstOrThrow("h3 a").text().orEmpty(), altTitle = null, - rating = div.selectFirstOrThrow("span").ownText().toFloatOrNull()?.div(5f) ?: RATING_UNKNOWN, + rating = RATING_UNKNOWN, tags = emptySet(), author = null, state = null, @@ -169,13 +161,9 @@ internal abstract class MmrcmsParser( val fullUrl = manga.url.toAbsoluteUrl(domain) val doc = webClient.httpGet(fullUrl).parseHtml() val body = doc.body().selectFirstOrThrow("dl.dl-horizontal") - val chaptersDeferred = async { getChapters(manga, doc) } - val desc = doc.selectFirstOrThrow(selectDesc).text() - val stateDiv = body.selectFirst(selectState)?.nextElementSibling() - val state = stateDiv?.let { when (it.text()) { in ongoing -> MangaState.ONGOING @@ -183,12 +171,9 @@ internal abstract class MmrcmsParser( else -> null } } - val alt = doc.body().selectFirst(selectAlt)?.nextElementSibling()?.text() val auth = doc.body().selectFirst(selectAut)?.nextElementSibling()?.text() - val tags = doc.body().selectFirst(selectTag)?.nextElementSibling()?.select("a") ?: emptySet() - manga.copy( tags = tags.mapNotNullToSet { a -> MangaTag( @@ -211,7 +196,6 @@ internal abstract class MmrcmsParser( protected open suspend fun getChapters(manga: Manga, doc: Document): List { val dateFormat = SimpleDateFormat(datePattern, sourceLocale) - return doc.body().select(selectChapter).mapChapters(reversed = true) { i, li -> val a = li.selectFirstOrThrow("a") val href = a.attrAsRelativeUrl("href") @@ -234,8 +218,6 @@ internal abstract class MmrcmsParser( override suspend fun getPages(chapter: MangaChapter): List { val fullUrl = chapter.url.toAbsoluteUrl(domain) val doc = webClient.httpGet(fullUrl).parseHtml() - - return doc.select(selectPage).map { url -> val img = url.src()?.toRelativeUrl(domain) ?: url.parseFailed("Image src not found") MangaPage( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/fr/MangaScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/fr/MangaScan.kt index a6377be9..ee3f5747 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/fr/MangaScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/fr/MangaScan.kt @@ -6,9 +6,9 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mmrcms.MmrcmsParser import java.util.Locale -@MangaSourceParser("MANGA_SCAN", "Manga-Scan", "fr") +@MangaSourceParser("MANGA_SCAN", "Manga Scan", "fr") internal class MangaScan(context: MangaLoaderContext) : - MmrcmsParser(context, MangaSource.MANGA_SCAN, "manga-scan.co") { + MmrcmsParser(context, MangaSource.MANGA_SCAN, "manga-scan.me") { override val imgUpdated = ".jpg" override val sourceLocale: Locale = Locale.ENGLISH } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/UnionMangasParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/UnionMangasParser.kt index c9f2e326..d9c50646 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/UnionMangasParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/UnionMangasParser.kt @@ -47,7 +47,7 @@ class UnionMangasParser(context: MangaLoaderContext) : PagedMangaParser(context, ).addPathSegment(page.toString()) val doc = webClient.httpGet(url.build()).parseHtml() val root = doc.selectFirstOrThrow("div.tamanho-bloco-perfil") - return root.select(".lista-mangas").map { div -> + return root.select(".lista-itens").map { div -> val a = div.selectFirstOrThrow("a") val img = div.selectFirstOrThrow("img") val href = a.attrAsRelativeUrl("href") @@ -71,26 +71,25 @@ class UnionMangasParser(context: MangaLoaderContext) : PagedMangaParser(context, override suspend fun getDetails(manga: Manga): Manga { val doc = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() - val root = doc.selectFirstOrThrow(".perfil-d-manga, .perfil-p-manga, .manga-pagina") val dateFormat = SimpleDateFormat("dd/MM/yyyy", Locale.ROOT) return manga.copy( - rating = root.select("h2") + rating = doc.select("h2") .find { it.ownText().startsWith('#') } ?.ownText()?.drop(1)?.toFloatOrNull()?.div(10f) ?: manga.rating, - largeCoverUrl = root.selectFirst("img.img-thumbnail")?.attrAsAbsoluteUrlOrNull("src"), - description = root.selectFirst(".panel-default")?.selectFirst(".panel-body")?.html(), - author = root.tableValue("Autor")?.ownText(), - altTitle = root.tableValue("Título(s) Alternativo(s)")?.ownText(), - state = when (root.tableValue("Status")?.selectLast(".label")?.text()) { + largeCoverUrl = doc.selectFirst("img.img-thumbnail")?.attrAsAbsoluteUrlOrNull("src"), + description = doc.selectFirst(".panel-default")?.selectFirst(".panel-body")?.html(), + author = doc.tableValue("Autor")?.ownText(), + altTitle = doc.tableValue("Título(s) Alternativo(s)")?.ownText(), + state = when (doc.tableValue("Status")?.selectLast(".label")?.text()) { "Completo" -> MangaState.FINISHED "Ativo" -> MangaState.ONGOING else -> null }, - tags = root.tableValue("Gênero(s)")?.select("a")?.mapToSet { + tags = doc.tableValue("Gênero(s)")?.select("a")?.mapToSet { it.toMangaTag() } ?: manga.tags, - isNsfw = root.selectFirst(".alert-danger")?.html()?.contains("18 anos") == true, - chapters = root.select("div.row.capitulos").mapChapters(reversed = true) { i, div -> + isNsfw = doc.selectFirst(".alert-danger")?.html()?.contains("18 anos") == true, + chapters = doc.select("div.row.capitulos").mapChapters(reversed = true) { i, div -> val a = div.selectFirstOrThrow("a") val href = a.attrAsRelativeUrl("href") val title = a.text() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/Truyenqq.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/Truyenqq.kt new file mode 100644 index 00000000..86a621a0 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/Truyenqq.kt @@ -0,0 +1,134 @@ +package org.koitharu.kotatsu.parsers.site.vi + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.PagedMangaParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.* +import org.koitharu.kotatsu.parsers.util.* +import java.text.SimpleDateFormat +import java.util.* + +@MangaSourceParser("TRUYENQQ", "Truyenqq", "vi") +internal class Truyenqq(context: MangaLoaderContext) : PagedMangaParser(context, MangaSource.TRUYENQQ, 42) { + + override val sortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST) + override val configKeyDomain = ConfigKey.Domain("truyenqqvn.com") + + override suspend fun getListPage( + page: Int, + query: String?, + tags: Set?, + sortOrder: SortOrder, + ): List { + val tagQuery = if (tags.isNullOrEmpty()) "" else tags.joinToString(separator = ",") { it.key } + val url = if (!query.isNullOrEmpty()) { + buildString { + append("https://$domain") + append("/tim-kiem/trang-$page.html") + append("?q=") + append(query.urlEncoded()) + } + } else { + buildString { + append("https://$domain") + append("/tim-kiem-nang-cao/trang-$page.html") + append("?status=-1&country=0&sort=") + when (sortOrder) { + SortOrder.POPULARITY -> append("4") + SortOrder.UPDATED -> append("2") + SortOrder.NEWEST -> append("0") + else -> append("2") + } + append("&category=") + append(tagQuery) + append("¬category=&minchapter=0") + } + } + val doc = webClient.httpGet(url).parseHtml() + return doc.requireElementById("main_homepage").select("li").map { li -> + val href = li.selectFirstOrThrow("a").attrAsRelativeUrl("href") + Manga( + id = generateUid(href), + title = li.selectFirstOrThrow(".book_name").text(), + altTitle = null, + url = href, + publicUrl = href.toAbsoluteUrl(domain), + rating = RATING_UNKNOWN, + isNsfw = isNsfwSource, + coverUrl = li.selectFirstOrThrow("img").src().orEmpty(), + tags = emptySet(), + state = null, + author = null, + source = source, + ) + } + } + + override suspend fun getTags(): Set { + val doc = webClient.httpGet("https://$domain/tim-kiem-nang-cao.html").parseHtml() + return doc.select(".advsearch-form div.genre-item").mapNotNullToSet { + MangaTag( + key = it.selectFirstOrThrow("span").attr("data-id"), + title = it.text(), + source = source, + ) + } + } + + + override suspend fun getDetails(manga: Manga): Manga { + val doc = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() + val dateFormat = SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH) + return manga.copy( + altTitle = doc.selectFirst("h2.other-name")?.text(), + tags = doc.select("ul.list01 li").mapNotNullToSet { + val key = it.attr("href").substringAfterLast("-").substringBeforeLast(".") + MangaTag( + key = key, + title = it.text(), + source = source, + ) + }, + state = when (doc.selectFirstOrThrow(".status p.col-xs-9").text()) { + "Đang Cập Nhật" -> MangaState.ONGOING + "Hoàn Thành" -> MangaState.FINISHED + else -> null + }, + author = doc.selectFirst("li.author a")?.text(), + description = doc.selectFirst(".story-detail-info")?.html(), + chapters = doc.select("div.list_chapter div.works-chapter-item").mapChapters(reversed = true) { i, div -> + val a = div.selectFirstOrThrow("a") + val href = a.attrAsRelativeUrl("href") + val name = a.text() + val dateText = div.selectFirstOrThrow(".time-chap").text() + MangaChapter( + id = generateUid(href), + name = name, + number = i + 1, + url = href, + scanlator = null, + uploadDate = dateFormat.tryParse(dateText), + branch = null, + source = source, + ) + }, + ) + } + + override suspend fun getPages(chapter: MangaChapter): List { + val fullUrl = chapter.url.toAbsoluteUrl(domain) + val doc = webClient.httpGet(fullUrl).parseHtml() + val root = doc.body().selectFirstOrThrow(".chapter_content") + return root.select("div.page-chapter").map { div -> + val img = div.selectFirstOrThrow("img") + val url = img.src()?.toRelativeUrl(domain) ?: div.parseFailed("Image src not found") + MangaPage( + id = generateUid(url), + url = url, + preview = null, + source = source, + ) + } + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/util/Jsoup.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/util/Jsoup.kt index d4091b9e..9d2e0e59 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/util/Jsoup.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/util/Jsoup.kt @@ -155,7 +155,7 @@ fun Element.attrOrNull(vararg names: String): String? { } @JvmOverloads -fun Element.src(names: Array = arrayOf("data-src", "data-cfsrc", "data-original", "data-cdn", "data-sizes", "data-lazy-src", "data-srcset", "original-src", "src")): String? { +fun Element.src(names: Array = arrayOf("data-src", "data-cfsrc", "data-original", "data-cdn", "data-sizes", "data-lazy-src", "data-srcset", "original-src", "data-wpfc-original-src", "src")): String? { for (name in names) { val value = attrAsAbsoluteUrlOrNull(name) if (value != null) {