diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/JapScanParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/JapScanParser.kt index d94f04ea8..0d44cefe8 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/JapScanParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/JapScanParser.kt @@ -112,16 +112,21 @@ internal class JapScanParser(context: MangaLoaderContext) : PagedMangaParser(con val embeddedData = doc.requireElementById("data").attr("data-data") val script = webClient.httpGet(scriptUrl).parseRaw() - val sample = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toList() - val keyRegex = Regex("""'([\dA-Z]{62})'""", RegexOption.IGNORE_CASE) + val shortkeyRegex = Regex("""'([\dA-Z]{2})'""", RegexOption.IGNORE_CASE) + val longkeyRegex = Regex("""'([\dA-Z]{20})'""", RegexOption.IGNORE_CASE) - val keyTables = keyRegex.findAll(script) - .mapNotNullTo(ArrayList(2)) { match -> - match.groupValues[1].takeIf { - it.toList().sorted() == sample - } - } - check(keyTables.size == 2) + val longTables = longkeyRegex.findAll(script).map { + it.groupValues[1] + }.toList() + + val shortTables = shortkeyRegex.findAll(script).map { + it.groupValues[1] + }.toList() + + val keyTables = listOf( + ShortTables[1].reversed() + LongTables[5].reversed() + LongTables[2].reversed() + LongTables[0].reversed(), + ShortTables[2].reversed() + LongTables[3].reversed() + LongTables[4].reversed() + LongTables[1].reversed(), + ) var error: Exception? = null repeat(2) { i -> diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/AiyuMangaScanlation.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/AiyuMangaScanlation.kt deleted file mode 100644 index ca2361ace..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/AiyuMangaScanlation.kt +++ /dev/null @@ -1,51 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import org.jsoup.nodes.Element -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.parsers.model.MangaChapter -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.MangaState -import org.koitharu.kotatsu.parsers.util.mapToSet -import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow - -@MangaSourceParser("AIYUMANGASCANLATION", "AiyuMangaScanlation", "es") -internal class AiyuMangaScanlation(context: MangaLoaderContext) : - Madara6Parser(context, MangaSource.AIYUMANGASCANLATION, "aiyumangascanlation.com") { - - override val tagPrefix = "manga-genre/" - override val datePattern = "MM/dd/yyyy" - - override fun parseDetails(manga: Manga, body: Element, chapters: List): Manga { - val root = body.selectFirstOrThrow(".site-content") - val postContent = root.selectFirstOrThrow(".post-content") - val tags = postContent.getElementsContainingOwnText("Genre(s)") - .firstOrNull()?.tableValue() - ?.getElementsByAttributeValueContaining("href", tagPrefix) - ?.mapToSet { a -> a.asMangaTag() } ?: manga.tags - return manga.copy( - description = postContent.getElementsContainingOwnText("Summary") - .firstOrNull()?.tableValue()?.text()?.trim(), - altTitle = postContent.getElementsContainingOwnText("Alternative") - .firstOrNull()?.tableValue()?.text()?.trim(), - state = postContent.getElementsContainingOwnText("Status") - .firstOrNull()?.tableValue()?.text()?.asMangaState(), - tags = tags, - isNsfw = body.hasClass("adult-content"), - chapters = chapters, - ) - } - - override fun String.asMangaState(): MangaState? = when (this) { - "OnGoing", - "Upcoming", - -> MangaState.ONGOING - - "Completed", - "Dropped", - -> MangaState.FINISHED - - else -> null - } -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/AstralManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/AstralManga.kt deleted file mode 100644 index ca57451ab..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/AstralManga.kt +++ /dev/null @@ -1,59 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import org.jsoup.nodes.Element -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.parsers.model.MangaChapter -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.MangaState -import org.koitharu.kotatsu.parsers.util.assertNotNull -import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull -import org.koitharu.kotatsu.parsers.util.mapToSet -import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow - -@MangaSourceParser("ASTRALMANGA", "AstralManga", "fr") -internal class AstralManga(context: MangaLoaderContext) : - Madara6Parser(context, MangaSource.ASTRALMANGA, "astral-manga.fr", pageSize = 12) { - - override val datePattern = "dd/MM/yyyy" - - override fun String.asMangaState(): MangaState? = when (this) { - "En cours", - -> MangaState.ONGOING - - "Terminé", - "Complété", - -> MangaState.FINISHED - - else -> null - } - - override fun parseDetails(manga: Manga, body: Element, chapters: List): Manga { - val root = body.selectFirstOrThrow(".site-content") - val postContent = root.selectFirstOrThrow(".post-content") - val tags = postContent.getElementsContainingOwnText("Genre(s)") - .firstOrNull()?.tableValue() - ?.getElementsByAttributeValueContaining("href", tagPrefix) - ?.mapToSet { a -> a.asMangaTag() } ?: manga.tags - return manga.copy( - rating = postContent.selectFirstOrThrow(".post-rating") - .selectFirstOrThrow(".total_votes").text().toFloat() / 5f, - largeCoverUrl = root.selectFirst(".summary_image") - ?.selectFirst("img[data-src]") - ?.attrAsAbsoluteUrlOrNull("data-src") - .assertNotNull("largeCoverUrl"), - description = root.selectFirstOrThrow(".manga-excerpt") - .firstElementChild()?.html(), - author = postContent.getElementsContainingOwnText("Auteur(s)") - .firstOrNull()?.tableValue()?.text()?.trim(), - altTitle = postContent.getElementsContainingOwnText("Alternatif") - .firstOrNull()?.tableValue()?.text()?.trim(), - state = postContent.getElementsContainingOwnText("Statut") - .firstOrNull()?.tableValue()?.text()?.asMangaState(), - tags = tags, - isNsfw = body.hasClass("adult-content"), - chapters = chapters, - ) - } -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Atlantisscan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Atlantisscan.kt deleted file mode 100644 index e1e89fec1..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Atlantisscan.kt +++ /dev/null @@ -1,57 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import org.jsoup.nodes.Element -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.parsers.model.MangaChapter -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.MangaState -import org.koitharu.kotatsu.parsers.util.assertNotNull -import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull -import org.koitharu.kotatsu.parsers.util.mapToSet -import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow - - -@MangaSourceParser("ATLANTISSCAN", "Atlantisscan", "pt") -internal class Atlantisscan(context: MangaLoaderContext) : - Madara6Parser(context, MangaSource.ATLANTISSCAN, "atlantisscan.com") { - - override val datePattern = "dd/MM/yyyy" - - override fun String.asMangaState(): MangaState? = when (this) { - "OnGoing", - -> MangaState.ONGOING - - "finished", - -> MangaState.FINISHED - - else -> null - } - - override fun parseDetails(manga: Manga, body: Element, chapters: List): Manga { - val root = body.selectFirstOrThrow(".site-content") - val postContent = root.selectFirstOrThrow(".summary_content") - val tags = postContent.getElementsContainingOwnText("Genre(s) ") - .firstOrNull()?.tableValue() - ?.getElementsByAttributeValueContaining("href", tagPrefix) - ?.mapToSet { a -> a.asMangaTag() } ?: manga.tags - return manga.copy( - largeCoverUrl = root.selectFirst(".summary_image") - ?.selectFirst("img[data-src]") - ?.attrAsAbsoluteUrlOrNull("data-src") - .assertNotNull("largeCoverUrl"), - description = root.selectFirstOrThrow(".description-summary") - .firstElementChild()?.html(), - author = postContent.getElementsContainingOwnText("Author(s)") - .firstOrNull()?.tableValue()?.text()?.trim(), - altTitle = postContent.getElementsContainingOwnText("Alternative") - .firstOrNull()?.tableValue()?.text()?.trim(), - state = postContent.getElementsContainingOwnText("Status") - .firstOrNull()?.tableValue()?.text()?.asMangaState(), - tags = tags, - isNsfw = body.hasClass("adult-content"), - chapters = chapters, - ) - } -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/FrScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/FrScan.kt deleted file mode 100644 index 86f46179e..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/FrScan.kt +++ /dev/null @@ -1,60 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import org.jsoup.nodes.Element -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.parsers.model.MangaChapter -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.MangaState -import org.koitharu.kotatsu.parsers.util.assertNotNull -import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull -import org.koitharu.kotatsu.parsers.util.mapToSet -import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow -import java.util.* - -@MangaSourceParser("FRSCAN", "FrScan", "fr") -internal class FrScan(context: MangaLoaderContext) : - Madara6Parser(context, MangaSource.FRSCAN, "fr-scan.com") { - - override val datePattern = "MMMM d, yyyy" - override val sourceLocale: Locale = Locale.FRENCH - - override fun String.asMangaState(): MangaState? = when (this) { - "OnGoing", - -> MangaState.ONGOING - - "Complété", - -> MangaState.FINISHED - - else -> null - } - - override fun parseDetails(manga: Manga, body: Element, chapters: List): Manga { - val root = body.selectFirstOrThrow(".site-content") - val postContent = root.selectFirstOrThrow(".post-content") - val tags = postContent.getElementsContainingOwnText("Genre(s)") - .firstOrNull()?.tableValue() - ?.getElementsByAttributeValueContaining("href", tagPrefix) - ?.mapToSet { a -> a.asMangaTag() } ?: manga.tags - return manga.copy( - rating = postContent.selectFirstOrThrow(".post-rating") - .selectFirstOrThrow(".total_votes").text().toFloat() / 5f, - largeCoverUrl = root.selectFirst(".summary_image") - ?.selectFirst("img[data-src]") - ?.attrAsAbsoluteUrlOrNull("data-src") - .assertNotNull("largeCoverUrl"), - description = root.selectFirstOrThrow(".description-summary") - .firstElementChild()?.html(), - author = postContent.getElementsContainingOwnText("Auteur(s)") - .firstOrNull()?.tableValue()?.text()?.trim(), - altTitle = postContent.getElementsContainingOwnText("Alternatif") - .firstOrNull()?.tableValue()?.text()?.trim(), - state = postContent.getElementsContainingOwnText("Statut") - .firstOrNull()?.tableValue()?.text()?.asMangaState(), - tags = tags, - isNsfw = body.hasClass("adult-content"), - chapters = chapters, - ) - } -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Hentai4Free.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Hentai4Free.kt deleted file mode 100644 index dc2e473ac..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Hentai4Free.kt +++ /dev/null @@ -1,69 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import org.jsoup.nodes.Document -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.parsers.model.MangaChapter -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.MangaTag -import org.koitharu.kotatsu.parsers.util.* -import java.text.SimpleDateFormat -import java.util.* - -@MangaSourceParser("HENTAI_4FREE", "Hentai4Free", "en") -internal class Hentai4Free(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.HENTAI_4FREE, "hentai4free.net", pageSize = 24) { - - override val tagPrefix = "hentai-tag/" - - override val isNsfwSource = true - - override suspend fun getTags(): Set { - val doc = webClient.httpGet("https://$domain/").parseHtml() - val body = doc.body() - val root1 = body.selectFirst("header")?.selectFirst("ul.second-menu") - val list = root1?.select("li").orEmpty() - val keySet = HashSet(list.size) - return list.mapNotNullToSet { li -> - val a = li.selectFirst("a") ?: return@mapNotNullToSet null - val href = a.attr("href").removeSuffix("/") - .substringAfterLast(tagPrefix, "") - if (href.isEmpty() || !keySet.add(href)) { - return@mapNotNullToSet null - } - MangaTag( - key = href, - title = a.ownText().trim().toTitleCase(), - source = source, - ) - } - } - - override suspend fun getChapters(manga: Manga, doc: Document): List { - val slug = manga.url.removeSuffix('/').substringAfterLast('/') - val doc2 = webClient.httpPost( - "https://$domain/hentai/$slug/ajax/chapters/", - mapOf(), - ).parseHtml() - val ul = doc2.body().selectFirstOrThrow("ul") - val dateFormat = SimpleDateFormat(datePattern, Locale.US) - return ul.select("li").mapChapters(reversed = true) { i, li -> - val a = li.selectFirst("a") - val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") - MangaChapter( - id = generateUid(href), - name = a.ownText(), - number = i + 1, - url = href, - uploadDate = parseChapterDate( - dateFormat, - li.selectFirst("span.chapter-release-date i")?.text(), - ), - source = source, - scanlator = null, - branch = null, - ) - } - } -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Hentaiteca.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Hentaiteca.kt deleted file mode 100644 index e13664d47..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Hentaiteca.kt +++ /dev/null @@ -1,63 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import org.jsoup.nodes.Element -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.parsers.model.MangaChapter -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.MangaState -import org.koitharu.kotatsu.parsers.util.assertNotNull -import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull -import org.koitharu.kotatsu.parsers.util.mapToSet -import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow - -@MangaSourceParser("HENTAITECA", "Hentaiteca", "pt") -internal class Hentaiteca(context: MangaLoaderContext) : - Madara6Parser(context, MangaSource.HENTAITECA, "hentaiteca.net", pageSize = 10) { - - override val datePattern = "MM/dd/yyyy" - - override val tagPrefix = "genero/" - - override val isNsfwSource = true - - override fun String.asMangaState(): MangaState? = when (this) { - "Em Lançamento", - -> MangaState.ONGOING - - "Completo", - -> MangaState.FINISHED - - else -> null - } - - override fun parseDetails(manga: Manga, body: Element, chapters: List): Manga { - val root = body.selectFirstOrThrow(".site-content") - val postContent = root.selectFirstOrThrow(".summary_content") - val tags = postContent.getElementsContainingOwnText("Gênero(s)") - .firstOrNull()?.tableValue() - ?.getElementsByAttributeValueContaining("href", tagPrefix) - ?.mapToSet { a -> a.asMangaTag() } ?: manga.tags - return manga.copy( - rating = postContent.selectFirstOrThrow(".post-rating") - .selectFirstOrThrow(".total_votes").text().toFloat() / 5f, - largeCoverUrl = root.selectFirst(".summary_image") - ?.selectFirst("img[data-src]") - ?.attrAsAbsoluteUrlOrNull("data-src") - .assertNotNull("largeCoverUrl"), - description = root.selectFirstOrThrow(".description-summary") - .firstElementChild()?.html(), - author = postContent.getElementsContainingOwnText("Autor(es)") - .firstOrNull()?.tableValue()?.text()?.trim(), - altTitle = postContent.getElementsContainingOwnText("Alternatif") - .firstOrNull()?.tableValue()?.text()?.trim(), - state = postContent.getElementsContainingOwnText("Status") - .firstOrNull()?.tableValue()?.text()?.asMangaState(), - tags = tags, - isNsfw = body.hasClass("adult-content"), - chapters = chapters, - ) - } - -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Hentaizone.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Hentaizone.kt deleted file mode 100644 index 12f1c0860..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Hentaizone.kt +++ /dev/null @@ -1,93 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.parsers.model.MangaChapter -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.MangaState -import org.koitharu.kotatsu.parsers.util.* -import java.text.SimpleDateFormat -import java.util.* - - -@MangaSourceParser("HENTAIZONE", "Hentaizone", "fr") -internal class Hentaizone(context: MangaLoaderContext) : - Madara6Parser(context, MangaSource.HENTAIZONE, "hentaizone.xyz", pageSize = 10) { - - override val datePattern = "MMM d, yyyy" - override val sourceLocale: Locale = Locale.FRENCH - - override val isNsfwSource = true - - override fun String.asMangaState(): MangaState? = when (this) { - "En Cours", - -> MangaState.ONGOING - - "Terminé", - -> MangaState.FINISHED - - else -> null - } - - override fun parseDetails(manga: Manga, body: Element, chapters: List): Manga { - val root = body.selectFirstOrThrow(".site-content") - val postContent = root.selectFirstOrThrow(".summary_content") - val tags = postContent.getElementsContainingOwnText("Genre(s)") - .firstOrNull()?.tableValue() - ?.getElementsByAttributeValueContaining("href", tagPrefix) - ?.mapToSet { a -> a.asMangaTag() } ?: manga.tags - return manga.copy( - rating = postContent.selectFirstOrThrow(".post-rating") - .selectFirstOrThrow(".total_votes").text().toFloat() / 5f, - description = root.selectFirst("div.description-summary")?.selectFirst("div.summary__content")?.select("p") - ?.filterNot { it.ownText().startsWith("A brief description") }?.joinToString { it.html() }, - author = postContent.getElementsContainingOwnText("Auteur(s)") - .firstOrNull()?.tableValue()?.text()?.trim(), - altTitle = postContent.getElementsContainingOwnText("Alternatif") - .firstOrNull()?.tableValue()?.text()?.trim(), - state = postContent.getElementsContainingOwnText("Statut") - .firstOrNull()?.tableValue()?.text()?.asMangaState(), - tags = tags, - chapters = chapters, - ) - } - - - override suspend fun getChapters(manga: Manga, doc: Document): List { - val root2 = doc.body().selectFirstOrThrow("div.content-area").selectFirstOrThrow("div.c-page") - val dateFormat = SimpleDateFormat(datePattern, sourceLocale) - return root2.select("li").mapChapters(reversed = true) { i, li -> - val a = li.selectFirst("a") - val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") - - // correct parse date missing a "." - val date_org = li.selectFirst("span.chapter-release-date i")?.text() ?: "janv 1, 2000" - val date_corect_parse = date_org - .replace("janv", "janv.") - .replace("févr", "févr.") - .replace("avr", "avr.") - .replace("juil", "juil.") - .replace("sept", "sept.") - .replace("nov", "nov.") - .replace("oct", "oct.") - .replace("déc", "déc.") - - MangaChapter( - id = generateUid(href), - name = a.ownText(), - number = i + 1, - url = href, - uploadDate = parseChapterDate( - dateFormat, - date_corect_parse, - ), - source = source, - scanlator = null, - branch = null, - ) - } - } -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/HhentaiFr.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/HhentaiFr.kt deleted file mode 100644 index 367c84687..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/HhentaiFr.kt +++ /dev/null @@ -1,66 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import org.jsoup.nodes.Element -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.parsers.model.MangaChapter -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.MangaState -import org.koitharu.kotatsu.parsers.util.domain -import org.koitharu.kotatsu.parsers.util.insertCookies -import org.koitharu.kotatsu.parsers.util.mapToSet -import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow -import java.util.* - - -@MangaSourceParser("HHENTAIFR", "HhentaiFr", "fr") -internal class HhentaiFr(context: MangaLoaderContext) : - Madara6Parser(context, MangaSource.HHENTAIFR, "hhentai.fr") { - - override val datePattern = "MMMM d, yyyy" - override val sourceLocale: Locale = Locale.FRENCH - - override val isNsfwSource = true - - init { - context.cookieJar.insertCookies( - domain, - "age_gate=32;", - ) - } - - override fun String.asMangaState(): MangaState? = when (this) { - "En Cours", - -> MangaState.ONGOING - - "Terminé", - -> MangaState.FINISHED - - else -> null - } - - override fun parseDetails(manga: Manga, body: Element, chapters: List): Manga { - val root = body.selectFirstOrThrow(".site-content") - val postContent = root.selectFirstOrThrow(".summary_content") - val tags = postContent.getElementsContainingOwnText("Genre(s)") - .firstOrNull()?.tableValue() - ?.getElementsByAttributeValueContaining("href", tagPrefix) - ?.mapToSet { a -> a.asMangaTag() } ?: manga.tags - return manga.copy( - rating = postContent.selectFirstOrThrow(".post-rating") - .selectFirstOrThrow(".total_votes").text().toFloat() / 5f, - description = root.selectFirstOrThrow(".description-summary") - .firstElementChild()?.html(), - author = postContent.getElementsContainingOwnText("Auteur(s)") - .firstOrNull()?.tableValue()?.text()?.trim(), - altTitle = postContent.getElementsContainingOwnText("Alternatif") - .firstOrNull()?.tableValue()?.text()?.trim(), - state = postContent.getElementsContainingOwnText("Statut") - .firstOrNull()?.tableValue()?.text()?.asMangaState(), - tags = tags, - isNsfw = body.hasClass("adult-content"), - chapters = chapters, - ) - } -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Hipercool.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Hipercool.kt deleted file mode 100644 index d9b942eea..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Hipercool.kt +++ /dev/null @@ -1,54 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import org.jsoup.nodes.Element -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.parsers.model.MangaChapter -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.MangaState -import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull -import org.koitharu.kotatsu.parsers.util.mapToSet -import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow -import java.util.* - - -@MangaSourceParser("HIPERCOOL", "Hipercool", "pt") -internal class Hipercool(context: MangaLoaderContext) : - Madara6Parser(context, MangaSource.HIPERCOOL, "hipercool.xyz", pageSize = 20) { - - override val datePattern = "MMMM d, yyyy" - - override val tagPrefix = "manga-tag/" - - override val isNsfwSource = true - - override fun parseDetails(manga: Manga, body: Element, chapters: List): Manga { - val root = body.selectFirstOrThrow(".site-content") - val postContent = root.selectFirstOrThrow(".main-col") - val tags = postContent.getElementsByClass("tags-content") - .firstOrNull()?.tableValue() - ?.getElementsByAttributeValueContaining("href", tagPrefix) - ?.mapToSet { a -> a.asMangaTag() } ?: manga.tags - - return manga.copy( - - - largeCoverUrl = root.selectFirst("picture") - ?.selectFirst("img[data-src]") - ?.attrAsAbsoluteUrlOrNull("data-src"), - description = root.selectFirst("div.description-summary")?.selectFirst("div.summary__content")?.select("p") - ?.filterNot { it.ownText().startsWith("A brief description") }?.joinToString { it.html() }, - tags = tags, - isNsfw = body.hasClass("adult-content"), - chapters = chapters, - ) - } - - override fun String.asMangaState() = when (trim().lowercase(Locale.ROOT)) { - "em lançamento" -> MangaState.ONGOING - - else -> null - } - -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/IsekaiScanEuParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/IsekaiScanEuParser.kt deleted file mode 100644 index 9e2a099c8..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/IsekaiScanEuParser.kt +++ /dev/null @@ -1,81 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.parsers.model.MangaChapter -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.MangaTag -import org.koitharu.kotatsu.parsers.util.* -import java.text.SimpleDateFormat -import java.util.* - -@MangaSourceParser("ISEKAISCAN_EU", "IsekaiScan", "en") -internal class IsekaiScanEuParser(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.ISEKAISCAN_EU, "isekaiscan.to") { - - override val datePattern = "MM/dd/yyyy" - - override suspend fun getChapters(manga: Manga, doc: Document): List { - doc.selectFirst("ul.version-chap")?.let { - return parseChapters(it) - } - val mangaId = doc.body().requireElementById("manga-chapters-holder").attr("data-id") - val ul = webClient.httpPost( - "https://${domain}/wp-admin/admin-ajax.php", - mapOf( - "action" to "manga_get_chapters", - "manga" to mangaId, - ), - ).parseHtml().body().selectFirstOrThrow("ul") - return parseChapters(ul) - } - - override suspend fun getTags(): Set { - val doc = webClient.httpGet("https://$domain/mangax/").parseHtml() - val body = doc.body() - val root1 = body.selectFirst("header")?.selectFirst("ul.second-menu") - val root2 = body.selectFirst("div.genres_wrap")?.selectFirst("ul.list-unstyled") - if (root1 == null && root2 == null) { - doc.parseFailed("Root not found") - } - val list = root1?.select("li").orEmpty() + root2?.select("li").orEmpty() - val keySet = HashSet(list.size) - return list.mapNotNullToSet { li -> - val a = li.selectFirst("a") ?: return@mapNotNullToSet null - val href = a.attr("href").removeSuffix("/") - .substringAfterLast(tagPrefix, "") - if (href.isEmpty() || !keySet.add(href)) { - return@mapNotNullToSet null - } - MangaTag( - key = href, - title = a.ownText().toTitleCase(Locale.ENGLISH), - source = source, - ) - } - } - - private fun parseChapters(ul: Element): List { - val dateFormat = SimpleDateFormat(datePattern, Locale.US) - return ul.select("li").mapChapters(reversed = true) { i, li -> - val a = li.selectFirst("a") - val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") - MangaChapter( - id = generateUid(href), - name = a.ownText(), - number = i + 1, - url = href, - uploadDate = parseChapterDate( - dateFormat, - li.selectFirst("span.chapter-release-date i")?.text(), - ), - source = source, - scanlator = null, - branch = null, - ) - } - } -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Madara5Parser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Madara5Parser.kt deleted file mode 100644 index 9469331bc..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Madara5Parser.kt +++ /dev/null @@ -1,183 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import androidx.collection.arraySetOf -import org.jsoup.nodes.Element -import org.koitharu.kotatsu.parsers.InternalParsersApi -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.* - -abstract class Madara5Parser @InternalParsersApi constructor( - context: MangaLoaderContext, - source: MangaSource, - domain: String, -) : PagedMangaParser(context, source, pageSize = 22) { - - protected open val datePattern = "MMMM dd, HH:mm" - protected open val tagPrefix = "/mangas/" - protected open val nsfwTags = arraySetOf("yaoi", "yuri", "mature") - - override val sortOrders: Set = EnumSet.of(SortOrder.UPDATED) - - override val configKeyDomain = ConfigKey.Domain(domain) - - override suspend fun getListPage( - page: Int, - query: String?, - tags: Set?, - sortOrder: SortOrder, - ): List { - val domain = domain - val url = buildString { - append("https://") - append(domain) - append("/search?s=") - if (!query.isNullOrEmpty()) { - append(query.urlEncoded()) - } - append("&post_type=wp-manga") - if (!tags.isNullOrEmpty()) { - for (tag in tags) { - append("&genre%5B%5D=") - append(tag.key) - } - } - append("&op=1&author=&artist=&page=") - append(page) - } - val root = webClient.httpGet(url).parseHtml().body().selectFirstOrThrow(".search-wrap") - return root.select(".c-tabs-item__content").map { div -> - val a = div.selectFirstOrThrow("a") - val img = div.selectLastOrThrow("img") - val href = a.attrAsRelativeUrl("href") - val postContent = root.selectFirstOrThrow(".post-content") - val tagSet = postContent.getElementsContainingOwnText("Genre") - .firstOrNull()?.tableValue() - ?.getElementsByAttributeValueContaining("href", tagPrefix) - ?.mapToSet { it.asMangaTag() }.orEmpty() - Manga( - id = generateUid(href), - title = a.attr("title"), - altTitle = postContent.getElementsContainingOwnText("Alternative") - .firstOrNull()?.tableValue()?.text()?.trim(), - url = href, - publicUrl = a.attrAsAbsoluteUrl("href"), - coverUrl = img.src().orEmpty(), - author = postContent.getElementsContainingOwnText("Author") - .firstOrNull()?.tableValue()?.text()?.trim(), - state = postContent.getElementsContainingOwnText("Status") - .firstOrNull()?.tableValue()?.text()?.asMangaState(), - isNsfw = isNsfw(tagSet), - rating = div.selectFirstOrThrow(".score").text() - .toFloatOrNull()?.div(5f) ?: RATING_UNKNOWN, - tags = tagSet, - source = source, - ) - } - } - - override suspend fun getDetails(manga: Manga): Manga { - val root = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml().body() - .selectFirstOrThrow(".site-content") - val postContent = root.selectFirstOrThrow(".post-content") - val tags = postContent.getElementsContainingOwnText("Genre") - .firstOrNull()?.tableValue() - ?.getElementsByAttributeValueContaining("href", tagPrefix) - ?.mapToSet { a -> a.asMangaTag() } ?: manga.tags - val mangaId = root.getElementById("manga-chapters-holder")?.attr("data-id")?.toLongOrNull() - ?: root.parseFailed("Cannot find mangaId") - return manga.copy( - description = (root.selectFirst(".detail-content") - ?: root.selectFirstOrThrow(".description-summary")).html(), - author = postContent.getElementsContainingOwnText("Author") - .firstOrNull()?.tableValue()?.text()?.trim(), - state = postContent.getElementsContainingOwnText("Status") - .firstOrNull()?.tableValue()?.text()?.asMangaState(), - tags = tags, - isNsfw = isNsfw(tags), - chapters = loadChapters(mangaId), - ) - } - - override suspend fun getPages(chapter: MangaChapter): List { - val fullUrl = chapter.url.toAbsoluteUrl(domain) - val doc = webClient.httpGet(fullUrl).parseHtml() - val arrayData = doc.getElementById("arraydata") ?: doc.parseFailed("#arraydata not found") - return arrayData.html().split(',').map { url -> - MangaPage( - id = generateUid(url), - url = url, - preview = null, - source = source, - ) - } - } - - override suspend fun getTags(): Set { - val doc = webClient.httpGet("http://${domain}/").parseHtml().body() - return doc.getElementsByAttributeValueContaining("href", tagPrefix) - .mapToSet { it.asMangaTag() } - } - - private suspend fun loadChapters(mangaId: Long): List { - val dateFormat = SimpleDateFormat(datePattern, sourceLocale) - val doc = webClient.httpGet("https://${domain}/ajax-list-chapter?mangaID=$mangaId").parseHtml() - return doc.select("li.wp-manga-chapter").mapChapters(reversed = true) { i, li -> - val a = li.selectFirstOrThrow("a") - val href = a.attrAsRelativeUrl("href") - MangaChapter( - id = generateUid(href), - url = href, - name = a.text(), - number = i + 1, - branch = null, - uploadDate = dateFormat.tryParse( - li.selectFirst(".chapter-release-date")?.text()?.trim(), - ), - scanlator = null, - source = source, - ) - } - } - - protected fun isNsfw(tags: Set): Boolean { - return tags.any { it.key in nsfwTags } - } - - private fun Element.src(): String? { - return absUrl("data-src").ifEmpty { - absUrl("src") - }.takeUnless { it.isEmpty() } - } - - private fun Element.tableValue(): Element { - for (p in parents()) { - val children = p.children() - if (children.size == 2) { - return children[1] - } - } - parseFailed("Cannot find tableValue for node ${text()}") - } - - private fun String.asMangaState() = when (trim().lowercase(sourceLocale)) { - "ongoing" -> MangaState.ONGOING - "completed" -> MangaState.FINISHED - else -> null - } - - private fun Element.asMangaTag() = MangaTag( - title = ownText(), - key = attr("href").removeSuffix('/').substringAfterLast('/') - .replace('-', '+'), - source = source, - ) - - @MangaSourceParser("MANGAOWLS", "BeautyManga", "en") - class BeautyManga(context: MangaLoaderContext) : Madara5Parser(context, MangaSource.MANGAOWLS, "beautymanga.com") -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Madara6Parser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Madara6Parser.kt deleted file mode 100644 index f4629e346..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/Madara6Parser.kt +++ /dev/null @@ -1,71 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import kotlinx.coroutines.async -import kotlinx.coroutines.coroutineScope -import org.jsoup.nodes.Element -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* -import java.text.SimpleDateFormat - -internal abstract class Madara6Parser( - context: MangaLoaderContext, - source: MangaSource, - domain: String, - pageSize: Int = 12, -) : MadaraParser(context, source, domain, pageSize) { - - override val datePattern: String = "dd MMMM yyyy" - - override suspend fun getDetails(manga: Manga): Manga { - return coroutineScope { - val chapters = async { loadChapters(manga.url) } - val body = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml().body() - parseDetails(manga, body, chapters.await()) - } - } - - protected fun Element.tableValue(): Element { - for (p in parents()) { - val children = p.children() - if (children.size == 2) { - return children[1] - } - } - parseFailed("Cannot find tableValue for node ${text()}") - } - - protected abstract fun String.asMangaState(): MangaState? - - protected fun Element.asMangaTag() = MangaTag( - title = ownText(), - key = attr("href").removeSuffix('/').substringAfterLast('/') - .replace('-', '+'), - source = source, - ) - - protected open suspend fun loadChapters(mangaUrl: String): List { - val url = mangaUrl.toAbsoluteUrl(domain).removeSuffix('/') + "/ajax/chapters/" - val dateFormat = SimpleDateFormat(datePattern, sourceLocale) - val doc = webClient.httpPost(url, emptyMap()).parseHtml() - return doc.select("li.wp-manga-chapter").mapChapters(reversed = true) { i, li -> - val a = li.selectFirstOrThrow("a") - val href = a.attrAsRelativeUrl("href") + "?style=list" - MangaChapter( - id = generateUid(href), - url = href, - name = a.text(), - number = i + 1, - branch = null, - uploadDate = parseChapterDate( - dateFormat, - li.selectFirst("span.chapter-release-date i")?.text(), - ), - scanlator = null, - source = source, - ) - } - } - - protected abstract fun parseDetails(manga: Manga, body: Element, chapters: List): Manga -} 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 077a4c99d..786a8167d 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 @@ -5,7 +5,6 @@ import kotlinx.coroutines.coroutineScope import org.jsoup.nodes.Document 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.exception.ParseException @@ -15,6 +14,7 @@ import java.text.DateFormat import java.text.SimpleDateFormat import java.util.* + internal abstract class MadaraParser( context: MangaLoaderContext, source: MangaSource, @@ -38,6 +38,28 @@ internal abstract class MadaraParser( searchPaginator.firstPage = 0 } + protected fun Element.tableValue(): Element { + for (p in parents()) { + val children = p.children() + if (children.size == 2) { + return children[1] + } + } + parseFailed("Cannot find tableValue for node ${text()}") + } + + + protected val ongoing: Array = arrayOf( + "مستمرة", "En curso", "En Curso","Ongoing", "OnGoing","On going", + "Ativo", "En Cours", "En cours", "Đang tiến hành", "Em lançamento", "em lançamento", "Em Lançamento", "Онгоінг", "Publishing", + "Devam Ediyor", "Em Andamento", "In Corso", "Güncel", "Berjalan", "Продолжается", "Updating", + "Lançando", "In Arrivo", "Emision", "En emision", "مستمر", "Curso", "En marcha", "Publicandose", "连载中",) + + protected val finished: Array = arrayOf( + "Completed", "Completo", "Complété", "Fini", "Terminé", "Tamamlandı", "Đã hoàn thành", "مكتملة", "Завершено", + "Finished", "Finalizado", "Completata", "One-Shot", "Bitti", "Tamat", "Completado", "Concluído", "Concluido", "已完结",) + + override suspend fun getListPage( page: Int, query: String?, @@ -80,9 +102,16 @@ internal abstract class MadaraParser( }.orEmpty(), author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(), state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText()?.trim() - ?.lowercase()) { - "ongoing" -> MangaState.ONGOING - "completed" -> MangaState.FINISHED + ?.lowercase()) + { + "مستمرة", "En curso", "En Curso","Ongoing", "OnGoing","On going", + "Ativo", "En Cours", "En cours", "Đang tiến hành", "Em lançamento", "em lançamento", "Em Lançamento", "Онгоінг", "Publishing", + "Devam Ediyor", "Em Andamento", "In Corso", "Güncel", "Berjalan", "Продолжается", "Updating", + "Lançando", "In Arrivo", "Emision", "En emision", "مستمر", "Curso", "En marcha", "Publicandose", "连载中", + -> MangaState.ONGOING + "Completed", "Completo", "Complété", "Fini", "Terminé", "Tamamlandı", "Đã hoàn thành", "مكتملة", "Завершено", + "Finished", "Finalizado", "Completata", "One-Shot", "Bitti", "Tamat", "Completado", "Concluído", "Concluido", "已完结", + -> MangaState.FINISHED else -> null }, source = source, @@ -120,36 +149,68 @@ internal abstract class MadaraParser( override suspend fun getDetails(manga: Manga): Manga = coroutineScope { val fullUrl = manga.url.toAbsoluteUrl(domain) val doc = webClient.httpGet(fullUrl).parseHtml() - val chaptersDeferred = async { getChapters(manga, doc) } - val root = doc.body().selectFirst("div.profile-manga")?.selectFirst("div.summary_content") - ?.selectFirst("div.post-content") ?: throw ParseException("Root not found", fullUrl) - val root2 = doc.body().selectFirst("div.content-area")?.selectFirst("div.c-page") - ?: throw ParseException("Root2 not found", fullUrl) - manga.copy( - tags = root.selectFirst("div.genres-content")?.select("a")?.mapNotNullToSet { a -> + + val testchekasync = doc.body().select("div.listing-chapters_wrap") + + val chaptersDeferred = if(testchekasync.isNullOrEmpty()) + { + async { loadChapters(manga.url) } + + }else + { + async { getChapters(manga, doc) } + } + + val desc = doc.body().selectFirst("div.description-summary div.summary__content") ?: + doc.body().selectFirst("div.summary_content div.post-content_item > h5 + div") ?: + doc.body().selectFirst("div.summary_content div.manga-excerpt") + + + val stateselect = + doc.body().select("div.post-content_item:contains(Status) > div.summary-content").last() ?: doc.body().select("div.post-content_item:contains(Statut) > div.summary-content").last() + ?: doc.body().select("div.post-content_item:contains(حالة العمل) > div.summary-content").last() ?: doc.body().select("div.post-content_item:contains(Estado) > div.summary-content").last() + ?: doc.body().select("div.post-content_item:contains(สถานะ) > div.summary-content").last() ?: doc.body().select("div.post-content_item:contains(Stato) > div.summary-content").last() + ?: doc.body().select("div.post-content_item:contains(Durum) > div.summary-content").last() ?: doc.body().select("div.post-content_item:contains(Statüsü) > div.summary-content").last() + ?: doc.body().select("div.summary-content").last() + + val state = + stateselect?.let { + when (it.text()) { + in ongoing -> MangaState.ONGOING + in finished -> MangaState.FINISHED + else -> null + } + } + + manga.copy( + tags = doc.body().select("div.genres-content a").mapNotNullToSet { a -> MangaTag( key = a.attr("href").removeSuffix("/").substringAfterLast('/'), title = a.text().toTitleCase(), source = source, ) - } ?: manga.tags, - description = root2.selectFirst("div.description-summary")?.selectFirst("div.summary__content")?.select("p") - ?.filterNot { it.ownText().startsWith("A brief description") }?.joinToString { it.html() }, + }, + description = desc?.select("p")?.filterNot { it.ownText().startsWith("A brief description") }?.joinToString { it.text() }, + altTitle = + doc.body().select(".post-content_item:contains(Alt) .summary-content").firstOrNull()?.tableValue()?.text()?.trim() ?: + doc.body().select(".post-content_item:contains(Nomes alternativos: ) .summary-content").firstOrNull()?.tableValue()?.text()?.trim(), + state = state, chapters = chaptersDeferred.await(), ) } protected open suspend fun getChapters(manga: Manga, doc: Document): List { - val root2 = doc.body().selectFirstOrThrow("div.content-area").selectFirstOrThrow("div.c-page") + val root2 = doc.body().selectFirstOrThrow("div.content-area") val dateFormat = SimpleDateFormat(datePattern, sourceLocale) - return root2.select("li").mapChapters(reversed = true) { i, li -> + return root2.select("li.wp-manga-chapter").mapChapters(reversed = true) { i, li -> val a = li.selectFirst("a") val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") + val link = href + "?style=list" MangaChapter( id = generateUid(href), name = a.ownText(), number = i + 1, - url = href, + url = link, uploadDate = parseChapterDate( dateFormat, li.selectFirst("span.chapter-release-date i")?.text(), @@ -161,6 +222,30 @@ internal abstract class MadaraParser( } } + protected open suspend fun loadChapters(mangaUrl: String): List { + val url = mangaUrl.toAbsoluteUrl(domain).removeSuffix('/') + "/ajax/chapters/" + val dateFormat = SimpleDateFormat(datePattern, sourceLocale) + val doc = webClient.httpPost(url, emptyMap()).parseHtml() + return doc.select("li.wp-manga-chapter").mapChapters(reversed = true) { i, li -> + val a = li.selectFirst("a") + val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") + val link = href + "?style=list" + MangaChapter( + id = generateUid(href), + url = link, + name = a.text(), + number = i + 1, + branch = null, + uploadDate = parseChapterDate( + dateFormat, + li.selectFirst("span.chapter-release-date i")?.text(), + ), + scanlator = null, + source = source, + ) + } + } + override suspend fun getPages(chapter: MangaChapter): List { val fullUrl = chapter.url.toAbsoluteUrl(domain) val doc = webClient.httpGet(fullUrl).parseHtml() @@ -289,193 +374,4 @@ internal abstract class MadaraParser( it.substring(0, pos) to it.substring(pos + 1) }.toMutableMap() - @MangaSourceParser("MANGAWEEBS", "MangaWeebs", "en") - class MangaWeebs(context: MangaLoaderContext) : MadaraParser( - context, MangaSource.MANGAWEEBS, "mangaweebs.in", - pageSize = 20, - ) { - override val datePattern = "dd MMMM HH:mm" - } - - @MangaSourceParser("HACHIMANGA", "HachiManga", "ja") - class HachiManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HACHIMANGA, "hachiraw.com") { - - override val sourceLocale: Locale = Locale.ENGLISH - } - - @MangaSourceParser("PIANMANGA", "PianManga", "en") - class PianManga(context: MangaLoaderContext) : MadaraParser( - context, MangaSource.PIANMANGA, "pianmanga.me", - pageSize = 10, - ) - - @MangaSourceParser("MANGAROSIE", "MangaRosie", "en") - class MangaRosie(context: MangaLoaderContext) : MadaraParser( - context, MangaSource.MANGAROSIE, "mangarosie.in", - pageSize = 16, - ) - - @MangaSourceParser("MANGATX", "MangaTx", "en") - class MangaTx(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGATX, "mangatx.com") - - @MangaSourceParser("MANGAEFFECT", "MangaEffect", "en") - class MangaEffect(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAEFFECT, "mangaeffect.com") { - override val datePattern = "dd.MM.yyyy" - } - - @MangaSourceParser("AQUAMANGA", "AquaManga", "en") - class AquaManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.AQUAMANGA, "aquamanga.com") - - @MangaSourceParser("MANGALEK", "MangaLek", "ar") - class MangaLek(context: MangaLoaderContext) : MadaraParser( - context, MangaSource.MANGALEK, "mangalek.com", - pageSize = 10, - ) - - @MangaSourceParser("HARIMANGA", "HariManga", "en") - class HariManga(context: MangaLoaderContext) : MadaraParser( - context, MangaSource.HARIMANGA, "harimanga.com", - pageSize = 10, - ) { - override val datePattern = "MM/dd/yyyy" - } - - @MangaSourceParser("KISSMANGA", "KissManga", "en") - class KissManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.KISSMANGA, "kissmanga.in") - - @MangaSourceParser("MANGAROCK", "MangaRock", "en") - class MangaRock(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAROCK, "mangarockteam.com") - - @MangaSourceParser("FREEMANGA", "FreeManga", "en") - class FreeManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.FREEMANGA, "freemanga.me") - - @MangaSourceParser("MANGA_KOMI", "MangaKomi", "en") - class MangaKomi(context: MangaLoaderContext) : MadaraParser( - context, MangaSource.MANGA_KOMI, "mangakomi.io", - pageSize = 18, - ) - - @MangaSourceParser("MANHWACLAN", "ManhwaClan", "en") - class ManhwaClan(context: MangaLoaderContext) : MadaraParser( - context, MangaSource.MANHWACLAN, "manhwaclan.com", - pageSize = 10, - ) - - @MangaSourceParser("MANGA_3S", "Manga3s", "en") - class Manga3s(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGA_3S, "manga3s.com") { - override val tagPrefix = "manhwa-genre/" - } - - @MangaSourceParser("MANHWAKOOL", "Manhwa Kool", "en") - class ManhwaKool(context: MangaLoaderContext) : MadaraParser( - context, MangaSource.MANHWAKOOL, "manhwakool.com", - pageSize = 10, - ) { - override val datePattern: String = "MM/dd" - } - - @MangaSourceParser("TOPMANHUA", "Top Manhua", "en") - class TopManhua(context: MangaLoaderContext) : MadaraParser(context, MangaSource.TOPMANHUA, "www.topmanhua.com") { - override val tagPrefix = "manhua-genre/" - override val datePattern = "MM/dd/yyyy" - } - - @MangaSourceParser("S2MANGA", "S2Manga", "en") - class S2Manga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.S2MANGA, "s2manga.com") - - @MangaSourceParser("SKY_MANGA", "Sky Manga", "en") - class SkyManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.SKY_MANGA, "skymanga.xyz") { - - override val isNsfwSource = true - - } - - @MangaSourceParser("BAKAMAN", "BakaMan", "th") - class BakaMan(context: MangaLoaderContext) : MadaraParser( - context, MangaSource.BAKAMAN, "bakaman.net", - pageSize = 18, - ) { - - override val isNsfwSource = false - } - - @MangaSourceParser("HENTAI20", "Hentai20", "en") - class Hentai20(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HENTAI20, "hentai20.io") { - - override val tagPrefix = "manga-genre/" - - override val isNsfwSource = true - } - - @MangaSourceParser("ALLPORN_COMIC", "All Porn Comic", "en") - class AllPornComic(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.ALLPORN_COMIC, "allporncomic.com", pageSize = 24) { - - override val tagPrefix = "porncomic-genre/" - - override val isNsfwSource = true - - } - - @MangaSourceParser("CAT_300", "Cat300", "th") - class Cat300(context: MangaLoaderContext) : MadaraParser(context, MangaSource.CAT_300, "cat300.com") { - - override val isNsfwSource = true - } - - @MangaSourceParser("BIBIMANGA", "BibiManga", "en") - class BibiManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.BIBIMANGA, "bibimanga.com") { - - override val isNsfwSource = false - } - - @MangaSourceParser("TREE_MANGA", "Tree Manga", "en") - class TreeManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.TREE_MANGA, "treemanga.com") { - - override val datePattern = "MM/dd/yyyy" - - } - - @MangaSourceParser("MANGACV", "Manga Cv", "en") - class MangaCv(context: MangaLoaderContext) : MadaraParser( - context, MangaSource.MANGACV, "mangacv.com", - pageSize = 10, - ) - - @MangaSourceParser("TOONILY", "Toonily", "en") - class Toonily(context: MangaLoaderContext) : MadaraParser( - context, MangaSource.TOONILY, "toonily.com", - pageSize = 18, - ) { - - override val tagPrefix = "webtoon-genre/" - - override val isNsfwSource = false - } - - @MangaSourceParser("MANGA_MANHUA", "Manga Manhua", "en") - class MangaManhua(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANGA_MANHUA, "mangamanhua.online", pageSize = 10) - - @MangaSourceParser("MANGA_247", "247MANGA", "en") - class Manga247(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGA_247, "247manga.com") { - override val tagPrefix = "manhwa-genre/" - } - - @MangaSourceParser("MANGA_365", "365Manga", "en") - class Manga365(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGA_365, "365manga.com") - - @MangaSourceParser("MANGACLASH", "Mangaclash", "en") - class Mangaclash(context: MangaLoaderContext) : MadaraParser( - context, MangaSource.MANGACLASH, "mangaclash.com", - pageSize = 18, - ) { - override val datePattern = "MM/dd/yyyy" - } - - @MangaSourceParser("ZINMANGA", "ZINMANGA", "en") - class Zinmanga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.ZINMANGA, "zinmanga.com") - - @MangaSourceParser("STKISSMANGA", "Stkissmanga", "en") - class Stkissmanga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.STKISSMANGA, "1stkissmanga.me") } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangaScantrad.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangaScantrad.kt deleted file mode 100644 index 743f79d8b..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangaScantrad.kt +++ /dev/null @@ -1,60 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import org.jsoup.nodes.Element -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.parsers.model.MangaChapter -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.MangaState -import org.koitharu.kotatsu.parsers.util.assertNotNull -import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull -import org.koitharu.kotatsu.parsers.util.mapToSet -import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow -import java.util.* - -@MangaSourceParser("MANGA_SCANTRAD", "Manga Scantrad", "fr") -internal class MangaScantrad(context: MangaLoaderContext) : - Madara6Parser(context, MangaSource.MANGA_SCANTRAD, "manga-scantrad.io") { - - override val datePattern = "d MMMM yyyy" - override val sourceLocale: Locale = Locale.FRENCH - - override fun String.asMangaState(): MangaState? = when (this) { - "OnGoing", - -> MangaState.ONGOING - - "Complété", - -> MangaState.FINISHED - - else -> null - } - - override fun parseDetails(manga: Manga, body: Element, chapters: List): Manga { - val root = body.selectFirstOrThrow(".site-content") - val postContent = root.selectFirstOrThrow(".summary_content") - val tags = postContent.getElementsContainingOwnText("Genre(s)") - .firstOrNull()?.tableValue() - ?.getElementsByAttributeValueContaining("href", tagPrefix) - ?.mapToSet { a -> a.asMangaTag() } ?: manga.tags - return manga.copy( - rating = postContent.selectFirstOrThrow(".post-rating") - .selectFirstOrThrow(".total_votes").text().toFloat() / 5f, - largeCoverUrl = root.selectFirst(".summary_image") - ?.selectFirst("img[data-src]") - ?.attrAsAbsoluteUrlOrNull("data-src") - .assertNotNull("largeCoverUrl"), - description = root.selectFirstOrThrow(".description-summary") - .firstElementChild()?.html(), - author = postContent.getElementsContainingOwnText("Auteur(s)") - .firstOrNull()?.tableValue()?.text()?.trim(), - altTitle = postContent.getElementsContainingOwnText("Alternatif") - .firstOrNull()?.tableValue()?.text()?.trim(), - state = postContent.getElementsContainingOwnText("État") - .firstOrNull()?.tableValue()?.text()?.asMangaState(), - tags = tags, - isNsfw = body.hasClass("adult-content"), - chapters = chapters, - ) - } -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangalinkParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangalinkParser.kt deleted file mode 100644 index d113210f6..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangalinkParser.kt +++ /dev/null @@ -1,46 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import kotlinx.coroutines.async -import kotlinx.coroutines.coroutineScope -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.exception.ParseException -import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.MangaTag -import org.koitharu.kotatsu.parsers.util.* - -@MangaSourceParser("MANGALINK_AR", "Mangalink", "ar") -internal class MangalinkParser(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANGALINK_AR, "mangalink.online", pageSize = 10) { - - override suspend fun getDetails(manga: Manga): Manga = coroutineScope { - val fullUrl = manga.url.toAbsoluteUrl(domain) - val doc = webClient.httpGet(fullUrl).parseHtml() - val chaptersDeferred = async { getChapters(manga, doc) } - val root = doc.body().selectFirst("div.profile-manga") - ?.selectFirst("div.summary_content") - ?.selectFirst("div.post-content") - ?: throw ParseException("Root not found", fullUrl) - val root2 = doc.body().selectFirst("div.content-area") - ?.selectFirst("div.c-page") - ?: throw ParseException("Root2 not found", fullUrl) - manga.copy( - tags = root.selectFirst("div.genres-content")?.select("a") - ?.mapNotNullToSet { a -> - MangaTag( - key = a.attr("href").removeSuffix("/").substringAfterLast('/'), - title = a.text().toTitleCase(), - source = source, - ) - } ?: manga.tags, - description = root2.selectFirst("div.description-summary") - ?.selectFirst("div.summary__content") - ?.select("p") - ?.filterNot { it.ownText().startsWith("A brief description") } - ?.joinToString { it.html() }, - chapters = chaptersDeferred.await(), - ) - } - -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/NeatManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/NeatManga.kt deleted file mode 100644 index 26529546c..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/NeatManga.kt +++ /dev/null @@ -1,98 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import kotlinx.coroutines.async -import kotlinx.coroutines.coroutineScope -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.exception.ParseException -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* -import java.text.SimpleDateFormat -import java.util.* - -@MangaSourceParser("NEATMANGA", "NeatManga", "en") -internal class NeatManga(context: MangaLoaderContext) : MadaraParser( - context, MangaSource.NEATMANGA, "neatmangas.com", - pageSize = 20, -) { - - override val datePattern = "dd MMMM yyyy" - - override suspend fun getDetails(manga: Manga): Manga = coroutineScope { - val chaptersDeferred = async { getChapters(manga) } - val fullUrl = manga.url.toAbsoluteUrl(domain) - val doc = webClient.httpGet(fullUrl).parseHtml() - val root = doc.body().selectFirst("div.profile-manga") - ?.selectFirst("div.summary_content") - ?.selectFirst("div.post-content") - ?: throw ParseException("Root not found", fullUrl) - val root2 = doc.body().selectFirst("div.content-area") - ?.selectFirst("div.c-page") - ?: throw ParseException("Root2 not found", fullUrl) - manga.copy( - tags = root.selectFirst("div.genres-content")?.select("a") - ?.mapNotNullToSet { a -> - MangaTag( - key = a.attr("href").removeSuffix("/").substringAfterLast('/'), - title = a.text().toTitleCase(), - source = source, - ) - } ?: manga.tags, - description = root2.getElementsMatchingOwnText("Summary") - .firstOrNull() - ?.nextElementSibling() - ?.select("p") - ?.filterNot { it.ownText().startsWith("A brief description") } - ?.joinToString { it.html() }, - chapters = chaptersDeferred.await(), - ) - } - - private suspend fun getChapters(manga: Manga): List { - val slug = manga.url.removeSuffix('/').substringAfterLast('/') - val doc2 = webClient.httpPost( - "https://$domain/manga/$slug/ajax/chapters/", - mapOf(), - ).parseHtml() - val ul = doc2.body().selectFirstOrThrow("ul") - val dateFormat = SimpleDateFormat(datePattern, Locale.US) - return ul.select("li").mapChapters(reversed = true) { i, li -> - val a = li.selectFirst("a") - val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") - MangaChapter( - id = generateUid(href), - name = a.ownText(), - number = i + 1, - url = href, - uploadDate = parseChapterDate( - dateFormat, - li.selectFirst("span.chapter-release-date i")?.text(), - ), - source = source, - scanlator = null, - branch = null, - ) - } - } - - override suspend fun getPages(chapter: MangaChapter): List { - val fullUrl = chapter.url.toAbsoluteUrl(domain) - val doc = webClient.httpGet(fullUrl).parseHtml() - val root = doc.body().selectFirst("div.main-col-inner") - ?.selectFirst("div.reading-content") - ?: throw ParseException("Root not found", fullUrl) - return root.select("div.page-break").mapNotNull { div -> - val img = div.selectFirst("img") - if (img == null || img.attr("id").isNullOrEmpty()) { - return@mapNotNull null - } - 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/site/madara/PrismaScansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/PrismaScansParser.kt deleted file mode 100644 index 381eab58d..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/PrismaScansParser.kt +++ /dev/null @@ -1,53 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import org.jsoup.nodes.Element -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.parsers.model.MangaChapter -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.MangaState -import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull -import org.koitharu.kotatsu.parsers.util.mapToSet -import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow - -@MangaSourceParser("PRISMA_SCANS", "Prisma Scans", "pt") -internal class PrismaScansParser(context: MangaLoaderContext) : - Madara6Parser(context, MangaSource.PRISMA_SCANS, "prismascans.net", 10) { - - override val tagPrefix = "manga-genre/" - override val datePattern = "MMM dd, yyyy" - - override fun parseDetails(manga: Manga, body: Element, chapters: List): Manga { - val root = body.selectFirstOrThrow(".site-content") - val postContent = root.selectFirstOrThrow(".post-content") - val tags = postContent.getElementsContainingOwnText("Gênero") - .firstOrNull()?.tableValue() - ?.getElementsByAttributeValueContaining("href", tagPrefix) - ?.mapToSet { a -> a.asMangaTag() } ?: manga.tags - return manga.copy( - largeCoverUrl = root.selectFirst("picture") - ?.selectFirst("img[data-src]") - ?.attrAsAbsoluteUrlOrNull("data-src"), - description = root.selectFirstOrThrow(".manga-excerpt").firstElementChild()?.html(), - author = postContent.getElementsContainingOwnText("Artista") - .firstOrNull()?.tableValue()?.text()?.trim(), - altTitle = postContent.getElementsContainingOwnText("Título Alternativo") - .firstOrNull()?.tableValue()?.text()?.trim(), - state = postContent.getElementsContainingOwnText("Status") - .firstOrNull()?.tableValue()?.text()?.asMangaState(), - tags = tags, - isNsfw = body.hasClass("adult-content"), - chapters = chapters, - ) - } - - override fun String.asMangaState() = when (trim().lowercase(sourceLocale)) { - "em lançamento" -> MangaState.ONGOING - "completo", - "cancelado", - -> MangaState.FINISHED - - else -> null - } -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ReaperScansFr.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ReaperScansFr.kt deleted file mode 100644 index 1f39412d6..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ReaperScansFr.kt +++ /dev/null @@ -1,37 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import kotlinx.coroutines.async -import kotlinx.coroutines.coroutineScope -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.MangaTag -import org.koitharu.kotatsu.parsers.util.* - -@MangaSourceParser("REAPERSCANS_FR", "ReaperScansFr", "fr") -internal class ReaperScansFr(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.REAPERSCANS_FR, "reaperscans.fr") { - - override val datePattern = "MM/dd/yyyy" - - override suspend fun getDetails(manga: Manga): Manga = coroutineScope { - val fullUrl = manga.url.toAbsoluteUrl(domain) - val doc = webClient.httpGet(fullUrl).parseHtml() - val chaptersDeferred = async { getChapters(manga, doc) } - val root = doc.body().selectFirstOrThrow(".site-content") - manga.copy( - tags = root.selectFirst("div.genres-content")?.select("a")?.mapNotNullToSet { a -> - MangaTag( - key = a.attr("href").removeSuffix("/").substringAfterLast('/'), - title = a.text().toTitleCase(), - source = source, - ) - } ?: manga.tags, - description = root.requireElementById("nav-profile") - .selectFirstOrThrow(".description-summary") - .firstElementChild()?.html(), - chapters = chaptersDeferred.await(), - ) - } -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ReaperScansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ReaperScansParser.kt deleted file mode 100644 index 383e134aa..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ReaperScansParser.kt +++ /dev/null @@ -1,86 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import org.jsoup.nodes.Element -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* -import java.util.* - -@MangaSourceParser("REAPER_SCANS_ID", "ReaperScansID", "id") -internal class ReaperScansParser(context: MangaLoaderContext) : - Madara6Parser(context, MangaSource.REAPER_SCANS_ID, "reaperscans.id") { - - override val datePattern = "MMMM dd, yyyy" - override val tagPrefix = "genre/" - override val sourceLocale: Locale = Locale.ENGLISH - - override fun String.asMangaState(): MangaState? = when (this) { - "OnGoing", - "Upcoming", - -> MangaState.ONGOING - - "Completed", - "Dropped", - -> MangaState.FINISHED - - else -> null - } - - override fun parseDetails(manga: Manga, body: Element, chapters: List): Manga { - val root = body.selectFirstOrThrow(".site-content") - val postContent = root.requireElementById("nav-info") - val tags = postContent.getElementsContainingOwnText("Gênero") - .firstOrNull()?.tableValue() - ?.getElementsByAttributeValueContaining("href", tagPrefix) - ?.mapToSet { a -> a.asMangaTag() } ?: manga.tags - return manga.copy( - rating = postContent.selectFirstOrThrow(".post-rating") - .selectFirstOrThrow(".total_votes").text().toFloat() / 5f, - largeCoverUrl = root.selectFirst(".summary_image") - ?.selectFirst("img[data-src]") - ?.attrAsAbsoluteUrlOrNull("data-src") - .assertNotNull("largeCoverUrl"), - description = root.requireElementById("nav-profile") - .selectFirstOrThrow(".description-summary") - .firstElementChild()?.html(), - author = postContent.getElementsContainingOwnText("Author(s)") - .firstOrNull()?.tableValue()?.text()?.trim(), - altTitle = postContent.getElementsContainingOwnText("Alternative") - .firstOrNull()?.tableValue()?.text()?.trim(), - state = postContent.getElementsContainingOwnText("Status") - .firstOrNull()?.tableValue()?.text()?.asMangaState(), - tags = tags, - isNsfw = body.hasClass("adult-content"), - chapters = chapters, - ) - } - - override suspend fun getTags(): Set { - val doc = webClient.httpGet("https://${domain}/semua-komik/").parseHtml() - val body = doc.body() - val root1 = body.selectFirst("header")?.selectFirst("ul.second-menu") - val root2 = body.selectFirst("div.genres_wrap")?.selectFirst("ul.list-unstyled") - if (root1 == null && root2 == null) { - doc.parseFailed("Root not found") - } - val list = root1?.select("li").orEmpty() + root2?.select("li").orEmpty() - val keySet = HashSet(list.size) - return list.mapNotNullToSet { li -> - val a = li.selectFirst("a") ?: return@mapNotNullToSet null - val href = a.attr("href").removeSuffix("/") - .substringAfterLast(tagPrefix, "") - if (href.isEmpty() || !keySet.add(href)) { - return@mapNotNullToSet null - } - MangaTag( - key = href, - title = a.ownText().trim().ifEmpty { - a.selectFirst(".menu-image-title")?.text()?.trim() ?: return@mapNotNullToSet null - }.toTitleCase(), - source = source, - ) - } - } - -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ScantradVf.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ScantradVf.kt deleted file mode 100644 index 818d8aac7..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ScantradVf.kt +++ /dev/null @@ -1,76 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import org.jsoup.nodes.Element -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* - -@MangaSourceParser("SCANTRADVF", "ScantradVf", "fr") -internal class ScantradVf(context: MangaLoaderContext) : - Madara6Parser(context, MangaSource.SCANTRADVF, "scantrad-vf.co") { - - override val datePattern = "d MMMM yyyy" - - override val tagPrefix = "genre/" - - override fun String.asMangaState(): MangaState? = when (this) { - "En cours", - -> MangaState.ONGOING - - "Complété", - "Terminé", - -> MangaState.FINISHED - - else -> null - } - - override fun parseDetails(manga: Manga, body: Element, chapters: List): Manga { - val root = body.selectFirstOrThrow(".site-content") - val postContent = root.selectFirstOrThrow(".summary_content") - val tags = postContent.getElementsContainingOwnText("Genre(s)") - .firstOrNull()?.tableValue() - ?.getElementsByAttributeValueContaining("href", tagPrefix) - ?.mapToSet { a -> a.asMangaTag() } ?: manga.tags - return manga.copy( - rating = postContent.selectFirstOrThrow(".post-rating") - .selectFirstOrThrow(".total_votes").text().toFloat() / 5f, - description = root.selectFirstOrThrow(".description-summary") - .firstElementChild()?.html(), - author = postContent.getElementsContainingOwnText("Auteur(s)") - .firstOrNull()?.tableValue()?.text()?.trim(), - state = postContent.getElementsContainingOwnText("Status") - .firstOrNull()?.tableValue()?.text()?.asMangaState(), - tags = tags, - isNsfw = body.hasClass("adult-content"), - chapters = chapters, - ) - } - - override suspend fun getTags(): Set { - val doc = webClient.httpGet("https://${domain}/genre/action/").parseHtml() - val body = doc.body() - val root1 = body.selectFirst("header")?.selectFirst("ul.second-menu") - val root2 = body.selectFirst("div.genres_wrap")?.selectFirst("ul.list-unstyled") - if (root1 == null && root2 == null) { - doc.parseFailed("Root not found") - } - val list = root2?.select("li").orEmpty() - val keySet = HashSet(list.size) - return list.mapNotNullToSet { li -> - val a = li.selectFirst("a") ?: return@mapNotNullToSet null - val href = a.attr("href").removeSuffix("/") - .substringAfterLast(tagPrefix, "") - if (href.isEmpty() || !keySet.add(href)) { - return@mapNotNullToSet null - } - MangaTag( - key = href, - title = a.ownText().trim().ifEmpty { - return@mapNotNullToSet null - }.toTitleCase(), - source = source, - ) - } - } -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/TatakaeScansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/TatakaeScansParser.kt deleted file mode 100644 index 109b13e16..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/TatakaeScansParser.kt +++ /dev/null @@ -1,50 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara - -import org.jsoup.nodes.Element -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.parsers.model.MangaChapter -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.MangaState -import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull -import org.koitharu.kotatsu.parsers.util.mapToSet -import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow -import java.util.* - -@MangaSourceParser("TATAKAE_SCANS", "Tatakae Scans", "pt") -internal class TatakaeScansParser(context: MangaLoaderContext) : - Madara6Parser(context, MangaSource.TATAKAE_SCANS, "tatakaescan.com", pageSize = 10) { - - override val datePattern: String = "dd 'de' MMMMM 'de' yyyy" - - override fun parseDetails(manga: Manga, body: Element, chapters: List): Manga { - val root = body.selectFirstOrThrow(".site-content") - val postContent = root.selectFirstOrThrow(".post-content") - val tags = postContent.getElementsContainingOwnText("Gênero") - .firstOrNull()?.tableValue() - ?.getElementsByAttributeValueContaining("href", tagPrefix) - ?.mapToSet { a -> a.asMangaTag() } ?: manga.tags - return manga.copy( - largeCoverUrl = root.selectFirst("picture") - ?.selectFirst("img[data-src]") - ?.attrAsAbsoluteUrlOrNull("data-src"), - description = (root.selectFirst(".detail-content") - ?: root.selectFirstOrThrow(".manga-excerpt")).html(), - author = postContent.getElementsContainingOwnText("Autor") - .firstOrNull()?.tableValue()?.text()?.trim(), - state = postContent.getElementsContainingOwnText("Status") - .firstOrNull()?.tableValue()?.text()?.asMangaState(), - tags = tags, - isNsfw = body.hasClass("adult-content"), - chapters = chapters, - ) - } - - override fun String.asMangaState() = when (trim().lowercase(Locale.ROOT)) { - "em lançamento" -> MangaState.ONGOING - - else -> null - } - -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLek.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLek.kt new file mode 100644 index 000000000..f98c56353 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLek.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("MANGALEK", "MangaLek", "ar") +internal class MangaLek(context: MangaLoaderContext) : MadaraParser( + context, MangaSource.MANGALEK, "mangalek.com", + pageSize = 10, +) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangalinkParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangalinkParser.kt new file mode 100644 index 000000000..5af97e4fa --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangalinkParser.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.ar + +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("MANGALINK_AR", "Mangalink", "ar") +internal class MangalinkParser(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGALINK_AR, "mangalink.online", pageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AllPornComic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AllPornComic.kt new file mode 100644 index 000000000..dd75f1e8e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AllPornComic.kt @@ -0,0 +1,17 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("ALLPORN_COMIC", "All Porn Comic", "en") +internal class AllPornComic(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ALLPORN_COMIC, "allporncomic.com", pageSize = 24) { + + override val tagPrefix = "porncomic-genre/" + + override val isNsfwSource = true + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AquaManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AquaManga.kt new file mode 100644 index 000000000..c4ccf4953 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AquaManga.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("AQUAMANGA", "AquaManga", "en") +internal class AquaManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.AQUAMANGA, "aquamanga.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BibiManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BibiManga.kt new file mode 100644 index 000000000..47ceed97e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BibiManga.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("BIBIMANGA", "BibiManga", "en") +internal class BibiManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.BIBIMANGA, "bibimanga.com") { + + override val isNsfwSource = false +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeManga.kt new file mode 100644 index 000000000..0a104842c --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeManga.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("FREEMANGA", "FreeManga", "en") +internal class FreeManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.FREEMANGA, "freemanga.me") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HariManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HariManga.kt new file mode 100644 index 000000000..048e6c5e1 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HariManga.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("HARIMANGA", "HariManga", "en") +internal class HariManga(context: MangaLoaderContext) : + MadaraParser( context, MangaSource.HARIMANGA, "harimanga.com", pageSize = 10,) { + + override val datePattern = "MMMM d, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai20.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai20.kt new file mode 100644 index 000000000..41f6df330 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai20.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("HENTAI20", "Hentai20", "en") +internal class Hentai20(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HENTAI20, "hentai20.io") { + + override val tagPrefix = "manga-genre/" + + override val isNsfwSource = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai4Free.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai4Free.kt new file mode 100644 index 000000000..d282ff25e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai4Free.kt @@ -0,0 +1,17 @@ +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("HENTAI_4FREE", "Hentai4Free", "en") +internal class Hentai4Free(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.HENTAI_4FREE, "hentai4free.net", pageSize = 24) { + + override val tagPrefix = "hentai-tag/" + + override val isNsfwSource = true + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScanEuParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScanEuParser.kt new file mode 100644 index 000000000..263950480 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScanEuParser.kt @@ -0,0 +1,15 @@ +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("ISEKAISCAN_EU", "IsekaiScan", "en") +internal class IsekaiScanEuParser(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ISEKAISCAN_EU, "isekaiscan.to") { + + override val datePattern = "MM/dd/yyyy" + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/KissManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/KissManga.kt new file mode 100644 index 000000000..1b082adf7 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/KissManga.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("KISSMANGA", "KissManga", "en") +internal class KissManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.KISSMANGA, "kissmanga.in") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga247.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga247.kt new file mode 100644 index 000000000..5b5b7badf --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga247.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("MANGA_247", "247MANGA", "en") +internal class Manga247(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGA_247, "247manga.com") { + override val tagPrefix = "manhwa-genre/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga365.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga365.kt new file mode 100644 index 000000000..f7e418cc7 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga365.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("MANGA_365", "365Manga", "en") +internal class Manga365(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGA_365, "365manga.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga3s.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga3s.kt new file mode 100644 index 000000000..4a843ac53 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga3s.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("MANGA_3S", "Manga3s", "en") +internal class Manga3s(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGA_3S, "manga3s.com") { + + override val tagPrefix = "manhwa-genre/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaCv.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaCv.kt new file mode 100644 index 000000000..ff1b094fc --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaCv.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("MANGACV", "Manga Cv", "en") +internal class MangaCv(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGACV, "mangacv.com", pageSize = 10,) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangaDistrict.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDistrict.kt similarity index 93% rename from src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangaDistrict.kt rename to src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDistrict.kt index 305013063..229e12a3b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangaDistrict.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDistrict.kt @@ -1,4 +1,4 @@ -package org.koitharu.kotatsu.parsers.site.madara +package org.koitharu.kotatsu.parsers.site.madara.en import org.jsoup.nodes.Document import org.koitharu.kotatsu.parsers.MangaLoaderContext @@ -6,6 +6,7 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.util.* import java.text.SimpleDateFormat import java.util.* diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaEffect.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaEffect.kt new file mode 100644 index 000000000..3f8e14bd7 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaEffect.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("MANGAEFFECT", "MangaEffect", "en") +internal class MangaEffect(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAEFFECT, "mangaeffect.com") { + override val datePattern = "dd.MM.yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKomi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKomi.kt new file mode 100644 index 000000000..2c87a12c9 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKomi.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("MANGA_KOMI", "MangaKomi", "en") +internal class MangaKomi(context: MangaLoaderContext) : MadaraParser( context, MangaSource.MANGA_KOMI, "mangakomi.io", pageSize = 18,) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaManhua.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaManhua.kt new file mode 100644 index 000000000..114147f81 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaManhua.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("MANGA_MANHUA", "Manga Manhua", "en") +internal class MangaManhua(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGA_MANHUA, "mangamanhua.online", pageSize = 10) +{ + override val datePattern = "d MMMM، yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangaRead.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRead.kt similarity index 93% rename from src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangaRead.kt rename to src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRead.kt index c69709fab..351a28819 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MangaRead.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRead.kt @@ -1,4 +1,4 @@ -package org.koitharu.kotatsu.parsers.site.madara +package org.koitharu.kotatsu.parsers.site.madara.en import androidx.collection.arraySetOf import org.jsoup.nodes.Element @@ -6,6 +6,7 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.exception.ParseException import org.koitharu.kotatsu.parsers.model.* +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.util.* import java.util.* @@ -97,15 +98,6 @@ internal class MangaRead(context: MangaLoaderContext) : } } - private fun Element.tableValue(): Element { - for (p in parents()) { - val children = p.children() - if (children.size == 2) { - return children[1] - } - } - parseFailed("Cannot find tableValue for node ${text()}") - } private fun isNsfw(tags: Set): Boolean { return tags.any { it.key in nsfwTags } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRock.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRock.kt new file mode 100644 index 000000000..e9299d1c8 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRock.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("MANGAROCK", "MangaRock", "en") +internal class MangaRock(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAROCK, "mangarockteam.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRosie.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRosie.kt new file mode 100644 index 000000000..999dffd72 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRosie.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("MANGAROSIE", "MangaRosie", "en") +internal class MangaRosie(context: MangaLoaderContext) : MadaraParser( + context, MangaSource.MANGAROSIE, "mangarosie.in", + pageSize = 16, +) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTx.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTx.kt new file mode 100644 index 000000000..9b1c66b2a --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTx.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("MANGATX", "MangaTx", "en") +internal class MangaTx(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGATX, "mangatx.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaWeebs.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaWeebs.kt new file mode 100644 index 000000000..1b7401a6b --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaWeebs.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("MANGAWEEBS", "MangaWeebs", "en") +internal class MangaWeebs(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAWEEBS, "mangaweebs.in", pageSize = 20,) { + + override val datePattern = "dd MMMM HH:mm" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangaclash.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangaclash.kt new file mode 100644 index 000000000..056a4d539 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangaclash.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("MANGACLASH", "Mangaclash", "en") +internal class Mangaclash(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGACLASH, "mangaclash.com", pageSize = 18,) { + override val datePattern = "MM/dd/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaClan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaClan.kt new file mode 100644 index 000000000..dd7b87f51 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaClan.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("MANHWACLAN", "ManhwaClan", "en") +internal class ManhwaClan(context: MangaLoaderContext) : MadaraParser( context, MangaSource.MANHWACLAN, "manhwaclan.com", pageSize = 10,) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaKool.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaKool.kt new file mode 100644 index 000000000..b50b56c0e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaKool.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("MANHWAKOOL", "Manhwa Kool", "en") +internal class ManhwaKool(context: MangaLoaderContext) : MadaraParser( context, MangaSource.MANHWAKOOL, "manhwakool.com", pageSize = 10,) { + + override val datePattern: String = "MMMM d, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/NeatManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/NeatManga.kt new file mode 100644 index 000000000..8c627d7f2 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/NeatManga.kt @@ -0,0 +1,17 @@ +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("NEATMANGA", "NeatManga", "en") +internal class NeatManga(context: MangaLoaderContext) : MadaraParser( + context, MangaSource.NEATMANGA, "neatmangas.com", + pageSize = 20, +) { + + override val datePattern = "dd MMMM yyyy" + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PianManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PianManga.kt new file mode 100644 index 000000000..081c6f57e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PianManga.kt @@ -0,0 +1,13 @@ +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("PIANMANGA", "PianManga", "en") +internal class PianManga(context: MangaLoaderContext) : MadaraParser( + context, MangaSource.PIANMANGA, "pianmanga.me", + pageSize = 10, +) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/S2Manga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/S2Manga.kt new file mode 100644 index 000000000..2160e55ab --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/S2Manga.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("S2MANGA", "S2Manga", "en") +internal class S2Manga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.S2MANGA, "s2manga.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Stkissmanga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Stkissmanga.kt new file mode 100644 index 000000000..0cd5c59d5 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Stkissmanga.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("STKISSMANGA", "Stkissmanga", "en") +internal class Stkissmanga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.STKISSMANGA, "1stkissmanga.me") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Toonily.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Toonily.kt new file mode 100644 index 000000000..d70a1281f --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Toonily.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("TOONILY", "Toonily", "en") +internal class Toonily(context: MangaLoaderContext) : MadaraParser(context, MangaSource.TOONILY, "toonily.com", pageSize = 18,) { + + override val tagPrefix = "webtoon-genre/" + + override val isNsfwSource = false +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TopManhua.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TopManhua.kt new file mode 100644 index 000000000..7e753c76a --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TopManhua.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("TOPMANHUA", "Top Manhua", "en") +internal class TopManhua(context: MangaLoaderContext) : MadaraParser(context, MangaSource.TOPMANHUA, "www.topmanhua.com") { + + override val tagPrefix = "manhua-genre/" + override val datePattern = "MM/dd/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TreeManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TreeManga.kt new file mode 100644 index 000000000..50e370bc1 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TreeManga.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("TREE_MANGA", "Tree Manga", "en") +internal class TreeManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.TREE_MANGA, "treemanga.com") { + + override val datePattern = "MM/dd/yyyy" + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Zinmanga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Zinmanga.kt new file mode 100644 index 000000000..f27d10679 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Zinmanga.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("ZINMANGA", "ZINMANGA", "en") +internal class Zinmanga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.ZINMANGA, "zinmanga.com") +{ + override val datePattern = "MM/dd/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/AiyuMangaScanlation.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/AiyuMangaScanlation.kt new file mode 100644 index 000000000..9711d45e2 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/AiyuMangaScanlation.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.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 + +@MangaSourceParser("AIYUMANGASCANLATION", "AiyuMangaScanlation", "es") +internal class AiyuMangaScanlation(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.AIYUMANGASCANLATION, "aiyumangascanlation.com") { + + override val tagPrefix = "manga-genre/" + override val datePattern = "MM/dd/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/AstralManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/AstralManga.kt new file mode 100644 index 000000000..ac2c34a68 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/AstralManga.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.fr + + +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("ASTRALMANGA", "AstralManga", "fr") +internal class AstralManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ASTRALMANGA, "astral-manga.fr", pageSize = 12) { + + override val datePattern = "dd/MM/yyyy" + +} 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 new file mode 100644 index 000000000..2ef100129 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/FrScan.kt @@ -0,0 +1,16 @@ +package org.koitharu.kotatsu.parsers.site.madara.fr + +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", "FrScan", "fr") +internal class FrScan(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.FRSCAN, "fr-scan.com") { + + override val datePattern = "MMMM d, yyyy" + override val sourceLocale: Locale = Locale.FRENCH + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Hentaizone.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Hentaizone.kt new file mode 100644 index 000000000..09a64cab2 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Hentaizone.kt @@ -0,0 +1,59 @@ +package org.koitharu.kotatsu.parsers.site.madara.fr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import org.koitharu.kotatsu.parsers.util.* +import java.text.SimpleDateFormat +import java.util.Locale + + +@MangaSourceParser("HENTAIZONE", "Hentaizone", "fr") +internal class Hentaizone(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.HENTAIZONE, "hentaizone.xyz", pageSize = 10) { + + override val datePattern = "MMM d, yyyy" + override val sourceLocale: Locale = Locale.FRENCH + + override val isNsfwSource = true + + + override suspend fun loadChapters(mangaUrl: String): List { + val url = mangaUrl.toAbsoluteUrl(domain).removeSuffix('/') + "/ajax/chapters/" + val dateFormat = SimpleDateFormat(datePattern, sourceLocale) + val doc = webClient.httpPost(url, emptyMap()).parseHtml() + + return doc.select("li.wp-manga-chapter").mapChapters(reversed = true) { i, li -> + val a = li.selectFirstOrThrow("a") + val href = a.attrAsRelativeUrl("href") + "?style=list" + + // correct parse date missing a "." + val date_org = li.selectFirst("span.chapter-release-date i")?.text() ?: "janv 1, 2000" + val date_corect_parse = date_org + .replace("janv", "janv.") + .replace("févr", "févr.") + .replace("avr", "avr.") + .replace("juil", "juil.") + .replace("sept", "sept.") + .replace("nov", "nov.") + .replace("oct", "oct.") + .replace("déc", "déc.") + MangaChapter( + id = generateUid(href), + url = href, + name = a.text(), + number = i + 1, + branch = null, + uploadDate = parseChapterDate( + dateFormat, + date_corect_parse, + ), + scanlator = null, + source = source, + ) + } + } + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HhentaiFr.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HhentaiFr.kt new file mode 100644 index 000000000..30a006390 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HhentaiFr.kt @@ -0,0 +1,27 @@ +package org.koitharu.kotatsu.parsers.site.madara.fr + +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.util.domain +import org.koitharu.kotatsu.parsers.util.insertCookies +import java.util.Locale + + +@MangaSourceParser("HHENTAIFR", "HhentaiFr", "fr") +internal class HhentaiFr(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.HHENTAIFR, "hhentai.fr") { + + override val datePattern = "MMMM d, yyyy" + override val sourceLocale: Locale = Locale.FRENCH + + override val isNsfwSource = true + + init { + context.cookieJar.insertCookies( + domain, + "age_gate=32;", + ) + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangaScantrad.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangaScantrad.kt new file mode 100644 index 000000000..68797b884 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangaScantrad.kt @@ -0,0 +1,16 @@ +package org.koitharu.kotatsu.parsers.site.madara.fr + +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("MANGA_SCANTRAD", "Manga Scantrad", "fr") +internal class MangaScantrad(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGA_SCANTRAD, "manga-scantrad.io") { + + override val datePattern = "d MMMM yyyy" + override val sourceLocale: Locale = Locale.FRENCH + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ReaperScansFr.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ReaperScansFr.kt new file mode 100644 index 000000000..4a73d4475 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ReaperScansFr.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.fr + + +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("REAPERSCANS_FR", "ReaperScansFr", "fr") +internal class ReaperScansFr(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.REAPERSCANS_FR, "reaperscans.fr") { + + override val datePattern = "MM/dd/yyyy" + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ScantradVf.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ScantradVf.kt new file mode 100644 index 000000000..0c11ed32a --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ScantradVf.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.fr + +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("SCANTRADVF", "ScantradVf", "fr") +internal class ScantradVf(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.SCANTRADVF, "scantrad-vf.co") { + + override val datePattern = "d MMMM yyyy" + + override val tagPrefix = "genre/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ReaperScansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ReaperScansParser.kt new file mode 100644 index 000000000..d9657b698 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ReaperScansParser.kt @@ -0,0 +1,17 @@ +package org.koitharu.kotatsu.parsers.site.madara.id + +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("REAPER_SCANS_ID", "ReaperScansID", "id") +internal class ReaperScansParser(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.REAPER_SCANS_ID, "reaperscans.id") { + + override val datePattern = "MMMM dd, yyyy" + override val tagPrefix = "genre/" + 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 new file mode 100644 index 000000000..6c6448ee8 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ja/HachiManga.kt @@ -0,0 +1,10 @@ +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("HACHIMANGA", "HachiManga", "ja") +internal class HachiManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HACHIMANGA, "hachiraw.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Atlantisscan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Atlantisscan.kt new file mode 100644 index 000000000..a67358924 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Atlantisscan.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +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("ATLANTISSCAN", "Atlantisscan", "pt") +internal class Atlantisscan(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ATLANTISSCAN, "atlantisscan.com") { + + override val datePattern = "dd/MM/yyyy" + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Hentaiteca.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Hentaiteca.kt new file mode 100644 index 000000000..f5a528865 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Hentaiteca.kt @@ -0,0 +1,17 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +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("HENTAITECA", "Hentaiteca", "pt") +internal class Hentaiteca(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.HENTAITECA, "hentaiteca.net", pageSize = 10) { + + override val datePattern = "MM/dd/yyyy" + + override val tagPrefix = "genero/" + + override val isNsfwSource = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Hipercool.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Hipercool.kt new file mode 100644 index 000000000..b1db364af --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Hipercool.kt @@ -0,0 +1,19 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +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("HIPERCOOL", "Hipercool", "pt") +internal class Hipercool(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.HIPERCOOL, "hipercool.xyz", pageSize = 20) { + + override val datePattern = "MMMM d, yyyy" + + override val tagPrefix = "manga-tag/" + + override val isNsfwSource = true + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/PrismaScansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/PrismaScansParser.kt new file mode 100644 index 000000000..fb55202f2 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/PrismaScansParser.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +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("PRISMA_SCANS", "Prisma Scans", "pt") +internal class PrismaScansParser(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.PRISMA_SCANS, "prismascans.net", 10) { + + override val tagPrefix = "manga-genre/" + override val datePattern = "MMM dd, yyyy" + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/TatakaeScansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/TatakaeScansParser.kt new file mode 100644 index 000000000..5cb449aa5 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/TatakaeScansParser.kt @@ -0,0 +1,16 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("TATAKAE_SCANS", "Tatakae Scans", "pt") +internal class TatakaeScansParser(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.TATAKAE_SCANS, "tatakaescan.com", pageSize = 10) { + + override val datePattern: String = "dd 'de' MMMMM 'de' yyyy" + + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/BakaMan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/BakaMan.kt new file mode 100644 index 000000000..9e0d7de1a --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/BakaMan.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("BAKAMAN", "BakaMan", "th") +internal class BakaMan(context: MangaLoaderContext) : MadaraParser( context, MangaSource.BAKAMAN, "bakaman.net", pageSize = 18,) { + + override val isNsfwSource = false +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/Cat300.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/Cat300.kt new file mode 100644 index 000000000..d0f9d0894 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/Cat300.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +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("CAT_300", "Cat300", "th") +internal class Cat300(context: MangaLoaderContext) : MadaraParser(context, MangaSource.CAT_300, "cat300.com") { + + override val isNsfwSource = true +} 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 ae020d526..f4ea4e9a1 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 @@ -14,6 +14,7 @@ import java.text.SimpleDateFormat import java.util.* + internal abstract class MangaReaderParser( context: MangaLoaderContext, source: MangaSource, @@ -24,13 +25,9 @@ internal abstract class MangaReaderParser( override val sortOrders: Set get() = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.ALPHABETICAL, SortOrder.NEWEST) - protected val idLocale - get() = Locale("in", "ID") - - abstract val listUrl: String - abstract val tableMode: Boolean + protected open val listUrl = "/manga" protected open val isNsfwSource = false - open val chapterDateFormat = SimpleDateFormat("MMM d, yyyy", idLocale) + open val chapterDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) private var tagCache: ArrayMap? = null private val mutex = Mutex() @@ -51,128 +48,87 @@ internal abstract class MangaReaderParser( source = source, ) } - return if (tableMode) parseInfoTable(docs, manga, chapters) else parseInfoList(docs, manga, chapters) + return parseInfo(docs, manga, chapters) } - open suspend fun parseInfoTable(docs: Document, manga: Manga, chapters: List): Manga { - val mangaInfo = + 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") ?: docs.selectFirst("div.seriestucon") - val state_select = - docs.selectFirst(".tsinfo div:contains(Status)") ?: docs.selectFirst(".tsinfo div:contains(Statut)") - ?: docs.selectFirst(".tsinfo div:contains(حالة العمل)") ?: docs.selectFirst(".tsinfo div:contains(Estado)") - ?: docs.selectFirst(".tsinfo div:contains(สถานะ)") ?: docs.selectFirst(".tsinfo div:contains(Stato )") - ?: docs.selectFirst(".tsinfo div:contains(Durum)") - val mangaState = state_select?.lastElementChild()?.let { - when (it.text()) { - "مستمرةا", - "En curso", - "Ongoing", - "On going", - "Ativo", - "En Cours", - "OnGoing", - "Đang tiến hành", - "em lançamento", - "Онгоінг", - "Publishing", - "Devam Ediyor", - "Em Andamento", - "In Corso", - -> MangaState.ONGOING - - "Completed", - "Completo", - "Complété", - "Fini", - "Terminé", - "Tamamlandı", - "Đã hoàn thành", - "مكتملة", - "Завершено", - "Finished", - "Finalizado", - "Completata", - -> MangaState.FINISHED + val tagMap = getOrCreateTagMap() - else -> null - } + val selecttag = if(tablemode != null) + { + tablemode.select(".seriestugenre > a") + }else + { + docs.select(".wd-full .mgen > a") } - val tagMap = getOrCreateTagMap() - val tags = mangaInfo?.select(".seriestugenre > a")?.mapNotNullToSet { tagMap[it.text()] } - return manga.copy( - description = mangaInfo?.selectFirst("div.entry-content")?.html(), - state = mangaState, - author = mangaInfo?.selectFirst(".infotable td:contains(Author)")?.lastElementSibling()?.text(), - isNsfw = manga.isNsfw || docs.selectFirst(".restrictcontainer") != null, - tags = tags.orEmpty(), - chapters = chapters, - ) - } + val tags = selecttag.mapNotNullToSet { tagMap[it.text()] } + - open suspend fun parseInfoList(docs: Document, manga: Manga, chapters: List): Manga { + val stateselect = if(tablemode != null) + { + tablemode.selectFirst(".infotable td:contains(Status)") ?: tablemode.selectFirst(".infotable td:contains(Statut)") + ?: tablemode.selectFirst(".infotable td:contains(حالة العمل)") ?: tablemode.selectFirst(".infotable td:contains(Estado)") + ?: docs.selectFirst(".infotable td:contains(สถานะ)") ?: tablemode.selectFirst(".infotable td:contains(Stato )") + ?: tablemode.selectFirst(".infotable td:contains(Durum)") ?: tablemode.selectFirst(".infotable td:contains(Statüsü)") - val state_select = + }else + { docs.selectFirst(".tsinfo div:contains(Status)") ?: docs.selectFirst(".tsinfo div:contains(Statut)") ?: docs.selectFirst(".tsinfo div:contains(حالة العمل)") ?: docs.selectFirst(".tsinfo div:contains(Estado)") ?: docs.selectFirst(".tsinfo div:contains(สถานะ)") ?: docs.selectFirst(".tsinfo div:contains(Stato )") - ?: docs.selectFirst(".tsinfo div:contains(Durum)") + ?: docs.selectFirst(".tsinfo div:contains(Durum)") ?: docs.selectFirst(".tsinfo div:contains(Statüsü)") + } + + val state = if(tablemode != null) + { + stateselect?.lastElementSibling() - val mangaState = state_select?.lastElementChild()?.let { + }else + { + stateselect?.lastElementChild() + } + + + val mangaState = state?.let { when (it.text()) { - "مستمرةا", - "En curso", - "Ongoing", - "On going", - "Ativo", - "En Cours", - "OnGoing", - "Đang tiến hành", - "em lançamento", - "Онгоінг", - "Publishing", - "Devam Ediyor", - "Em Andamento", - "In Corso", + "مستمرة", "En curso", "Ongoing", "On going", + "Ativo", "En Cours", "OnGoing", "Đang tiến hành", "em lançamento", "Онгоінг", "Publishing", + "Devam Ediyor", "Em Andamento", "In Corso", "Güncel", "Berjalan", "Продолжается", "Updating", + "Lançando", "In Arrivo", "Emision", "En emision", "مستمر", "Curso", "En marcha", "Publicandose", "连载中", -> MangaState.ONGOING - - "Completed", - "Completo", - "Complété", - "Fini", - "Terminé", - "Tamamlandı", - "Đã hoàn thành", - "مكتملة", - "Завершено", - "Finished", - "Finalizado", - "Completata", + "Completed", "Completo", "Complété", "Fini", "Terminé", "Tamamlandı", "Đã hoàn thành", "مكتملة", "Завершено", + "Finished", "Finalizado", "Completata", "One-Shot", "Bitti", "Tamat", "Completado", "Concluído", "Concluido", "已完结", -> MangaState.FINISHED - else -> null } } - val tags = docs.select(".wd-full .mgen > a").mapNotNullToSet { getOrCreateTagMap()[it.text()] } - return manga.copy( - description = - docs.selectFirst("div.entry-content")?.html(), - state = mangaState, - author = - docs.selectFirst(".tsinfo div:contains(Author)")?.lastElementChild()?.text() - ?: docs.selectFirst(".tsinfo div:contains(Auteur)")?.lastElementChild()?.text() - ?: docs.selectFirst(".tsinfo div:contains(Artist)")?.lastElementChild()?.text() - ?: docs.selectFirst(".tsinfo div:contains(Durum)")?.lastElementChild()?.text(), + val author = tablemode?.selectFirst(".infotable td:contains(Author)")?.lastElementSibling()?.text()?: + docs.selectFirst(".tsinfo div:contains(Author)")?.lastElementChild()?.text() ?: + docs.selectFirst(".tsinfo div:contains(Auteur)")?.lastElementChild()?.text() ?: + docs.selectFirst(".tsinfo div:contains(Artist)")?.lastElementChild()?.text() ?: + docs.selectFirst(".tsinfo div:contains(Durum)")?.lastElementChild()?.text() - isNsfw = manga.isNsfw + val nsfw = docs.selectFirst(".restrictcontainer") != null || docs.selectFirst(".info-right .alr") != null - || docs.selectFirst(".postbody .alr") != null, + || docs.selectFirst(".postbody .alr") != null + + return manga.copy( + description = tablemode?.selectFirst("div.entry-content")?.html() ?: + docs.selectFirst("div.entry-content")?.html(), + state = mangaState, + author = author, + isNsfw = manga.isNsfw || nsfw, tags = tags, chapters = chapters, ) @@ -257,25 +213,45 @@ internal abstract class MangaReaderParser( override suspend fun getPages(chapter: MangaChapter): List { val chapterUrl = chapter.url.toAbsoluteUrl(domain) val docs = webClient.httpGet(chapterUrl).parseHtml() - val script = docs.selectFirstOrThrow("script:containsData(ts_reader)") - val images = JSONObject(script.data().substringAfter('(').substringBeforeLast(')')) - .getJSONArray("sources") - .getJSONObject(0) - .getJSONArray("images") - - val pages = ArrayList(images.length()) - for (i in 0 until images.length()) { - pages.add( + + val test = docs.select("script:containsData(ts_reader)") + if(test.isNullOrEmpty()) + { + return docs.select("div#readerarea img").map { img -> + val url = img.imageUrl() MangaPage( - id = generateUid(images.getString(i)), - url = images.getString(i), + id = generateUid(url), + url = url, preview = null, source = source, - ), - ) + ) + } + }else + { + val script = docs.selectFirstOrThrow("script:containsData(ts_reader)") + val images = JSONObject(script.data().substringAfter('(').substringBeforeLast(')')) + .getJSONArray("sources") + .getJSONObject(0) + .getJSONArray("images") + val pages = ArrayList(images.length()) + for (i in 0 until images.length()) { + pages.add( + MangaPage( + id = generateUid(images.getString(i)), + url = images.getString(i), + preview = null, + source = source, + ), + ) + } + + return pages + } - return pages + + + } override suspend fun getTags(): Set { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Ozulscans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Ozulscans.kt index ffb574c5c..63742d6be 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Ozulscans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Ozulscans.kt @@ -14,8 +14,5 @@ internal class Ozulscans(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("ozulscans.com") - override val listUrl: String get() = "/manga" - override val tableMode: Boolean get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("yyyy,d MMM", Locale("ar", "AR")) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("ar", "AR")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AnigliScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AnigliScans.kt index 6d50f83bb..61bb8f9f9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AnigliScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AnigliScans.kt @@ -5,8 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* @MangaSourceParser("ANIGLISCANS", "Anigli Scans", "en") internal class AnigliScans(context: MangaLoaderContext) : @@ -16,8 +14,5 @@ internal class AnigliScans(context: MangaLoaderContext) : override val listUrl: String get() = "/series" - override val tableMode: Boolean - get() = false - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ArenaScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ArenaScans.kt index 97d2db949..d6db49788 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ArenaScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ArenaScans.kt @@ -5,8 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* @MangaSourceParser("ARENASCANS", "Arena Scans", "en") internal class ArenaScans(context: MangaLoaderContext) : @@ -14,10 +12,4 @@ internal class ArenaScans(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("arenascans.net") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AsuraScansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AsuraScansParser.kt index 56e0cf508..675e5c1fb 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AsuraScansParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AsuraScansParser.kt @@ -5,8 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* @MangaSourceParser("ASURASCANS", "Asura Scans", "en") internal class AsuraScansParser(context: MangaLoaderContext) : @@ -14,11 +12,5 @@ internal class AsuraScansParser(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("asurascans.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AzureManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AzureManga.kt index 89e67b8cf..bd74e70e7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AzureManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AzureManga.kt @@ -5,8 +5,7 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* + @MangaSourceParser("AZUREMANGA", "Azure Manga", "en") internal class AzureManga(context: MangaLoaderContext) : @@ -14,10 +13,4 @@ internal class AzureManga(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("azuremanga.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/CosmicScansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/CosmicScansParser.kt index 676fb5835..739028ce0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/CosmicScansParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/CosmicScansParser.kt @@ -5,8 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* @MangaSourceParser("COSMICSCANS", "CosmicScans", "en") internal class CosmicScansParser(context: MangaLoaderContext) : @@ -14,10 +12,4 @@ internal class CosmicScansParser(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("cosmicscans.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Elarcpage.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Elarcpage.kt index e3bb6734d..e4b89fec7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Elarcpage.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Elarcpage.kt @@ -6,7 +6,7 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat -import java.util.* +import java.util.Locale @MangaSourceParser("ELARCPAGE", "Elarcpage", "en") internal class Elarcpage(context: MangaLoaderContext) : @@ -16,8 +16,7 @@ internal class Elarcpage(context: MangaLoaderContext) : override val listUrl: String get() = "/series" - override val tableMode: Boolean - get() = false + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FlameScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FlameScans.kt index 73e1df4d1..c56aaae54 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FlameScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FlameScans.kt @@ -5,8 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* @MangaSourceParser("FLAMESCANS", "Flame Scans", "en") internal class FlameScans(context: MangaLoaderContext) : @@ -16,8 +14,4 @@ internal class FlameScans(context: MangaLoaderContext) : override val listUrl: String get() = "/series" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/KumaScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/KumaScans.kt index bec231c50..b836b9fec 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/KumaScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/KumaScans.kt @@ -5,8 +5,7 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* + @MangaSourceParser("KUMASCANS", "Kuma Scans", "en") internal class KumaScans(context: MangaLoaderContext) : @@ -14,10 +13,4 @@ internal class KumaScans(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("kumascans.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ManhwaLover.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ManhwaLover.kt index 3bbc5e064..2102fb0c5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ManhwaLover.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ManhwaLover.kt @@ -5,8 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* @MangaSourceParser("MANHWALOVER", "ManhwaLover", "en") internal class ManhwaLover(context: MangaLoaderContext) : @@ -14,12 +12,6 @@ internal class ManhwaLover(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("manhwalover.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - override val isNsfwSource: Boolean = true - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Manhwax.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Manhwax.kt index b04dbe7a1..839b01294 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Manhwax.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Manhwax.kt @@ -5,8 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* @MangaSourceParser("MANHWAX", "Manhwax", "en") internal class Manhwax(context: MangaLoaderContext) : @@ -14,12 +12,5 @@ internal class Manhwax(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("manhwax.org") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - override val isNsfwSource: Boolean = true - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Nightscans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Nightscans.kt index 9d8abceb0..8a2c769ab 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Nightscans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Nightscans.kt @@ -5,8 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* @MangaSourceParser("NIGHTSCANS", "Nightscans", "en") internal class Nightscans(context: MangaLoaderContext) : @@ -14,10 +12,4 @@ internal class Nightscans(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("nightscans.org") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Phantomscans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Phantomscans.kt index 30d030a09..3960e0353 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Phantomscans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Phantomscans.kt @@ -5,8 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* @MangaSourceParser("PHANTOMSCANS", "Phantomscans", "en") internal class Phantomscans(context: MangaLoaderContext) : @@ -14,10 +12,4 @@ internal class Phantomscans(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("phantomscans.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Ravenscans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Ravenscans.kt index 476f73645..b92e09542 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Ravenscans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Ravenscans.kt @@ -5,8 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* @MangaSourceParser("RAVENSCANS", "Ravenscans", "en") internal class Ravenscans(context: MangaLoaderContext) : @@ -14,10 +12,4 @@ internal class Ravenscans(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("ravenscans.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Readkomik.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Readkomik.kt index 42d4c9cf8..1414d42c4 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Readkomik.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Readkomik.kt @@ -5,8 +5,7 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* + @MangaSourceParser("READKOMIK", "Readkomik", "en") internal class Readkomik(context: MangaLoaderContext) : @@ -14,11 +13,5 @@ internal class Readkomik(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("readkomik.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/SkyManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/SkyManga.kt new file mode 100644 index 000000000..2b2a55614 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/SkyManga.kt @@ -0,0 +1,20 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.en + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.text.SimpleDateFormat +import java.util.Locale + + +@MangaSourceParser("SKY_MANGA", "Sky Manga", "en") +internal class SkyManga(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.SKY_MANGA, pageSize = 20, searchPageSize = 20) { + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("skymanga.work") + + override val listUrl = "/manga-list" + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("DD-MM-yyy", Locale.ENGLISH) +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Suryascans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Suryascans.kt index 897c9f84e..7751ab974 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Suryascans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Suryascans.kt @@ -5,8 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* @MangaSourceParser("SURYASCANS", "Suryascans", "en") internal class Suryascans(context: MangaLoaderContext) : @@ -14,10 +12,4 @@ internal class Suryascans(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("suryascans.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/VoidScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/VoidScans.kt index 776377310..1930b447f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/VoidScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/VoidScans.kt @@ -5,19 +5,10 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* @MangaSourceParser("VOIDSCANS", "Void Scans", "en") internal class VoidScans(context: MangaLoaderContext) : MangaReaderParser(context, MangaSource.VOIDSCANS, pageSize = 150, searchPageSize = 150) { override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("void-scans.com") - - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/CartelDeManhwas.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/CartelDeManhwas.kt index 795b51c94..402ad9b3b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/CartelDeManhwas.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/CartelDeManhwas.kt @@ -16,8 +16,6 @@ internal class CartelDeManhwas(context: MangaLoaderContext) : override val listUrl: String get() = "/series" - override val tableMode: Boolean - get() = false override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("es", "ES")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/DragonTranslationParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/DragonTranslationParser.kt index 15596bc64..203b224de 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/DragonTranslationParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/DragonTranslationParser.kt @@ -14,9 +14,6 @@ internal class DragonTranslationParser(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("dragontranslation.com") - override val listUrl: String get() = "/manga" - override val tableMode: Boolean get() = false - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/GREMORYMANGAS.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/GREMORYMANGAS.kt index a93893e81..7f6c67cbc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/GREMORYMANGAS.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/GREMORYMANGAS.kt @@ -14,10 +14,6 @@ internal class GREMORYMANGAS(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("gremorymangas.com") - override val listUrl: String get() = "/manga" - - override val tableMode: Boolean - get() = true override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("es", "ES")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/MiauScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/MiauScan.kt index 18684d22d..124670540 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/MiauScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/MiauScan.kt @@ -14,8 +14,6 @@ internal class MiauScan(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("miauscan.com") - override val listUrl: String get() = "/manga" - override val tableMode: Boolean get() = false override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("es", "ES")) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Raikiscan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Raikiscan.kt index 721adec33..bc33ad4c2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Raikiscan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Raikiscan.kt @@ -14,10 +14,5 @@ internal class Raikiscan(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("raikiscan.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("es", "ES")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Senpaiediciones.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Senpaiediciones.kt index 52e11776a..d253956b8 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Senpaiediciones.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Senpaiediciones.kt @@ -14,10 +14,6 @@ internal class Senpaiediciones(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("senpaiediciones.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("es", "ES")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Shadowmangas.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Shadowmangas.kt index 21dbc4005..8132b0267 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Shadowmangas.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Shadowmangas.kt @@ -14,10 +14,6 @@ internal class Shadowmangas(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("shadowmangas.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("es", "ES")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/BananaScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/BananaScan.kt index 574311820..0fb8e72a7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/BananaScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/BananaScan.kt @@ -14,11 +14,6 @@ internal class BananaScan(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("banana-scan.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.FRENCH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/EpsilonscanParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/EpsilonscanParser.kt index 16230a588..64b3d283c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/EpsilonscanParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/EpsilonscanParser.kt @@ -14,10 +14,6 @@ internal class EpsilonscanParser(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("epsilonscan.fr") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false override val isNsfwSource: Boolean = true override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale.FRENCH) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LegacyScansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LegacyScansParser.kt index e89b90333..bc1506a53 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LegacyScansParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LegacyScansParser.kt @@ -14,10 +14,6 @@ internal class LegacyScansParser(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("legacy-scans.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale.FRENCH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/PhenixscansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/PhenixscansParser.kt index c435d0ff6..97f84ec34 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/PhenixscansParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/PhenixscansParser.kt @@ -14,10 +14,6 @@ internal class PhenixscansParser(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("phenixscans.fr") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.FRENCH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/SushiScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/SushiScan.kt index 9c242c7b1..d5f033feb 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/SushiScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/SushiScan.kt @@ -14,10 +14,5 @@ internal class SushiScan(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("sushiscan.net") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.FRENCH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Boosei.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Boosei.kt index fcb70d3ab..9827930fd 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Boosei.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Boosei.kt @@ -6,6 +6,7 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat +import java.util.* @MangaSourceParser("BOOSEI", "Boosei", "id") internal class Boosei(context: MangaLoaderContext) : @@ -13,10 +14,6 @@ internal class Boosei(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("boosei.net") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", idLocale) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Dojing.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Dojing.kt index cdcc91cba..eab61c81a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Dojing.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Dojing.kt @@ -6,6 +6,7 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat +import java.util.* @MangaSourceParser("DOJING", "Dojing", "id") internal class Dojing(context: MangaLoaderContext) : @@ -13,13 +14,9 @@ internal class Dojing(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("dojing.net") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = true override val isNsfwSource = true - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", idLocale) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Duniakomik.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Duniakomik.kt index 17906b046..daa6b0c48 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Duniakomik.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Duniakomik.kt @@ -6,6 +6,7 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat +import java.util.* @MangaSourceParser("DUNIAKOMIK", "Duniakomik", "id") internal class Duniakomik(context: MangaLoaderContext) : @@ -13,13 +14,9 @@ internal class Duniakomik(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("duniakomik.id") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = true override val isNsfwSource = true - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", idLocale) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Kanzenin.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Kanzenin.kt index 42c00998f..250652753 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Kanzenin.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Kanzenin.kt @@ -6,7 +6,8 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat -import java.util.* +import java.util.Locale + @MangaSourceParser("KANZENIN", "Kanzenin", "id") internal class Kanzenin(context: MangaLoaderContext) : @@ -14,12 +15,7 @@ internal class Kanzenin(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("kanzenin.xyz") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - override val isNsfwSource = true - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Katakomik.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Katakomik.kt index 938000749..35fc03fc2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Katakomik.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Katakomik.kt @@ -5,8 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* @MangaSourceParser("KATAKOMIK", "Katakomik", "id") internal class Katakomik(context: MangaLoaderContext) : @@ -14,10 +12,4 @@ internal class Katakomik(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("katakomik.online") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KiryuuParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KiryuuParser.kt index b51423891..9f49e6969 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KiryuuParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KiryuuParser.kt @@ -6,6 +6,7 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat +import java.util.* @MangaSourceParser("KIRYUU", "Kiryuu", "id") internal class KiryuuParser(context: MangaLoaderContext) : @@ -13,9 +14,6 @@ internal class KiryuuParser(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("kiryuu.id") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = true - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", idLocale) + + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikAvParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikAvParser.kt index 0d176e3fa..94a39f98f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikAvParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikAvParser.kt @@ -6,7 +6,7 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat -import java.util.* +import java.util.Locale @MangaSourceParser("KOMIKAV", "Komik Av", "id") internal class KomikAvParser(context: MangaLoaderContext) : @@ -14,8 +14,5 @@ internal class KomikAvParser(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("komikav.com") - override val listUrl: String = "/manga" - override val tableMode: Boolean = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikDewasaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikDewasaParser.kt index 1bb2df1be..76ae4fd15 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikDewasaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikDewasaParser.kt @@ -5,8 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* @MangaSourceParser("KOMIKDEWASA", "KomikDewasa", "id") internal class KomikDewasaParser(context: MangaLoaderContext) : @@ -15,8 +13,5 @@ internal class KomikDewasaParser(context: MangaLoaderContext) : get() = ConfigKey.Domain("komikdewasa.cfd") override val listUrl: String = "/komik" - override val tableMode: Boolean = true override val isNsfwSource: Boolean = true - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikIndoParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikIndoParser.kt index 248e29c56..ef5907ba5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikIndoParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikIndoParser.kt @@ -6,6 +6,7 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat +import java.util.* @MangaSourceParser("KOMIKINDO", "KomikIndo", "id") internal class KomikIndoParser(context: MangaLoaderContext) : @@ -15,8 +16,6 @@ internal class KomikIndoParser(context: MangaLoaderContext) : override val listUrl: String get() = "/project" - override val tableMode: Boolean - get() = true - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", idLocale) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikLabParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikLabParser.kt index f5bdaa3c7..8093d0279 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikLabParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikLabParser.kt @@ -5,8 +5,7 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* + @MangaSourceParser("KOMIKLAB", "KomikLab", "id") internal class KomikLabParser(context: MangaLoaderContext) : @@ -16,8 +15,5 @@ internal class KomikLabParser(context: MangaLoaderContext) : override val listUrl: String get() = "/project" - override val tableMode: Boolean - get() = false - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikLokalParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikLokalParser.kt index 2e7184383..08e152dad 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikLokalParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikLokalParser.kt @@ -5,8 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* @MangaSourceParser("KOMIKLOKAL", "Komik Lokal", "id") internal class KomikLokalParser(context: MangaLoaderContext) : @@ -14,10 +12,4 @@ internal class KomikLokalParser(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("komikmirror.art") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikMama.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikMama.kt index 28bb8e1b4..ca5e1685a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikMama.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikMama.kt @@ -6,7 +6,8 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat -import java.util.* +import java.util.Locale + @MangaSourceParser("KOMIKMAMA", "Komik Mama", "id") internal class KomikMama(context: MangaLoaderContext) : @@ -14,11 +15,6 @@ internal class KomikMama(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("komikmama.co") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = true - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikMangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikMangaParser.kt index 190a32d48..a2859536a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikMangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikMangaParser.kt @@ -5,8 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* @MangaSourceParser("KOMIKMANGA", "KomikManga", "id") internal class KomikMangaParser(context: MangaLoaderContext) : @@ -16,8 +14,5 @@ internal class KomikMangaParser(context: MangaLoaderContext) : override val listUrl: String get() = "/project" - override val tableMode: Boolean - get() = true - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikManhwa.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikManhwa.kt index e97d12b90..f2eb116af 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikManhwa.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikManhwa.kt @@ -6,6 +6,7 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat +import java.util.* @MangaSourceParser("KOMIKMANHWA", "Komik Manhwa", "id") internal class KomikManhwa(context: MangaLoaderContext) : @@ -15,12 +16,9 @@ internal class KomikManhwa(context: MangaLoaderContext) : override val listUrl: String get() = "/series" - override val tableMode: Boolean - get() = true override val isNsfwSource = true - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", idLocale) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikTapParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikTapParser.kt index 252e776fc..12f207242 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikTapParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikTapParser.kt @@ -6,6 +6,7 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat +import java.util.* @MangaSourceParser("KOMIKTAP", "KomikTap", "id") internal class KomikTapParser(context: MangaLoaderContext) : @@ -13,10 +14,6 @@ internal class KomikTapParser(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("92.87.6.124", "komiktap.in") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = true - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", idLocale) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KumaPoiParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikgoParser.kt similarity index 53% rename from src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KumaPoiParser.kt rename to src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikgoParser.kt index 26c033837..98bb1cc2e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KumaPoiParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikgoParser.kt @@ -6,18 +6,14 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat -import java.util.* +import java.util.Locale -@MangaSourceParser("KUMAPOI", "KumaPoi", "id") -internal class KumaPoiParser(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.KUMAPOI, pageSize = 20, searchPageSize = 10) { - override val configKeyDomain: ConfigKey.Domain - get() = ConfigKey.Domain("kumapoi.me") +@MangaSourceParser("KOMIKGO", "Komikgo", "id") +internal class KomikgoParser(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.KOMIKGO, pageSize = 20, searchPageSize = 10) { - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = true + override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain("komikgo.org") + + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("in", "ID")) - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komikstation.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komikstation.kt index 66bdb7edf..2ef238efc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komikstation.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komikstation.kt @@ -6,7 +6,8 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat -import java.util.* +import java.util.Locale + @MangaSourceParser("KOMIKSTATION", "Komikstation", "id") internal class Komikstation(context: MangaLoaderContext) : @@ -14,10 +15,6 @@ internal class Komikstation(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("komikstation.co") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("in", "ID")) - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komiku.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komiku.kt index 915496ce2..113edcce9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komiku.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komiku.kt @@ -6,6 +6,7 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat +import java.util.* @MangaSourceParser("KOMIKU", "Komiku", "id") internal class Komiku(context: MangaLoaderContext) : @@ -13,11 +14,6 @@ internal class Komiku(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("komiku.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = true - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", idLocale) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Lianscans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Lianscans.kt index 32dcc777e..542d28284 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Lianscans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Lianscans.kt @@ -6,6 +6,7 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat +import java.util.* @MangaSourceParser("LIANSCANS", "Lianscans", "id") internal class Lianscans(context: MangaLoaderContext) : @@ -13,13 +14,8 @@ internal class Lianscans(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("www.lianscans.my.id") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - override val isNsfwSource = true - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", idLocale) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaSusuku.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaSusuku.kt index 837999613..885ecaed0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaSusuku.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaSusuku.kt @@ -5,8 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* @MangaSourceParser("MANGASUSUKU", "MangaSusuku", "id") internal class MangaSusuku(context: MangaLoaderContext) : @@ -16,11 +14,6 @@ internal class MangaSusuku(context: MangaLoaderContext) : override val listUrl: String get() = "/komik" - override val tableMode: Boolean - get() = true override val isNsfwSource = true - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) - } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaTaleParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaTaleParser.kt index 6d5737a99..b1e424fca 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaTaleParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaTaleParser.kt @@ -14,8 +14,6 @@ internal class MangaTaleParser(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("mangatale.co") - override val listUrl: String get() = "/manga" - override val tableMode: Boolean get() = false override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Mangaindo.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Mangaindo.kt index 75625b542..15781f371 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Mangaindo.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Mangaindo.kt @@ -5,8 +5,7 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* + @MangaSourceParser("MANGAINDO", "Mangaindo", "id") internal class Mangaindo(context: MangaLoaderContext) : @@ -14,11 +13,5 @@ internal class Mangaindo(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("mangaindo.me") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangakKita.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangakKita.kt new file mode 100644 index 000000000..13a89b4c3 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangakKita.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.id + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("MANGAKITA", "MangaKita", "id") +internal class MangakKita(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.MANGAKITA, pageSize = 20, searchPageSize = 20) { + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("mangakita.net") + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangasusuParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangasusuParser.kt index ab85719b3..dbcbd51fb 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangasusuParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangasusuParser.kt @@ -5,8 +5,7 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* + @MangaSourceParser("MANGASUSU", "Mangasusu", "id") internal class MangasusuParser(context: MangaLoaderContext) : @@ -16,8 +15,6 @@ internal class MangasusuParser(context: MangaLoaderContext) : override val listUrl: String get() = "/project" - override val tableMode: Boolean - get() = true - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) + } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Mangayaro.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Mangayaro.kt index 012bb9816..0ca8ef139 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Mangayaro.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Mangayaro.kt @@ -5,8 +5,7 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* + @MangaSourceParser("MANGAYARO", "Mangayaro", "id") internal class Mangayaro(context: MangaLoaderContext) : @@ -14,11 +13,5 @@ internal class Mangayaro(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("mangayaro.net") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaIndoParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaIndoParser.kt index 8e13758bb..2cc6aca2b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaIndoParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaIndoParser.kt @@ -16,5 +16,4 @@ internal class ManhwaIndoParser(context: MangaLoaderContext) : override val chapterDateFormat = SimpleDateFormat("MMMM dd, yyyy", Locale.ENGLISH) override val listUrl: String get() = "/series" - override val tableMode: Boolean get() = false } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaLandParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaLandParser.kt deleted file mode 100644 index 7ba4cad86..000000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaLandParser.kt +++ /dev/null @@ -1,16 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.mangareader.id - -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser - -@MangaSourceParser("MANHWALAND", "Manhwaland", "id") -internal class ManhwaLandParser(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.MANHWALAND, pageSize = 20, searchPageSize = 10) { - - override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain("manhwaland.us", "manhwaland.guru") - override val listUrl: String = "/manga" - override val tableMode: Boolean = false -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwadesuParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwadesuParser.kt index 8a1b1c85a..be5ed5860 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwadesuParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwadesuParser.kt @@ -5,6 +5,8 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.text.SimpleDateFormat +import java.util.Locale @MangaSourceParser("MANHWADESU", "ManhwaDesu", "id") internal class ManhwadesuParser(context: MangaLoaderContext) : @@ -13,5 +15,6 @@ internal class ManhwadesuParser(context: MangaLoaderContext) : get() = ConfigKey.Domain("manhwadesu.pro", "manhwadesu.org") override val listUrl: String get() = "/komik" - override val tableMode: Boolean get() = false + + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM D, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwalistParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwalistParser.kt index e1c0224e5..57ca366e0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwalistParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwalistParser.kt @@ -12,9 +12,7 @@ import java.util.* internal class ManhwalistParser(context: MangaLoaderContext) : MangaReaderParser(context, MangaSource.MANHWALIST, pageSize = 24, searchPageSize = 10) { override val configKeyDomain: ConfigKey.Domain - get() = ConfigKey.Domain("manhwalist.in") + get() = ConfigKey.Domain("manhwalist.xyz") - override val listUrl: String = "/manga" - override val tableMode: Boolean get() = false override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MasterKomik.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MasterKomik.kt index 398d298df..633f435e5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MasterKomik.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MasterKomik.kt @@ -6,7 +6,8 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat -import java.util.* +import java.util.Locale + @MangaSourceParser("MASTERKOMIK", "MasterKomik", "id") internal class MasterKomik(context: MangaLoaderContext) : @@ -14,11 +15,6 @@ internal class MasterKomik(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("masterkomik.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Melokomik.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Melokomik.kt index 54be99ea4..e2d3efa31 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Melokomik.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Melokomik.kt @@ -6,6 +6,7 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat +import java.util.* @MangaSourceParser("MELOKOMIK", "Melokomik", "id") internal class Melokomik(context: MangaLoaderContext) : @@ -13,11 +14,7 @@ internal class Melokomik(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("melokomik.xyz") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", idLocale) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Mirrordesu.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Mirrordesu.kt index 325d18e4b..653b11bbc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Mirrordesu.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Mirrordesu.kt @@ -6,6 +6,7 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat +import java.util.* @MangaSourceParser("MIRRORDESU", "Mirrordesu", "id") internal class Mirrordesu(context: MangaLoaderContext) : @@ -15,11 +16,9 @@ internal class Mirrordesu(context: MangaLoaderContext) : override val listUrl: String get() = "/komik" - override val tableMode: Boolean - get() = false override val isNsfwSource = true - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", idLocale) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Piscans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Piscans.kt index 89a7b5c30..d2daa1ed5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Piscans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Piscans.kt @@ -5,8 +5,7 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* + @MangaSourceParser("PISCANS", "Piscans", "id") internal class Piscans(context: MangaLoaderContext) : @@ -14,11 +13,5 @@ internal class Piscans(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("piscans.in") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/SekaikomikParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/SekaikomikParser.kt index 8068fdd04..5ab0ce442 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/SekaikomikParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/SekaikomikParser.kt @@ -6,13 +6,12 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat +import java.util.* @MangaSourceParser("SEKAIKOMIK", "Sekaikomik", "id") internal class SekaikomikParser(context: MangaLoaderContext) : MangaReaderParser(context, MangaSource.SEKAIKOMIK, pageSize = 20, searchPageSize = 100) { override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain("sekaikomik.pro") - override val listUrl: String = "/manga" - override val tableMode: Boolean = false - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM D, yyyy", idLocale) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM D, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Sektedoujin.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Sektedoujin.kt index 31efa9682..e3cc23e84 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Sektedoujin.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Sektedoujin.kt @@ -6,6 +6,7 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat +import java.util.* @MangaSourceParser("SEKTEDOUJIN", "Sektedoujin", "id") internal class Sektedoujin(context: MangaLoaderContext) : @@ -13,13 +14,8 @@ internal class Sektedoujin(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("sektedoujin.cc") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - override val isNsfwSource = true - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", idLocale) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Sheakomik.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Sheakomik.kt index a66638323..71ec0c9be 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Sheakomik.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Sheakomik.kt @@ -6,6 +6,7 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.text.SimpleDateFormat +import java.util.* @MangaSourceParser("SHEAKOMIK", "Sheakomik", "id") internal class Sheakomik(context: MangaLoaderContext) : @@ -13,11 +14,6 @@ internal class Sheakomik(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("sheakomik.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", idLocale) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/SoulScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/SoulScans.kt index 285c9d046..f31d10cd6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/SoulScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/SoulScans.kt @@ -5,8 +5,7 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* + @MangaSourceParser("SOULSCANS", "Soul Scans", "id") internal class SoulScans(context: MangaLoaderContext) : @@ -14,10 +13,4 @@ internal class SoulScans(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("soulscans.my.id") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = true - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Tukangkomik.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Tukangkomik.kt index f006aed64..1903b6233 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Tukangkomik.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Tukangkomik.kt @@ -5,8 +5,7 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* + @MangaSourceParser("TUKANGKOMIK", "Tukangkomik", "id") internal class Tukangkomik(context: MangaLoaderContext) : @@ -14,11 +13,4 @@ internal class Tukangkomik(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("tukangkomik.id") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) - } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/WestmangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/WestmangaParser.kt index 5c9b14436..31bd2e9a2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/WestmangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/WestmangaParser.kt @@ -14,9 +14,5 @@ internal class WestmangaParser(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("westmanga.info") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = true override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/it/Walpurgiscan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/it/Walpurgiscan.kt index e4d6aee9a..6122c3a46 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/it/Walpurgiscan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/it/Walpurgiscan.kt @@ -14,11 +14,6 @@ internal class Walpurgiscan(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("walpurgiscan.it") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("it", "IT")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ja/Rawkuma.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ja/Rawkuma.kt index cf3ab7b91..5aa7bb0c3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ja/Rawkuma.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ja/Rawkuma.kt @@ -5,8 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.text.SimpleDateFormat -import java.util.* @MangaSourceParser("RAWKUMA", "Rawkuma", "ja") internal class Rawkuma(context: MangaLoaderContext) : @@ -14,8 +12,4 @@ internal class Rawkuma(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("rawkuma.com") - override val listUrl: String get() = "/manga" - override val tableMode: Boolean get() = false - - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/FranxxMangas.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/FranxxMangas.kt index f17c0a3ab..95e887d65 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/FranxxMangas.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/FranxxMangas.kt @@ -14,11 +14,6 @@ internal class FranxxMangas(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("franxxmangas.net") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - override val isNsfwSource = true override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("pt", "PT")) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Mangaschan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Mangaschan.kt index e9b625723..91335677f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Mangaschan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Mangaschan.kt @@ -14,10 +14,6 @@ internal class Mangaschan(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("mangaschan.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("pt", "PT")) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Mundomangakun.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Mundomangakun.kt index 9bd2c89e6..f66ddfef1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Mundomangakun.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Mundomangakun.kt @@ -14,10 +14,6 @@ internal class Mundomangakun(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("mundomangakun.com.br") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("pt", "PT")) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Origamiorpheans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Origamiorpheans.kt index d6d316cae..48b9c5669 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Origamiorpheans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Origamiorpheans.kt @@ -14,10 +14,6 @@ internal class Origamiorpheans(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("origami-orpheans.com.br") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = true override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("pt", "PT")) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Silencescan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Silencescan.kt index 1eee99478..7ec165308 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Silencescan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Silencescan.kt @@ -14,11 +14,6 @@ internal class Silencescan(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("silencescan.com.br") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - override val isNsfwSource = true override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("pt", "PT")) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Tsundoku.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Tsundoku.kt index a63adbb4b..c7c6d1f1b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Tsundoku.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Tsundoku.kt @@ -14,11 +14,6 @@ internal class Tsundoku(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("tsundoku.com.br") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("pt", "PT")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/ToonHunterParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/ToonHunterParser.kt index 1d1c240fb..4564dd0e1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/ToonHunterParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/ToonHunterParser.kt @@ -13,10 +13,5 @@ internal class ToonHunterParser(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("toonhunter.com") - override val listUrl: String - get() = "/manga" - override val tableMode: Boolean - get() = false - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", sourceLocale) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/AsuraTRParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/AsuraTRParser.kt index f00baa08f..4c490fed5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/AsuraTRParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/AsuraTRParser.kt @@ -14,8 +14,5 @@ internal class AsuraTRParser(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("asurascanstr.com") - override val listUrl: String get() = "/manga" - override val tableMode: Boolean get() = false - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("tr")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Mangacim.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Mangacim.kt index 637308153..b8fc34206 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Mangacim.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Mangacim.kt @@ -14,8 +14,5 @@ internal class Mangacim(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("mangacim.com") - override val listUrl: String get() = "/manga" - override val tableMode: Boolean get() = false - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("tr")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TempestfansubParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TempestfansubParser.kt index 58245aed7..245fbaa55 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TempestfansubParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TempestfansubParser.kt @@ -14,8 +14,6 @@ internal class TempestfansubParser(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("manga.tempestfansub.com") - override val listUrl: String get() = "/manga" - override val tableMode: Boolean get() = false override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TurktoonParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TurktoonParser.kt index 3e7251e0b..d27881526 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TurktoonParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TurktoonParser.kt @@ -14,9 +14,6 @@ internal class TurktoonParser(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain("turktoon.com") - override val listUrl: String = "/manga" - - override val tableMode: Boolean = false override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("tr", "TR"))