diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/ComicExtra.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/ComicExtra.kt index 8d961b41..fc46dbae 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/ComicExtra.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/ComicExtra.kt @@ -20,7 +20,7 @@ internal class ComicExtra(context: MangaLoaderContext) : PagedMangaParser(contex override val availableStates: Set = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED) - override val configKeyDomain = ConfigKey.Domain("comicextra.org") + override val configKeyDomain = ConfigKey.Domain("comixextra.com") override val isMultipleTagsSupported = false diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/ReaperComics.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/ReaperComics.kt index 65f6887c..2c437996 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/ReaperComics.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/ReaperComics.kt @@ -23,7 +23,6 @@ import java.text.SimpleDateFormat import java.util.* import kotlin.random.Random -private const val TOO_MANY_REQUESTS = 429 private const val MAX_RETRY_COUNT = 5 private val JSON_MEDIA_TYPE get() = "application/json; charset=utf-8".toMediaType() @@ -157,9 +156,9 @@ internal class ReaperComics(context: MangaLoaderContext) : keys.add(userAgentKey) } - private fun chapterListNextPageSelector(): String = "button[wire:click*=nextPage]" + private val chapterListNextPageSelector: String = "button[wire:click*=nextPage]" - private fun chapterListSelector() = "div[wire:id] > div > ul[role=list] > li" + private val chapterListSelector: String = "div[wire:id] > div > ul[role=list] > li" override suspend fun getDetails(manga: Manga): Manga { val cachedChapters = chapterCache[manga.url] @@ -171,9 +170,9 @@ internal class ReaperComics(context: MangaLoaderContext) : val simpleDateFormat = SimpleDateFormat("dd/MM/yyyy", sourceLocale) var totalChapters = (doc.selectFirst(selectTotalChapter)?.text()?.toFloatOrNull() ?: 0f) - 1f val chapters = mutableSetOf() - var hasNextPage = doc.selectFirst(chapterListNextPageSelector()) != null + var hasNextPage = doc.selectFirst(chapterListNextPageSelector) != null chapters.addAll( - doc.select(chapterListSelector()).mapChapters { _, li -> + doc.select(chapterListSelector).mapChapters { _, li -> val a = li.selectFirstOrThrow("a") val chapterUrl = a.attr("href").toRelativeUrl(domain) MangaChapter( @@ -218,7 +217,7 @@ internal class ReaperComics(context: MangaLoaderContext) : var pageToQuery = 2 // Javascript: (Math.random() + 1).toString(36).substring(8) - val generateId = { -> + val generateId = { "1.${ Random.nextLong().toString(36) }".substring(10) @@ -248,7 +247,7 @@ internal class ReaperComics(context: MangaLoaderContext) : serverMemo = mergeLeft(serverMemo, responseData.serverMemo) val chaptersHtml = Jsoup.parse(responseData.effects.html, "https://$domain") chapters.addAll( - chaptersHtml.select(chapterListSelector()).mapChapters { _, li -> + chaptersHtml.select(chapterListSelector).mapChapters { _, li -> val a = li.selectFirstOrThrow("a") val chapterUrl = a.attr("href").toRelativeUrl(domain) MangaChapter( @@ -267,7 +266,7 @@ internal class ReaperComics(context: MangaLoaderContext) : ) }, ) - hasNextPage = chaptersHtml.selectFirst(chapterListNextPageSelector()) != null + hasNextPage = chaptersHtml.selectFirst(chapterListNextPageSelector) != null pageToQuery++ } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/pt/ModeScanlator.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/pt/ModeScanlator.kt index d6a204f7..69c46421 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/pt/ModeScanlator.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/pt/ModeScanlator.kt @@ -13,12 +13,13 @@ import java.util.* @MangaSourceParser("MODESCANLATOR", "ModeScanlator", "pt") internal class ModeScanlator( context: MangaLoaderContext, -) : HeanCms(context, MangaParserSource.MODESCANLATOR, "modescanlator.com") { +) : HeanCms(context, MangaParserSource.MODESCANLATOR, "site.modescanlator.net") { + private val domainNoSite = domain.removePrefix("site.") override suspend fun getListPage(page: Int, filter: MangaListFilter?): List { val url = buildString { append("https://api.") - append(domain) + append(domainNoSite) append("/query?adult=true&query_string=") when (filter) { is MangaListFilter.Search -> { @@ -70,7 +71,7 @@ internal class ModeScanlator( val cover = if (j.getString("thumbnail").contains('/')) { j.getString("thumbnail") } else { - "https://api.$domain/${j.getString("thumbnail")}" + "https://api.$domainNoSite/${j.getString("thumbnail")}" } Manga( id = j.getLong("id"), @@ -100,7 +101,7 @@ internal class ModeScanlator( override suspend fun getDetails(manga: Manga): Manga { val url = buildString { append("https://api.") - append(domain) + append(domainNoSite) append("/chapter/query?perPage=9999&series_id=") append(manga.id) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/EzManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/EzManga.kt index af39deb6..aa4de090 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/EzManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/EzManga.kt @@ -3,7 +3,6 @@ package org.koitharu.kotatsu.parsers.site.keyoapp.en import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.keyoapp.KeyoappParser @MangaSourceParser("EZMANGA", "EzManga", "en") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/KewnScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/KewnScans.kt index 6aaca30f..2d6f28c8 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/KewnScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/KewnScans.kt @@ -3,7 +3,6 @@ package org.koitharu.kotatsu.parsers.site.keyoapp.en import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.keyoapp.KeyoappParser @MangaSourceParser("KEWNSCANS", "KewnScans", "en") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/LaidBackScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/LaidBackScans.kt index 2cd8c57b..d924bb23 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/LaidBackScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/LaidBackScans.kt @@ -3,7 +3,6 @@ package org.koitharu.kotatsu.parsers.site.keyoapp.en import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.keyoapp.KeyoappParser @MangaSourceParser("LAIDBACKSCANS", "LaidBackScans", "en") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/NecroScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/NecroScans.kt new file mode 100644 index 00000000..2cd4767a --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/NecroScans.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.keyoapp.en + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.keyoapp.KeyoappParser + +@MangaSourceParser("NECROSCANS", "NecroScans", "en") +internal class NecroScans(context: MangaLoaderContext) : + KeyoappParser(context, MangaParserSource.NECROSCANS, "necroscans.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/AnteikuScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/AnteikuScan.kt index 81115347..808be40c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/AnteikuScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/AnteikuScan.kt @@ -3,7 +3,6 @@ package org.koitharu.kotatsu.parsers.site.keyoapp.fr import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.keyoapp.KeyoappParser @MangaSourceParser("ANTEIKUSCAN", "AnteikuScan", "fr") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/Astrames.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/Astrames.kt index e8555a93..32e97180 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/Astrames.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/Astrames.kt @@ -3,7 +3,6 @@ package org.koitharu.kotatsu.parsers.site.keyoapp.fr import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.keyoapp.KeyoappParser @MangaSourceParser("ASTRAMES", "Astrames", "fr") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/EdScanlation.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/EdScanlation.kt index dd7caf54..d3c45731 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/EdScanlation.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/EdScanlation.kt @@ -3,7 +3,6 @@ package org.koitharu.kotatsu.parsers.site.keyoapp.fr import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.keyoapp.KeyoappParser @MangaSourceParser("EDSCANLATION", "EdScanlation", "fr") 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 2f6a4486..87612cb6 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 @@ -595,7 +595,15 @@ internal abstract class MadaraParser( ) } } else { - val chapterProtectorHtml = chapterProtector.html() + + val chapterProtectorHtml = chapterProtector.attr("src") + .takeIf { it.startsWith("data:text/javascript;base64,") } + ?.substringAfter("data:text/javascript;base64,") + ?.let { + Base64.getDecoder().decode(it).decodeToString() + } + ?: chapterProtector.html() + val password = chapterProtectorHtml.substringAfter("wpmangaprotectornonce='").substringBefore("';") val chapterData = JSONObject( chapterProtectorHtml.substringAfter("chapter_data='").substringBefore("';").replace("\\/", "/"), diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/RocksManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/RocksManga.kt index b8d01b59..ec7eba39 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/RocksManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/RocksManga.kt @@ -5,7 +5,6 @@ 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.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrlOrNull import org.koitharu.kotatsu.parsers.util.generateUid diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AryaScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AryaScans.kt new file mode 100644 index 00000000..1012ee2c --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AryaScans.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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("ARYASCANS", "AryaScans", "en") +internal class AryaScans(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.ARYASCANS, "aryascans.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AsuraScansGg.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AsuraScansGg.kt new file mode 100644 index 00000000..a8b1906d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AsuraScansGg.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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("ASURASCANSGG", "AsuraScansGg", "en") +internal class AsuraScansGg(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.ASURASCANSGG, "asurascansgg.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 index 20c26755..c4bd2ae5 100644 --- 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 @@ -1,11 +1,13 @@ package org.koitharu.kotatsu.parsers.site.madara.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("BIBIMANGA", "BibiManga", "en", ContentType.HENTAI) internal class BibiManga(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.BIBIMANGA, "bibimanga.com") { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt index 91bba0f9..3b8a0a58 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt @@ -1,11 +1,13 @@ package org.koitharu.kotatsu.parsers.site.madara.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("BOYS_LOVE", "BoysLove", "en", ContentType.HENTAI) internal class BoysLove(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.BOYS_LOVE, "boyslove.me", 20) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoComic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoComic.kt new file mode 100644 index 00000000..07dd077c --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoComic.kt @@ -0,0 +1,11 @@ +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.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("COCOMIC", "CoComic", "en", ContentType.HENTAI) +internal class CoComic(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.COCOMIC, "cocomic.co") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/GedeComix.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/GedeComix.kt new file mode 100644 index 00000000..04865b7e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/GedeComix.kt @@ -0,0 +1,14 @@ +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.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("GEDECOMIX", "GedeComix", "en", ContentType.HENTAI) +internal class GedeComix(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.GEDECOMIX, "gedecomix.com", 18) { + override val tagPrefix = "comics-tag/" + override val listUrl = "porncomic/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixYuri.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixYuri.kt index 9056c898..b9d8b0d7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixYuri.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixYuri.kt @@ -6,7 +6,7 @@ import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -@MangaSourceParser("HENTAIXYURI", "Hentai x Yuri", "en", ContentType.HENTAI) +@MangaSourceParser("HENTAIXYURI", "HentaiXYuri", "en", ContentType.HENTAI) internal class HentaixYuri(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.HENTAIXYURI, "hentaixyuri.com", 16) { override val postReq = true diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HunLight.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HunLight.kt new file mode 100644 index 00000000..0a590286 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HunLight.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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("HUNLIGHT", "HunLight", "en") +internal class HunLight(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.HUNLIGHT, "hunlight.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga18Xyz.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga18Xyz.kt index e4f6bb20..4e9c97c7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga18Xyz.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga18Xyz.kt @@ -1,11 +1,13 @@ package org.koitharu.kotatsu.parsers.site.madara.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("MANGA18XYZ", "Manga18.xyz", "en", ContentType.HENTAI) internal class Manga18Xyz(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANGA18XYZ, "manga18.xyz", 36) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaHall.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaHall.kt new file mode 100644 index 00000000..cd1e4f64 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaHall.kt @@ -0,0 +1,11 @@ +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.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAHALL", "MangaHall", "en", ContentType.HENTAI) +internal class MangaHall(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.MANGAHALL, "mangahall.net", 24) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaZin.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaZin.kt new file mode 100644 index 00000000..56253d1d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaZin.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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAZIN", "MangaZin", "en") +internal class MangaZin(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.MANGAZIN, "mangazin.org") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MmScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MmScans.kt index da8e966d..c39c264f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MmScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MmScans.kt @@ -1,11 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser - +@Broken @MangaSourceParser("MMSCANS", "MmScans", "en") internal class MmScans(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MMSCANS, "mm-scans.org") { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StoneScape.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StoneScape.kt index 7deafe1c..20f0551d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StoneScape.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StoneScape.kt @@ -3,7 +3,6 @@ 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.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("STONESCAPE", "StoneScape", "en") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TcbScansManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TcbScansManga.kt index 93835de7..33f1f3b4 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TcbScansManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TcbScansManga.kt @@ -3,7 +3,6 @@ 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.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("TCBSCANSMANGA", "TcbScansManga", "en") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TeenManhua.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TeenManhua.kt index d69e4b80..d2f661d2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TeenManhua.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TeenManhua.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("TEENMANHUA", "TeenManhua", "en") internal class TeenManhua(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.TEENMANHUA, "teenmanhua.com") { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/UToon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/UToon.kt new file mode 100644 index 00000000..0b0491f3 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/UToon.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.en + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("UTOON", "UToon", "en") +internal class UToon(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.UTOON, "utoon.net") { + override val datePattern = "dd MMM" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/YaoiHub.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/YaoiHub.kt new file mode 100644 index 00000000..0f4b83e6 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/YaoiHub.kt @@ -0,0 +1,11 @@ +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.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("YAOIHUB", "YaoiHub", "en", ContentType.HENTAI) +internal class YaoiHub(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.YAOIHUB, "yaoihub.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinChanManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinChanManga.kt index f5222491..8997cede 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinChanManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinChanManga.kt @@ -4,7 +4,6 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("ZINCHANMANGA", "ZinChanManga", "en", ContentType.HENTAI) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinMangaCc.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinMangaCc.kt new file mode 100644 index 00000000..4fc6708f --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinMangaCc.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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("ZINMANGA_CC", "ZinManga.cc", "en") +internal class ZinMangaCc(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.ZINMANGA_CC, "zinmanga.cc") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinMangaCom.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinMangaCom.kt new file mode 100644 index 00000000..b48a34f6 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinMangaCom.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.en + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("ZIN_MANGA_COM", "Zin-Manga.com", "en") +internal class ZinMangaCom(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.ZIN_MANGA_COM, "zin-manga.com") { + override val selectPage = "img" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinMangaMS.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinMangaMS.kt new file mode 100644 index 00000000..b743cbb0 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinMangaMS.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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("ZINMANGA_MS", "ZinManga.ms", "en") +internal class ZinMangaMS(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.ZINMANGA_MS, "zinmanga.ms") { + override val listUrl = "manga-1/" + override val tagPrefix = "manga-genre-1/" +} 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 index 67606d18..5dbc7747 100644 --- 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 @@ -5,7 +5,7 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -@MangaSourceParser("ZINMANGA", "ZinManga", "en") +@MangaSourceParser("ZINMANGA", "ZinManga.net", "en") internal class Zinmanga(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.ZINMANGA, "zinmanga.net") { override val datePattern = "MM/dd/yyyy" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/DoujinShell.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/DoujinShell.kt new file mode 100644 index 00000000..b023e5de --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/DoujinShell.kt @@ -0,0 +1,16 @@ +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.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("DOUJINSHELL", "DoujinShell", "es", ContentType.HENTAI) +internal class DoujinShell(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.DOUJINSHELL, "www.doujinshell.com", 10) { + override val datePattern = "dd MMMM, yyyy" + override val listUrl = "/doujin" + override val tagPrefix = "/doujin-genero" + override val selectPage = "img:not(.aligncenter)" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/HaremScann.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/HaremScann.kt new file mode 100644 index 00000000..7645372a --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/HaremScann.kt @@ -0,0 +1,12 @@ +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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("HAREMSCANN", "HaremScann", "es") +internal class HaremScann(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.HAREMSCANN, "haremscann.es") { + override val postReq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/InmoralNoFansub.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/InmoralNoFansub.kt new file mode 100644 index 00000000..484787e3 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/InmoralNoFansub.kt @@ -0,0 +1,12 @@ +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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("INMORALNOFANSUB", "InmoralNoFansub", "es") +internal class InmoralNoFansub(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.INMORALNOFANSUB, "inmoralnofansub.xyz") { + override val datePattern = "dd/MM/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/JeazTwoBlueScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/JeazTwoBlueScans.kt new file mode 100644 index 00000000..a64a44f6 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/JeazTwoBlueScans.kt @@ -0,0 +1,12 @@ +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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("JEAZTWOBLUESCANS", "JeazTwoBlueScans", "es") +internal class JeazTwoBlueScans(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.JEAZTWOBLUESCANS, "jeaz.twobluescans.com") { + override val datePattern = "d MMMM, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Jobsibe.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Jobsibe.kt new file mode 100644 index 00000000..b7cdb2c8 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Jobsibe.kt @@ -0,0 +1,12 @@ +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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("JOBSIBE", "Jobsibe", "es") +internal class Jobsibe(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.JOBSIBE, "jobsibe.com") { + override val datePattern = "dd/MM" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Kenhuav2Scan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Kenhuav2Scan.kt index 8825d623..9dba1ce9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Kenhuav2Scan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Kenhuav2Scan.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.es +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("KENHUAV2SCANK", "Kenhuav2Scan", "es") internal class Kenhuav2Scan(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.KENHUAV2SCANK, "kenhuav2scan.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/LkScanlation.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/LkScanlation.kt index 128c78f0..10254486 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/LkScanlation.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/LkScanlation.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.es +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("LKSCANLATION", "LkScanlation", "es") internal class LkScanlation(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.LKSCANLATION, "lkscanlation.com") { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Marmota.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Marmota.kt new file mode 100644 index 00000000..6c5f781a --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Marmota.kt @@ -0,0 +1,15 @@ +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.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MARMOTA", "Marmota", "es", ContentType.COMICS) +internal class Marmota(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.MARMOTA, "marmota.me", 48) { + override val datePattern = "d 'de' MMMMM 'de' yyyy" + override val tagPrefix = "genero/" + override val listUrl = "comic/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Panconcola.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Panconcola.kt new file mode 100644 index 00000000..4ce4b204 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Panconcola.kt @@ -0,0 +1,13 @@ +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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("PANCONCOLA", "Panconcola", "es") +internal class Panconcola(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.PANCONCOLA, "panconcola.com") { + override val datePattern = "dd/MM/yyyy" + override val tagPrefix = "generos-de-manga/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/SapphireScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/SapphireScan.kt new file mode 100644 index 00000000..84dec32c --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/SapphireScan.kt @@ -0,0 +1,10 @@ +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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("SAPPHIRESCAN", "SapphireScan", "es") +internal class SapphireScan(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.SAPPHIRESCAN, "sapphirescan.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TerritorioLeal.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TerritorioLeal.kt new file mode 100644 index 00000000..dfe5c5aa --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TerritorioLeal.kt @@ -0,0 +1,12 @@ +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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("TERRITORIOLEAL", "TerritorioLeal", "es") +internal class TerritorioLeal(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.TERRITORIOLEAL, "territorioleal.com") { + override val datePattern = "d 'de' MMMM 'de' yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HarmonyScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HarmonyScan.kt index 863cd4bf..313c58a7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HarmonyScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HarmonyScan.kt @@ -3,7 +3,6 @@ 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.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("HARMONYSCAN", "HarmonyScan", "fr") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HentaiOrigines.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HentaiOrigines.kt index 8edf2db2..3c59cef4 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HentaiOrigines.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HentaiOrigines.kt @@ -4,7 +4,6 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("HENTAIORIGINES", "HentaiOrigines", "fr", ContentType.HENTAI) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ScanHentai.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ScanHentai.kt new file mode 100644 index 00000000..ad58a3f6 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ScanHentai.kt @@ -0,0 +1,13 @@ +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.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("SCANHENTAI", "ScanHentai", "fr", ContentType.HENTAI) +internal class ScanHentai(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.SCANHENTAI, "scan-hentai.fr") { + override val datePattern = "dd/MM/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Shinigami.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Shinigami.kt index a5f16dec..ccf4bf71 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Shinigami.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Shinigami.kt @@ -8,8 +8,7 @@ import java.util.* @MangaSourceParser("SHINIGAMI", "Shinigami", "id") internal class Shinigami(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.SHINIGAMI, "shinigamitoon.id", 10) { - + MadaraParser(context, MangaParserSource.SHINIGAMI, "shinigami02.com", 10) { override val tagPrefix = "genre/" override val listUrl = "series/" override val sourceLocale: Locale = Locale.ENGLISH diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Yubikiri.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Yubikiri.kt new file mode 100644 index 00000000..6becb892 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Yubikiri.kt @@ -0,0 +1,13 @@ +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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("YUBIKIRI", "Yubikiri", "id") +internal class Yubikiri(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.YUBIKIRI, "yubikiri.my.id", 18) { + override val tagPrefix = "genre/" + override val datePattern = "d MMMM" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/YuraManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/YuraManga.kt new file mode 100644 index 00000000..cee2681d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/YuraManga.kt @@ -0,0 +1,13 @@ +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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import java.util.Locale + +@MangaSourceParser("YURAMANGA", "YuraManga", "id") +internal class YuraManga(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.YURAMANGA, "yuramanga.my.id") { + override val sourceLocale: Locale = Locale.ENGLISH +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ja/MangaFenxi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ja/MangaFenxi.kt new file mode 100644 index 00000000..8f1a790f --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ja/MangaFenxi.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.ja + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import java.util.Locale + +@MangaSourceParser("MANGAFENXI", "MangaFenxi", "ja") +internal class MangaFenxi(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.MANGAFENXI, "mangafenxi.net", 40) { + override val sourceLocale: Locale = Locale.ENGLISH + override val tagPrefix = "genres/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ja/RawXz.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ja/RawXz.kt new file mode 100644 index 00000000..47b97083 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ja/RawXz.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.ja + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("RAWXZ", "RawXz", "ja") +internal class RawXz(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.RAWXZ, "rawxz.si") { + override val listUrl = "jp-manga/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pl/MangaHona.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pl/MangaHona.kt new file mode 100644 index 00000000..7e88141f --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pl/MangaHona.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.pl + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAHONA", "MangaHona", "pl") +internal class MangaHona(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.MANGAHONA, "mangahona.pl") { + override val datePattern = "yyyy-MM-dd" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/AloneScanlator.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/AloneScanlator.kt new file mode 100644 index 00000000..d5495eba --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/AloneScanlator.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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("ALONESCANLATOR", "AloneScanlator", "pt") +internal class AloneScanlator(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.ALONESCANLATOR, "alonescanlator.com.br", 10) { + override val datePattern: String = "dd/MM/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ArgosComics.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ArgosComics.kt new file mode 100644 index 00000000..caf8bc30 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ArgosComics.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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("ARGOSCOMICS", "ArgosComics", "pt") +internal class ArgosComics(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.ARGOSCOMICS, "argoscomics.com.br") { + override val datePattern: String = "d 'de' MMMM 'de' yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Atemporal.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Atemporal.kt new file mode 100644 index 00000000..b67ff8c1 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Atemporal.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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("ATEMPORAL", "Atemporal", "pt") +internal class Atemporal(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.ATEMPORAL, "atemporal.cloud") { + override val datePattern: String = "d 'de' MMMM 'de' yyyy" + override val withoutAjax = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/BurningScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/BurningScans.kt index cb346dcc..d19f7a42 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/BurningScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/BurningScans.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.pt +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("BURNINGSCANS", "BurningScans", "pt") internal class BurningScans(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.BURNINGSCANS, "burningscans.com") { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/DreamScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/DreamScan.kt index 28630ccd..6d85679d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/DreamScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/DreamScan.kt @@ -3,7 +3,6 @@ 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.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("DREAMSCAN", "DreamScan", "pt") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/EuphoriaScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/EuphoriaScan.kt new file mode 100644 index 00000000..3a1dba16 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/EuphoriaScan.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.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("EUPHORIASCAN", "EuphoriaScan", "pt", ContentType.HENTAI) +internal class EuphoriaScan(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.EUPHORIASCAN, "euphoriascan.com", 10) { + override val datePattern: String = "dd 'de' MMMM 'de' yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FenixProject.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FenixProject.kt new file mode 100644 index 00000000..6be81132 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FenixProject.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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("FENIXPROJECT", "FenixProject", "pt") +internal class FenixProject(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.FENIXPROJECT, "fenixproject.xyz", 10) { + override val datePattern: String = "dd/MM/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/GekkouScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/GekkouScans.kt index 531da28b..162b9ec3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/GekkouScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/GekkouScans.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.parsers.site.madara.pt +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.ContentType @@ -7,6 +8,7 @@ import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import java.util.* +@Broken @MangaSourceParser("GEKKOUSCANS", "GekkouScans", "pt", ContentType.HENTAI) internal class GekkouScans(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.GEKKOUSCANS, "gekkou.site") { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LadyestelarScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LadyestelarScan.kt index d2a0f99c..aec03a63 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LadyestelarScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LadyestelarScan.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.pt +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("LADYESTELARSCAN", "LadyEstelarScan", "pt") internal class LadyestelarScan(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.LADYESTELARSCAN, "ladyestelarscan.com.br", 10) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LeitorDeManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LeitorDeManga.kt index f90feeb2..282066f1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LeitorDeManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LeitorDeManga.kt @@ -3,7 +3,6 @@ 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.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("LEITORDEMANGA", "LeitorDeManga", "pt") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LeitorKamisama.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LeitorKamisama.kt index 5f12b668..e6472e56 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LeitorKamisama.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LeitorKamisama.kt @@ -5,7 +5,7 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -@MangaSourceParser("LEITORKAMISAMA", "Leitor Kamisama", "pt") +@MangaSourceParser("LEITORKAMISAMA", "LeitorKamisama", "pt") internal class LeitorKamisama(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.LEITORKAMISAMA, "leitor.kamisama.com.br", 10) { override val datePattern: String = "dd 'de' MMMMM 'de' yyyy" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LerHentai.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LerHentai.kt new file mode 100644 index 00000000..d86dc01f --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LerHentai.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.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("LERHENTAI", "LerHentai", "pt", ContentType.HENTAI) +internal class LerHentai(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.LERHENTAI, "lerhentai.com", 20) { + override val datePattern: String = "dd 'de' MMMMM 'de' yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LichMangas.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LichMangas.kt new file mode 100644 index 00000000..4c53c842 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LichMangas.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.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("LICHMANGAS", "LichMangas", "pt") +internal class LichMangas(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.LICHMANGAS, "lichmangas.com", 10) { + override val datePattern = "dd/MM/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MaidSecret.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MaidSecret.kt index 3b339f7b..0ab3e403 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MaidSecret.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MaidSecret.kt @@ -3,7 +3,6 @@ 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.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MAIDSECRET", "MaidSecret", "pt") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MangaNinja.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MangaNinja.kt index df0c58b3..63800d73 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MangaNinja.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MangaNinja.kt @@ -3,7 +3,6 @@ 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.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGANINJA", "MangaNinja", "pt") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Manhastro.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Manhastro.kt index 414602b5..1334b7d7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Manhastro.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Manhastro.kt @@ -2,9 +2,38 @@ 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.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaPage import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl @MangaSourceParser("MANHASTRO", "Manhastro", "pt") internal class Manhastro(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.MANHASTRO, "manhastro.com", 18) + MadaraParser(context, MangaParserSource.MANHASTRO, "manhastro.com", 24) { + + override val listUrl = "lermanga/" + override val tagPrefix = "genre/" + + override suspend fun getPages(chapter: MangaChapter): List { + val fullUrl = chapter.url.toAbsoluteUrl(domain) + val doc = webClient.httpGet(fullUrl).parseHtml() + + val script = doc.selectFirstOrThrow("script:containsData(imageLinks)").data() + val images = script.substringAfter('[').substringBeforeLast(']') + .replace("\"", "").split(',') + return images.map { img -> + val url = context.decodeBase64(img).toString(Charsets.UTF_8) + MangaPage( + id = generateUid(url), + url = url, + preview = null, + source = source, + ) + } + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Prismahentai.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Prismahentai.kt index 71dbbf46..57b3faf9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Prismahentai.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Prismahentai.kt @@ -1,11 +1,13 @@ package org.koitharu.kotatsu.parsers.site.madara.pt +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("PRISMA_HENTAI", "PrismaHentai", "pt", ContentType.HENTAI) internal class Prismahentai(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.PRISMA_HENTAI, "prismahentai.com", 18) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ProjetoScanlator.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ProjetoScanlator.kt index 47bfdf45..1859d967 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ProjetoScanlator.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ProjetoScanlator.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.pt +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("PROJETOSCANLATOR", "ProjetoScanlator", "pt") internal class ProjetoScanlator(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.PROJETOSCANLATOR, "projetoscanlator.com", 10) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Atikrost.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Atikrost.kt new file mode 100644 index 00000000..6b742b62 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Atikrost.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("ATIKROST", "Atikrost", "tr") +internal class Atikrost(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.ATIKROST, "www.atikrost.com", 10) { + override val datePattern = "d MMMM yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/DeccalScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/DeccalScans.kt new file mode 100644 index 00000000..9d7a418f --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/DeccalScans.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("DECCALSCANS", "DeccalScans", "tr", ContentType.HENTAI) +internal class DeccalScans(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.DECCALSCANS, "deccalscans.net") { + override val tagPrefix = "turler/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/EsoManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/EsoManga.kt index 62e923c1..7de55000 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/EsoManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/EsoManga.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.tr +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("ESOMANGA", "EsoManga", "tr") internal class EsoManga(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.ESOMANGA, "esomanga.com", 10) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/GarciaManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/GarciaManga.kt new file mode 100644 index 00000000..f3c801d5 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/GarciaManga.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("GARCIAMANGA", "GarciaManga", "tr") +internal class GarciaManga(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.GARCIAMANGA, "garciamanga.com", 20) { + override val selectPage = "img" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ImparatorManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ImparatorManga.kt new file mode 100644 index 00000000..a17eaa13 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ImparatorManga.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("IMPARATORMANGA", "ImparatorManga", "tr") +internal class ImparatorManga(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.IMPARATORMANGA, "www.imparatormanga.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Jellyring.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Jellyring.kt new file mode 100644 index 00000000..7f92bf4e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Jellyring.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("JELLYRING", "Jellyring", "tr") +internal class Jellyring(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.JELLYRING, "jellyring.co") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/KabusManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/KabusManga.kt new file mode 100644 index 00000000..49359663 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/KabusManga.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("KABUSMANGA", "KabusManga", "tr") +internal class KabusManga(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.KABUSMANGA, "kabusmanga.com") { + override val datePattern = "dd/MM/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Kedi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Kedi.kt new file mode 100644 index 00000000..0cbe3edb --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Kedi.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("KEDI", "Kedi", "tr") +internal class Kedi(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.KEDI, "kedi.to") { + override val datePattern = "d MMMM yyyy" + override val tagPrefix = "tur/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/LaviniaFansub.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/LaviniaFansub.kt index a9e5b2fd..f9d44222 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/LaviniaFansub.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/LaviniaFansub.kt @@ -1,13 +1,58 @@ package org.koitharu.kotatsu.parsers.site.madara.tr +import org.jsoup.nodes.Document import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrlOrNull +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.removeSuffix +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import java.text.SimpleDateFormat @MangaSourceParser("LAVINIAFANSUB", "LaviniaFansub", "tr", ContentType.HENTAI) internal class LaviniaFansub(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.LAVINIAFANSUB, "laviniafansub.com", 18) { override val datePattern = "dd/MM/yyyy" + + override suspend fun loadChapters(mangaUrl: String, document: Document): List { + val doc = if (postReq) { + val mangaId = document.select("div#manga-chapters-holder").attr("data-id") + val url = "https://$domain/wp-admin/admin-ajax.php" + val postData = "action=manga_get_chapters&manga=$mangaId" + webClient.httpPost(url, postData).parseHtml() + } else { + val url = mangaUrl.toAbsoluteUrl(domain).removeSuffix('/') + "/ajax/chapters/" + webClient.httpPost(url, emptyMap()).parseHtml() + } + val dateFormat = SimpleDateFormat(datePattern, sourceLocale) + return doc.select(selectChapter).mapChapters(reversed = true) { i, li -> + val a = li.selectFirst("a:not(:has(img))") + val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") + val link = href + stylePage + val dateText = li.selectFirst("a.c-new-tag")?.attr("title") ?: li.selectFirst(selectDate)?.text() + val name = a.selectFirst("p")?.text() ?: a.ownText() + MangaChapter( + id = generateUid(href), + url = link, + name = name, + number = i + 1f, + volume = 0, + branch = null, + uploadDate = parseChapterDate( + dateFormat, + dateText, + ), + scanlator = null, + source = source, + ) + } + } } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaWtNet.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaWtNet.kt new file mode 100644 index 00000000..d6cdb672 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaWtNet.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAWT_NET", "MangaWt.net", "tr") +internal class MangaWtNet(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.MANGAWT_NET, "mangawt.net") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangaoku.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangaoku.kt index 62689ade..b711faa1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangaoku.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangaoku.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.tr +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("MANGAOKU", "Mangaoku", "tr") internal class Mangaoku(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANGAOKU, "mangaoku.info", 24) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangawt.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangawt.kt index daaae94b..9b2a8229 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangawt.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangawt.kt @@ -5,6 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -@MangaSourceParser("MANGAWT", "MangaWt", "tr") +@MangaSourceParser("MANGAWT", "MangaWt.com", "tr") internal class Mangawt(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANGAWT, "mangawt.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MilaSub.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MilaSub.kt index dbdf6617..28eed399 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MilaSub.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MilaSub.kt @@ -3,7 +3,6 @@ package org.koitharu.kotatsu.parsers.site.madara.tr import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MILASUB", "MilaSub", "tr") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/NiveraFansub.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/NiveraFansub.kt index ec04e7e8..cc5da761 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/NiveraFansub.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/NiveraFansub.kt @@ -8,6 +8,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("NIVERAFANSUB", "NiveraFansub", "tr", ContentType.HENTAI) internal class NiveraFansub(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.NIVERAFANSUB, "niverafansub.co") { + MadaraParser(context, MangaParserSource.NIVERAFANSUB, "niverafansub.org") { override val datePattern = "d MMMM yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/OpiaToon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/OpiaToon.kt index eeea2920..c909f756 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/OpiaToon.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/OpiaToon.kt @@ -3,7 +3,6 @@ package org.koitharu.kotatsu.parsers.site.madara.tr import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser //This source requires an account. diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/PiedPiperFansubyy.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/PiedPiperFansubyy.kt new file mode 100644 index 00000000..88551056 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/PiedPiperFansubyy.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("PIEDPIPERFANSUBYY", "PiedPiperFansubyy", "tr", ContentType.HENTAI) +internal class PiedPiperFansubyy(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.PIEDPIPERFANSUBYY, "piedpiperfansubyy.me", 18) { + override val datePattern = "d MMMM yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/YaoiMangaOku.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/YaoiMangaOku.kt new file mode 100644 index 00000000..2f4d559d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/YaoiMangaOku.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("YAOIMANGAOKU", "YaoiMangaOku", "tr", ContentType.HENTAI) +internal class YaoiMangaOku(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.YAOIMANGAOKU, "yaoimangaoku.com", 16) { + override val datePattern = "d MMMM yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/YaoiTr.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/YaoiTr.kt index 2c24e7f4..45cd820b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/YaoiTr.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/YaoiTr.kt @@ -7,6 +7,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("YAOITR", "YaoiTr", "tr") internal class YaoiTr(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.YAOITR, "yaoitr.online", 16) { + MadaraParser(context, MangaParserSource.YAOITR, "yaoitr.fun", 16) { override val datePattern = "d MMMM yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ZamanManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ZamanManga.kt new file mode 100644 index 00000000..78bd3f23 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ZamanManga.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("ZAMANMANGA", "ZamanManga", "tr") +internal class ZamanManga(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.ZAMANMANGA, "zamanmanga.com") { + override val datePattern = "dd MMMM yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/Fecomicc.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/Fecomicc.kt new file mode 100644 index 00000000..7b5c4e96 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/Fecomicc.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.vi + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("FECOMICC", "Fecomicc", "vi") +internal class Fecomicc(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.FECOMICC, "fecomicc.xyz", 9) { + override val listUrl = "comic/" + override val tagPrefix = "the-loai/" + override val datePattern = "dd/MM/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/PinkTeaComic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/PinkTeaComic.kt new file mode 100644 index 00000000..6768eeb3 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/PinkTeaComic.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.vi + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("PINKTEACOMIC", "PinkTeaComic", "vi") +internal class PinkTeaComic(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.PINKTEACOMIC, "pinkteacomic.com") { + override val datePattern = "d MMMM, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/TruyenVn.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/TruyenVn.kt new file mode 100644 index 00000000..4ae86213 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/TruyenVn.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.vi + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("TRUYENVN", "TruyenVn", "vi", ContentType.HENTAI) +internal class TruyenVn(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.TRUYENVN, "truyenvn.cam", 20) { + override val listUrl = "truyen-tranh/" + override val tagPrefix = "the-loai/" + override val datePattern = "dd/MM/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/manga18/Manga18Parser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/manga18/Manga18Parser.kt index f8bd2ea0..e89be803 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/manga18/Manga18Parser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/manga18/Manga18Parser.kt @@ -132,6 +132,8 @@ internal abstract class Manga18Parser( protected open val selectState = "div.item:contains(Status) div.info_value" protected open val selectAlt = "div.item:contains(Other name) div.info_value" protected open val selectTag = "div.item:contains(Categories) div.info_value a" + protected open val selectAuthor = + "div.info_label:contains(author) + div.info_value, div.info_label:contains(autor) + div.info_value" override suspend fun getDetails(manga: Manga): Manga = coroutineScope { val fullUrl = manga.url.toAbsoluteUrl(domain) @@ -152,7 +154,8 @@ internal abstract class Manga18Parser( } } - val alt = doc.body().select(selectAlt).text() + val alt = body.selectFirst(selectAlt)?.text().takeIf { it != "Updating" || it.isNotEmpty() } + val author = body.selectFirst(selectAuthor)?.text().takeIf { it != "Updating" } manga.copy( tags = doc.body().select(selectTag).mapNotNullToSet { a -> @@ -164,6 +167,7 @@ internal abstract class Manga18Parser( }, description = desc, altTitle = alt, + author = author, state = state, chapters = chaptersDeferred.await(), ) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/manga18/en/Comic1000.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/manga18/en/Comic1000.kt index 2c85b78c..9c5b9bb2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/manga18/en/Comic1000.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/manga18/en/Comic1000.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.manga18.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.manga18.Manga18Parser +@Broken @MangaSourceParser("COMIC1000", "Comic1000", "en") internal class Comic1000(context: MangaLoaderContext) : Manga18Parser(context, MangaParserSource.COMIC1000, "comic1000.com") 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 6d3089da..2e7eb86a 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 @@ -225,18 +225,18 @@ internal abstract class MangaReaderParser( "En cours de publication", "Đ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", "Publicando", "连载中", "Devam ediyor", "Devam Etmekte", - -> MangaState.ONGOING + -> MangaState.ONGOING "Completed", "Completo", "Complété", "Fini", "Achevé", "Terminé", "Terminé ⚫", "Tamamlandı", "Đã hoàn thành", "Hoàn Thành", "مكتملة", "Завершено", "Finished", "Finalizado", "Completata", "One-Shot", "Bitti", "Tamat", "Completado", "Concluído", "Concluido", "已完结", "Bitmiş", - -> MangaState.FINISHED + -> MangaState.FINISHED "Canceled", "Cancelled", "Cancelado", "cancellato", "Cancelados", "Dropped", "Discontinued", "abandonné", "Abandonné", - -> MangaState.ABANDONED + -> MangaState.ABANDONED "Hiatus", "On Hold", "Pausado", "En espera", "En pause", "En Pause", "En attente", - -> MangaState.PAUSED + -> MangaState.PAUSED else -> null } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/NoonScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/NoonScan.kt new file mode 100644 index 00000000..b6596c37 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/NoonScan.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.ar + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("NOONSCAN", "NoonScan", "ar") +internal class NoonScan(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.NOONSCAN, "noonscan.com", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Normoyun.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Normoyun.kt index 2e1a89da..340004e2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Normoyun.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Normoyun.kt @@ -8,9 +8,9 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.util.* import java.text.SimpleDateFormat -@MangaSourceParser("NORMOYUN", "Normoyun", "ar") +@MangaSourceParser("NORMOYUN", "MaxLevelTeam", "ar") internal class Normoyun(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.NORMOYUN, "t1manga.com", pageSize = 42, searchPageSize = 39) { + MangaReaderParser(context, MangaParserSource.NORMOYUN, "maxlevelteam.com", pageSize = 42, searchPageSize = 39) { override val datePattern = "MMMM dd, yyyy" override val selectMangaList = ".listupd .bs .bsx" @@ -98,25 +98,11 @@ internal class Normoyun(context: MangaLoaderContext) : } override suspend fun parseInfo(docs: Document, manga: Manga, chapters: List): Manga { - - /// set if is table - val states = docs.selectFirst("div.spe span:contains(Ongoing)")?.text() - - val state = if (states.isNullOrEmpty()) { - "completed" + val mangaState = if (states.isNullOrEmpty()) { + MangaState.FINISHED } else { - "ongoing" - } - - val mangaState = state.let { - when (it) { - "ongoing" -> MangaState.ONGOING - - "completed" -> MangaState.FINISHED - - else -> null - } + MangaState.ONGOING } val author = docs.selectFirst("span.author i")?.text() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/PotatoManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/PotatoManga.kt index 9c62a4cf..97944d11 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/PotatoManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/PotatoManga.kt @@ -1,6 +1,7 @@ package org.koitharu.kotatsu.parsers.site.mangareader.ar import org.json.JSONObject +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaChapter @@ -9,6 +10,7 @@ import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.util.* +@Broken @MangaSourceParser("POTATOMANGA", "PotatoManga", "ar") internal class PotatoManga(context: MangaLoaderContext) : MangaReaderParser(context, MangaParserSource.POTATOMANGA, "potatomanga.xyz", pageSize = 30, searchPageSize = 10) { 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 17e13fe5..e5d664a2 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 @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.mangareader.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +@Broken @MangaSourceParser("COSMICSCANS", "CosmicScans.com", "en") internal class CosmicScansParser(context: MangaLoaderContext) : MangaReaderParser(context, MangaParserSource.COSMICSCANS, "cosmic-scans.com", pageSize = 20, searchPageSize = 10) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/DrakeScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/DrakeScans.kt index fdf9ce6b..0d47dd63 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/DrakeScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/DrakeScans.kt @@ -5,6 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -@MangaSourceParser("DRAKESCANS", "DrakeScans", "en") +@MangaSourceParser("DRAKESCANS", "DrakeComic", "en") internal class DrakeScans(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.DRAKESCANS, "drakescans.com", 20, 10) + MangaReaderParser(context, MangaParserSource.DRAKESCANS, "drakecomic.com", 20, 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/EnThunderScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/EnThunderScans.kt new file mode 100644 index 00000000..c8a20a21 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/EnThunderScans.kt @@ -0,0 +1,19 @@ +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.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("ENTHUNDERSCANS", "EnThunderScans", "en") +internal class EnThunderScans(context: MangaLoaderContext) : + MangaReaderParser( + context, + MangaParserSource.ENTHUNDERSCANS, + "en-thunderscans.com", + pageSize = 30, + searchPageSize = 10, + ) { + override val listUrl = "/comics" + override val isTagsExclusionSupported = false +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ErosScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ErosScans.kt index ac06df6f..53cc8f8f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ErosScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ErosScans.kt @@ -3,7 +3,6 @@ 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.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("EROSSCANS", "ErosScans", "en") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FuryManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FuryManga.kt new file mode 100644 index 00000000..1cba6e1f --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FuryManga.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.en + +import org.koitharu.kotatsu.parsers.Broken +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@Broken +@MangaSourceParser("FURYMANGA", "FuryManga", "en") +internal class FuryManga(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.FURYMANGA, "furymanga.com", pageSize = 30, searchPageSize = 10) { + override val listUrl = "/comics" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/MangaGalaxyParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/MangaGalaxyParser.kt index 48cd54d1..ca89c2f5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/MangaGalaxyParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/MangaGalaxyParser.kt @@ -1,55 +1,13 @@ package org.koitharu.kotatsu.parsers.site.mangareader.en -import org.jsoup.nodes.Document -import org.jsoup.select.Elements + +import org.koitharu.kotatsu.parsers.Broken 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.MangaParserSource -import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -import org.koitharu.kotatsu.parsers.util.* -import java.text.SimpleDateFormat -import java.util.Collections.emptyMap +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +@Broken // Not dead, changed template @MangaSourceParser("MANGAGALAXY", "MangaGalaxy", "en") internal class MangaGalaxyParser(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.RESETSCANS, "mangagalaxy.org", 18) { - - override val datePattern = "MM dd" - - override suspend fun loadChapters(mangaUrl: String, document: Document): List { - val doc = if (postReq) { - val mangaId = document.select("div#manga-chapters-holder").attr("data-id") - val url = "https://$domain/wp-admin/admin-ajax.php" - val postData = "action=manga_get_chapters&manga=$mangaId" - webClient.httpPost(url, postData).parseHtml() - } else { - val url = mangaUrl.toAbsoluteUrl(domain).removeSuffix('/') + "/home/ajax/chapters/" - webClient.httpPost(url, emptyMap()).parseHtml() - } - val dateFormat = SimpleDateFormat(datePattern, sourceLocale) - return doc.select(selectChapter).mapChapters(reversed = true) { _, li -> - val a = li.getElementsByTag("a").findWithText() - val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") - val link = href + stylePage - val dateText = li.selectFirst("a.c-new-tag")?.attr("title") ?: li.selectFirst(selectDate)?.text() - val name = a.text() - MangaChapter( - id = generateUid(href), - url = link, - name = name, - number = 0f, - volume = 0, - branch = null, - uploadDate = parseChapterDate( - dateFormat, - dateText, - ), - scanlator = null, - source = source, - ) - } - } - - private fun Elements.findWithText() = firstOrNull { it.hasText() } ?: first() -} + MangaReaderParser(context, MangaParserSource.MANGAGALAXY, "mangagalaxy.org", 20, 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/MangaGojo.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/MangaGojo.kt new file mode 100644 index 00000000..763eb44c --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/MangaGojo.kt @@ -0,0 +1,10 @@ +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.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("MANGAGOJO", "MangaGojo", "en") +internal class MangaGojo(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.MANGAGOJO, "mangagojo.com", 30, 20) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ReadersPoint.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ReadersPoint.kt index b99c4ef3..34e0617d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ReadersPoint.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ReadersPoint.kt @@ -7,13 +7,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("READERSPOINT", "ReadersPoint", "en") internal class ReadersPoint(context: MangaLoaderContext) : - MangaReaderParser( - context, - MangaParserSource.READERSPOINT, - "readers-point.space", - pageSize = 20, - searchPageSize = 10, - ) { + MangaReaderParser(context, MangaParserSource.READERSPOINT, "qscomics.org", pageSize = 20, searchPageSize = 10) { override val listUrl = "/series" override val isTagsExclusionSupported = false } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/RizzComic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/RizzComic.kt index 71db541b..37dbdc85 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/RizzComic.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/RizzComic.kt @@ -36,7 +36,7 @@ internal class RizzComic(context: MangaLoaderContext) : private var randomPartCache = SuspendLazy(::getRandomPart) private val randomPartRegex = Regex("""^(r\d+-)""") private val slugRegex = Regex("""[^a-z0-9]+""") - private fun searchMangaSelector() = ".utao .uta .imgu, .listupd .bs .bsx, .listo .bs .bsx" + private val searchMangaSelector = ".utao .uta .imgu, .listupd .bs .bsx, .listo .bs .bsx" private suspend fun getRandomPart(): String { val request = Request.Builder() .url("https://$domain$listUrl") @@ -45,7 +45,7 @@ internal class RizzComic(context: MangaLoaderContext) : val response = context.httpClient.newCall(request).await() val url = response.parseHtml() - .selectFirst(searchMangaSelector())!! + .selectFirst(searchMangaSelector)!! .select("a").attr("href") val slug = url diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ShojoScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ShojoScans.kt new file mode 100644 index 00000000..f60e5629 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ShojoScans.kt @@ -0,0 +1,12 @@ +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.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("SHOJOSCANS", "ShojoScans", "en") +internal class ShojoScans(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.SHOJOSCANS, "shojoscans.com", pageSize = 20, searchPageSize = 10) { + override val listUrl = "/comics" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/SpiderScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/SpiderScans.kt new file mode 100644 index 00000000..b1cebee2 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/SpiderScans.kt @@ -0,0 +1,10 @@ +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.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("SPIDERSCANS", "SpiderScans", "en") +internal class SpiderScans(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.SPIDERSCANS, "spiderscans.xyz", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Bymichiby.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Bymichiby.kt new file mode 100644 index 00000000..6b41a448 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Bymichiby.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.es + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("BYMICHIBY", "Bymichiby", "es", ContentType.HENTAI) +internal class Bymichiby(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.BYMICHIBY, "bymichiby.com", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Doujins.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Doujins.kt new file mode 100644 index 00000000..05e25419 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Doujins.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.es + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("DOUJINS", "Doujins.lat", "es", ContentType.HENTAI) +internal class Doujins(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.DOUJINS, "doujins.lat", pageSize = 20, searchPageSize = 10) { + override val listUrl = "/comic" + override val isTagsExclusionSupported = false +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/DtupScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/DtupScan.kt new file mode 100644 index 00000000..edf630c7 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/DtupScan.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.es + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("DTUPSCAN", "DtupScan", "es") +internal class DtupScan(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.DTUPSCAN, "dtupscan.com", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/HentaiReader.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/HentaiReader.kt new file mode 100644 index 00000000..f3c54129 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/HentaiReader.kt @@ -0,0 +1,131 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.es + +import org.json.JSONObject +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import org.koitharu.kotatsu.parsers.util.* +import java.text.SimpleDateFormat +import java.util.ArrayList + +@MangaSourceParser("HENTAIREADER", "HentaiReader", "es", ContentType.HENTAI) +internal class HentaiReader(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.HENTAIREADER, "hentaireader.org", pageSize = 25, searchPageSize = 25) { + override val listUrl = "/tipo/all" + override val isTagsExclusionSupported = false + + override suspend fun getListPage(page: Int, filter: MangaListFilter?): List { + val url = buildString { + append("https://") + append(domain) + + when (filter) { + + is MangaListFilter.Search -> { + append(listUrl) + append("?s=") + append(filter.query.urlEncoded()) + append("&page=") + append(page.toString()) + } + + is MangaListFilter.Advanced -> { + append(listUrl) + append("?order=") + append( + when (filter.sortOrder) { + SortOrder.ALPHABETICAL -> "title" + SortOrder.ALPHABETICAL_DESC -> "titlereverse" + SortOrder.NEWEST -> "latest" + SortOrder.POPULARITY -> "popular" + SortOrder.UPDATED -> "update" + else -> "" + }, + ) + + filter.tags.forEach { + append("&") + append("tags[]".urlEncoded()) + append("=") + append(it.key) + } + + if (filter.states.isNotEmpty()) { + filter.states.oneOrThrowIfMany()?.let { + append("&status=") + when (it) { + MangaState.ONGOING -> append("ongoing") + MangaState.FINISHED -> append("completed") + MangaState.PAUSED -> append("hiatus") + else -> append("") + } + } + } + + append("&page=") + append(page.toString()) + } + + null -> { + append(listUrl) + append("/?order=update&page=") + append(page.toString()) + } + } + } + return parseMangaList(webClient.httpGet(url).parseHtml()) + } + + override val selectChapter = ".releases" + override suspend fun getDetails(manga: Manga): Manga { + val docs = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() + val dateFormat = SimpleDateFormat(datePattern, sourceLocale) + val chapters = docs.select(selectChapter).mapChapters(reversed = true) { index, element -> + val url = element.selectFirst("a")?.attrAsRelativeUrl("href") ?: return@mapChapters null + MangaChapter( + id = generateUid(url), + name = element.selectFirst("h2")?.text() ?: "Chapter ${index + 1}", + url = url, + number = index + 1f, + volume = 0, + scanlator = null, + uploadDate = dateFormat.tryParse(docs.selectFirst("time")?.text()), + branch = null, + source = source, + ) + } + return parseInfo(docs, manga, chapters) + } + + override suspend fun getPages(chapter: MangaChapter): List { + val chapterUrl = chapter.url.toAbsoluteUrl(domain) + val docs = webClient.httpGet(chapterUrl).parseHtml() + val script = docs.selectFirstOrThrow(selectTestScript) + val images = JSONObject(script.data().substringAfter('(').substringBeforeLast(')').replace(", ] }]", " ] }]")) + .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 + } +} + diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/NekoScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/InariPikav.kt similarity index 54% rename from src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/NekoScans.kt rename to src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/InariPikav.kt index 39044aaa..056fbde3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/NekoScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/InariPikav.kt @@ -5,10 +5,8 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -@MangaSourceParser("NEKOSCANS", "NekoScans", "es") -internal class NekoScans(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.NEKOSCANS, "nekoscans.com", pageSize = 20, searchPageSize = 10) { - override val listUrl = "/proyecto" - override val encodedSrc = true +@MangaSourceParser("INARIPIKAV", "InariPikav", "es") +internal class InariPikav(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.INARIPIKAV, "inaripikav.org", pageSize = 10, searchPageSize = 10) { override val isTagsExclusionSupported = false } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/LectorHentai.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/LectorHentai.kt new file mode 100644 index 00000000..6dec4109 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/LectorHentai.kt @@ -0,0 +1,123 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.es + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import org.koitharu.kotatsu.parsers.util.* +import java.text.SimpleDateFormat + +@MangaSourceParser("LECTORHENTAI", "LectorHentai", "es", ContentType.HENTAI) +internal class LectorHentai(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.LECTORHENTAI, "lectorhentai.com", pageSize = 25, searchPageSize = 25) { + override val listUrl = "/tipo/all" + override val isTagsExclusionSupported = false + + override suspend fun getListPage(page: Int, filter: MangaListFilter?): List { + val url = buildString { + append("https://") + append(domain) + + when (filter) { + + is MangaListFilter.Search -> { + append(listUrl) + append("?s=") + append(filter.query.urlEncoded()) + append("&page=") + append(page.toString()) + } + + is MangaListFilter.Advanced -> { + append(listUrl) + append("?order=") + append( + when (filter.sortOrder) { + SortOrder.ALPHABETICAL -> "title" + SortOrder.ALPHABETICAL_DESC -> "titlereverse" + SortOrder.NEWEST -> "latest" + SortOrder.POPULARITY -> "popular" + SortOrder.UPDATED -> "update" + else -> "" + }, + ) + + filter.tags.forEach { + append("&") + append("genre[]".urlEncoded()) + append("=") + append(it.key) + } + + if (filter.states.isNotEmpty()) { + filter.states.oneOrThrowIfMany()?.let { + append("&status=") + when (it) { + MangaState.ONGOING -> append("ongoing") + MangaState.FINISHED -> append("completed") + MangaState.PAUSED -> append("hiatus") + else -> append("") + } + } + } + + append("&page=") + append(page.toString()) + } + + null -> { + append(listUrl) + append("/?order=update&page=") + append(page.toString()) + } + } + } + return parseMangaList(webClient.httpGet(url).parseHtml()) + } + + override val selectChapter = ".releases" + override suspend fun getDetails(manga: Manga): Manga { + val docs = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() + val dateFormat = SimpleDateFormat(datePattern, sourceLocale) + val chapters = docs.select(selectChapter).mapChapters(reversed = true) { index, element -> + val url = element.selectFirst("a")?.attrAsRelativeUrl("href") ?: return@mapChapters null + MangaChapter( + id = generateUid(url), + name = element.selectFirst("h2")?.text() ?: "Chapter ${index + 1}", + url = url, + number = index + 1f, + volume = 0, + scanlator = null, + uploadDate = dateFormat.tryParse(docs.selectFirst("time")?.text()), + branch = null, + source = source, + ) + } + return parseInfo(docs, manga, chapters) + } + + override suspend fun getPages(chapter: MangaChapter): List { + val chapterUrl = chapter.url.toAbsoluteUrl(domain) + val docs = webClient.httpGet(chapterUrl).parseHtml() + val script = docs.selectFirstOrThrow(selectTestScript).data() + val images = script.substringAfterLast("\"images\": [").substringBefore("]") + .replace(" ", "").replace("\"", "").replace("\n", "").split(",").dropLast(1) + return images.map { img -> + val url = "https://" + img.substringAfter("//") + MangaPage( + id = generateUid(url), + url = url, + preview = null, + source = source, + ) + } + } + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/MangaTv.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/MangaTv.kt new file mode 100644 index 00000000..2f679c7d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/MangaTv.kt @@ -0,0 +1,120 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.es + +import org.json.JSONObject +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.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.oneOrThrowIfMany +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.urlEncoded +import java.util.ArrayList + +@MangaSourceParser("MANGATV", "MangaTv", "es") +internal class MangaTv(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.MANGATV, "www.mangatv.net", pageSize = 25, searchPageSize = 25) { + override val listUrl = "/lista" + override val isTagsExclusionSupported = false + override val datePattern = "yyyy-MM-dd" + + override suspend fun getListPage(page: Int, filter: MangaListFilter?): List { + val url = buildString { + append("https://") + append(domain) + + when (filter) { + + is MangaListFilter.Search -> { + append("/lista?s=") + append(filter.query.urlEncoded()) + append("&page=") + append(page.toString()) + } + + is MangaListFilter.Advanced -> { + append(listUrl) + + append("/?order=") + append( + when (filter.sortOrder) { + SortOrder.ALPHABETICAL -> "title" + SortOrder.ALPHABETICAL_DESC -> "titlereverse" + SortOrder.NEWEST -> "latest" + SortOrder.POPULARITY -> "popular" + SortOrder.UPDATED -> "update" + else -> "" + }, + ) + + filter.tags.forEach { + append("&") + append("genre[]".urlEncoded()) + append("=") + append(it.key) + } + + filter.tagsExclude.forEach { + append("&") + append("genre[]".urlEncoded()) + append("=-") + append(it.key) + } + + if (filter.states.isNotEmpty()) { + filter.states.oneOrThrowIfMany()?.let { + append("&status=") + when (it) { + MangaState.ONGOING -> append("ongoing") + MangaState.FINISHED -> append("completed") + MangaState.PAUSED -> append("hiatus") + else -> append("") + } + } + } + + append("&page=") + append(page.toString()) + } + + null -> { + append(listUrl) + append("/?order=update&page=") + append(page.toString()) + } + } + } + return parseMangaList(webClient.httpGet(url).parseHtml()) + } + + override suspend fun getPages(chapter: MangaChapter): List { + val chapterUrl = chapter.url.toAbsoluteUrl(domain) + val docs = webClient.httpGet(chapterUrl).parseHtml() + val script = docs.selectFirstOrThrow(selectTestScript) + val images = JSONObject(script.data().substringAfter('(').substringBeforeLast(')').replace(", ] }]", " ] }]")) + .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 + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/RagnaScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/RagnaScan.kt index d67bbead..36f24d81 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/RagnaScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/RagnaScan.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.mangareader.es +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +@Broken @MangaSourceParser("RAGNASCAN", "RagnaScan", "es") internal class RagnaScan(context: MangaLoaderContext) : MangaReaderParser(context, MangaParserSource.RAGNASCAN, "ragnascan.com", pageSize = 5, searchPageSize = 10) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/UkiyoToon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/UkiyoToon.kt new file mode 100644 index 00000000..db54e5cf --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/UkiyoToon.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.es + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("UKIYOTOON", "UkiyoToon", "es") +internal class UkiyoToon(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.UKIYOTOON, "ukiyotoon.com", 30, 10) { + override val isTagsExclusionSupported = false +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/EtheralRadiance.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/EtheralRadiance.kt new file mode 100644 index 00000000..a9b5c6fe --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/EtheralRadiance.kt @@ -0,0 +1,30 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.fr + + +import org.koitharu.kotatsu.parsers.Broken +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.insertCookies + +@Broken +@MangaSourceParser("ETHERALRADIANCE", "EtheralRadiance", "fr") +internal class EtheralRadiance(context: MangaLoaderContext) : + MangaReaderParser( + context, + MangaParserSource.ETHERALRADIANCE, + "www.etheralradiance.eu", + pageSize = 20, + searchPageSize = 10, + ) { + override val isTagsExclusionSupported = false + + init { + context.cookieJar.insertCookies( + domain, + "_lscache_vary=1;", + ) + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/RevolutionScantrad.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/RevolutionScantrad.kt new file mode 100644 index 00000000..da94e929 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/RevolutionScantrad.kt @@ -0,0 +1,158 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.fr + +import org.jsoup.nodes.Document +import org.koitharu.kotatsu.parsers.ErrorMessages +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.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.model.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.oneOrThrowIfMany +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.src +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlEncoded +import java.text.SimpleDateFormat + +@MangaSourceParser("REVOLUTIONSCANTRAD", "RevolutionScantrad", "fr") +internal class RevolutionScantrad(context: MangaLoaderContext) : + MangaReaderParser( + context, + MangaParserSource.REVOLUTIONSCANTRAD, + "www.revolutionscantrad.com", + pageSize = 100, + searchPageSize = 10, + ) { + override val listUrl = "/series.html" + override val datePattern = "yyyy" + override val isTagsExclusionSupported = false + override val isSearchSupported = false + + override suspend fun getListPage(page: Int, filter: MangaListFilter?): List { + if (page > 1) { + return emptyList() + } + val url = buildString { + append("https://") + append(domain) + + when (filter) { + + is MangaListFilter.Search -> { + throw IllegalArgumentException(ErrorMessages.SEARCH_NOT_SUPPORTED) + } + + is MangaListFilter.Advanced -> { + append(listUrl) + + append("?order=") + append( + when (filter.sortOrder) { + SortOrder.ALPHABETICAL -> "title" + SortOrder.ALPHABETICAL_DESC -> "titlereverse" + SortOrder.NEWEST -> "latest" + SortOrder.POPULARITY -> "popular" + SortOrder.UPDATED -> "update" + else -> "" + }, + ) + + filter.tags.forEach { + append("&") + append("genre[]".urlEncoded()) + append("=") + append(it.key) + } + + filter.tagsExclude.forEach { + append("&") + append("genre[]".urlEncoded()) + append("=-") + append(it.key) + } + + if (filter.states.isNotEmpty()) { + filter.states.oneOrThrowIfMany()?.let { + append("&status=") + when (it) { + MangaState.ONGOING -> append("ongoing") + MangaState.FINISHED -> append("completed") + MangaState.PAUSED -> append("hiatus") + else -> append("") + } + } + } + + append("&page=") + append(page.toString()) + } + + null -> { + append(listUrl) + append("/?order=update&page=") + append(page.toString()) + } + } + } + return parseMangaList(webClient.httpGet(url).parseHtml()) + } + + override val selectPage = "div#readerarea img.chapter-image" + + override fun parseMangaList(docs: Document): List { + return docs.select(selectMangaList).mapNotNull { + val a = it.selectFirst("a") ?: return@mapNotNull null + val relativeUrl = "/" + a.attrAsRelativeUrl("href") + val rating = it.selectFirst(".numscore")?.text() + ?.toFloatOrNull()?.div(10) ?: RATING_UNKNOWN + Manga( + id = generateUid(relativeUrl), + url = relativeUrl, + title = it.selectFirst(selectMangaListTitle)?.text() ?: a.attr("title"), + altTitle = null, + publicUrl = a.attrAsAbsoluteUrl("href"), + rating = rating, + isNsfw = isNsfwSource, + coverUrl = it.selectFirst(selectMangaListImg)?.src().orEmpty(), + tags = emptySet(), + state = null, + author = null, + source = source, + ) + } + } + + override suspend fun getDetails(manga: Manga): Manga { + val docs = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() + val dateFormat = SimpleDateFormat(datePattern, sourceLocale) + val urlStart = manga.url.substringBeforeLast('/') + val chapters = docs.select(selectChapter).mapChapters(reversed = true) { index, element -> + val url = element.selectFirst("a")?.attrAsRelativeUrl("href") ?: return@mapChapters null + MangaChapter( + id = generateUid(url), + name = element.selectFirst(".chapternum")?.text() ?: "Chapter ${index + 1}", + url = "$urlStart/$url", + number = index + 1f, + volume = 0, + scanlator = null, + uploadDate = dateFormat.tryParse(element.selectFirst(".chapterdate")?.text()), + branch = null, + source = source, + ) + } + return parseInfo(docs, manga, chapters) + } + + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/RimuScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/RimuScans.kt index 3d98ae7b..f2dc8868 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/RimuScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/RimuScans.kt @@ -3,7 +3,6 @@ package org.koitharu.kotatsu.parsers.site.mangareader.fr import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("RIMUSCANS", "RimuScans", "fr") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/XxxRevolutionScantrad.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/XxxRevolutionScantrad.kt new file mode 100644 index 00000000..3aeb4ff4 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/XxxRevolutionScantrad.kt @@ -0,0 +1,159 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.fr + +import org.jsoup.nodes.Document +import org.koitharu.kotatsu.parsers.ErrorMessages +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.model.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.oneOrThrowIfMany +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.src +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlEncoded +import java.text.SimpleDateFormat + +@MangaSourceParser("XXXREVOLUTIONSCANTRAD", "Xxx.RevolutionScantrad", "fr", ContentType.HENTAI) +internal class XxxRevolutionScantrad(context: MangaLoaderContext) : + MangaReaderParser( + context, + MangaParserSource.XXXREVOLUTIONSCANTRAD, + "xxx.revolutionscantrad.com", + pageSize = 100, + searchPageSize = 10, + ) { + override val listUrl = "/series.html" + override val datePattern = "yyyy" + override val isTagsExclusionSupported = false + override val isSearchSupported = false + + override suspend fun getListPage(page: Int, filter: MangaListFilter?): List { + if (page > 1) { + return emptyList() + } + val url = buildString { + append("https://") + append(domain) + + when (filter) { + + is MangaListFilter.Search -> { + throw IllegalArgumentException(ErrorMessages.SEARCH_NOT_SUPPORTED) + } + + is MangaListFilter.Advanced -> { + append(listUrl) + + append("?order=") + append( + when (filter.sortOrder) { + SortOrder.ALPHABETICAL -> "title" + SortOrder.ALPHABETICAL_DESC -> "titlereverse" + SortOrder.NEWEST -> "latest" + SortOrder.POPULARITY -> "popular" + SortOrder.UPDATED -> "update" + else -> "" + }, + ) + + filter.tags.forEach { + append("&") + append("genre[]".urlEncoded()) + append("=") + append(it.key) + } + + filter.tagsExclude.forEach { + append("&") + append("genre[]".urlEncoded()) + append("=-") + append(it.key) + } + + if (filter.states.isNotEmpty()) { + filter.states.oneOrThrowIfMany()?.let { + append("&status=") + when (it) { + MangaState.ONGOING -> append("ongoing") + MangaState.FINISHED -> append("completed") + MangaState.PAUSED -> append("hiatus") + else -> append("") + } + } + } + + append("&page=") + append(page.toString()) + } + + null -> { + append(listUrl) + append("/?order=update&page=") + append(page.toString()) + } + } + } + return parseMangaList(webClient.httpGet(url).parseHtml()) + } + + override val selectPage = "div#readerarea img.chapter-image" + + override fun parseMangaList(docs: Document): List { + return docs.select(selectMangaList).mapNotNull { + val a = it.selectFirst("a") ?: return@mapNotNull null + val relativeUrl = "/" + a.attrAsRelativeUrl("href") + val rating = it.selectFirst(".numscore")?.text() + ?.toFloatOrNull()?.div(10) ?: RATING_UNKNOWN + Manga( + id = generateUid(relativeUrl), + url = relativeUrl, + title = it.selectFirst(selectMangaListTitle)?.text() ?: a.attr("title"), + altTitle = null, + publicUrl = a.attrAsAbsoluteUrl("href"), + rating = rating, + isNsfw = isNsfwSource, + coverUrl = it.selectFirst(selectMangaListImg)?.src().orEmpty(), + tags = emptySet(), + state = null, + author = null, + source = source, + ) + } + } + + override suspend fun getDetails(manga: Manga): Manga { + val docs = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() + val dateFormat = SimpleDateFormat(datePattern, sourceLocale) + val urlStart = manga.url.substringBeforeLast('/') + val chapters = docs.select(selectChapter).mapChapters(reversed = true) { index, element -> + val url = element.selectFirst("a")?.attrAsRelativeUrl("href") ?: return@mapChapters null + MangaChapter( + id = generateUid(url), + name = element.selectFirst(".chapternum")?.text() ?: "Chapter ${index + 1}", + url = "$urlStart/$url", + number = index + 1f, + volume = 0, + scanlator = null, + uploadDate = dateFormat.tryParse(element.selectFirst(".chapterdate")?.text()), + branch = null, + source = source, + ) + } + return parseInfo(docs, manga, chapters) + } + + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Comic21.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Comic21.kt new file mode 100644 index 00000000..53271669 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Comic21.kt @@ -0,0 +1,14 @@ +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.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.util.Locale + +@MangaSourceParser("COMIC21", "Comic21", "id") +internal class Comic21(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.COMIC21, "comic21.me", pageSize = 20, searchPageSize = 10) { + override val sourceLocale: Locale = Locale.ENGLISH + override val isTagsExclusionSupported = false +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomBatch.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomBatch.kt new file mode 100644 index 00000000..65727cc7 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomBatch.kt @@ -0,0 +1,13 @@ +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.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("KOMBATCH", "KomBatch", "id", ContentType.HENTAI) +internal class KomBatch(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.KOMBATCH, "kombatch.cc", pageSize = 20, searchPageSize = 10) { + override val isTagsExclusionSupported = false +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikGo.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikGo.kt new file mode 100644 index 00000000..37fae116 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikGo.kt @@ -0,0 +1,11 @@ +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.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("KOMIKGO", "KomikGo", "id", ContentType.HENTAI) +internal class KomikGo(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.KOMIKGO, "komikgo.xyz", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikLovers.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikLovers.kt new file mode 100644 index 00000000..f9b1b23f --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikLovers.kt @@ -0,0 +1,14 @@ +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.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.util.* + +@MangaSourceParser("KOMIKLOVERS", "KomikLovers", "id") +internal class KomikLovers(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.KOMIKLOVERS, "komiklovers.com", pageSize = 20, searchPageSize = 10) { + override val sourceLocale: Locale = Locale.ENGLISH + override val listUrl = "/komik" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikPix.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikPix.kt new file mode 100644 index 00000000..4ddaeed3 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikPix.kt @@ -0,0 +1,13 @@ +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.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("KOMIKPIX", "KomikPix", "id", ContentType.HENTAI) +internal class KomikPix(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.KOMIKPIX, "komikpix.com", pageSize = 30, searchPageSize = 14) { + override val listUrl = "/hentai" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikPoi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikPoi.kt new file mode 100644 index 00000000..06c085b9 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikPoi.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.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.util.* + +@MangaSourceParser("KOMIKPOI", "KomikPoi", "id", ContentType.HENTAI) +internal class KomikPoi(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.KOMIKPOI, "komikpoi.com", pageSize = 20, searchPageSize = 10) { + override val sourceLocale: Locale = Locale.ENGLISH + override val isTagsExclusionSupported = false +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Kyumik.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Kyumik.kt new file mode 100644 index 00000000..beb2f3fd --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Kyumik.kt @@ -0,0 +1,11 @@ +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.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("KYUMIK", "Kyumik", "id", ContentType.HENTAI) +internal class Kyumik(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.KYUMIK, "kyumik.com", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaIndoIcu.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaIndoIcu.kt index eadc5650..66db6bc9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaIndoIcu.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaIndoIcu.kt @@ -7,8 +7,9 @@ import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.util.* -@MangaSourceParser("MANHWAINDOICU", "ManhwaIndo.sbs", "id", ContentType.HENTAI) +@MangaSourceParser("MANHWAINDOICU", "KomikCinta", "id", ContentType.HENTAI) internal class ManhwaIndoIcu(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.MANHWAINDOICU, "manhwaindo.sbs", pageSize = 30, searchPageSize = 10) { + MangaReaderParser(context, MangaParserSource.MANHWAINDOICU, "komikcinta.icu", pageSize = 30, searchPageSize = 10) { override val sourceLocale: Locale = Locale.ENGLISH + override val listUrl = "/komik" } 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 bdc23595..56189459 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 @@ -4,12 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import java.util.* -@MangaSourceParser("MANHWAINDO", "ManhwaIndo.id", "id") +@MangaSourceParser("MANHWAINDO", "ManhwaIndo", "id") internal class ManhwaIndoParser(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.MANHWAINDO, "manhwaindo.id", pageSize = 30, searchPageSize = 10) { - override val datePattern = "MMMM dd, yyyy" - override val sourceLocale: Locale = Locale.ENGLISH + MangaReaderParser(context, MangaParserSource.MANHWAINDO, "manhwaindo.net", pageSize = 30, searchPageSize = 10) { + override val datePattern = "MMM d, yyyy" override val listUrl = "/series" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaLand.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaLand.kt index 48f20deb..2f66c234 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaLand.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaLand.kt @@ -6,8 +6,9 @@ import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -@MangaSourceParser("MANHWALAND", "ManhwaLand", "id", ContentType.HENTAI) +@MangaSourceParser("MANHWALAND", "ManhwaLand.vip", "id", ContentType.HENTAI) internal class ManhwaLand(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.MANHWALAND, "62.182.80.253", pageSize = 20, searchPageSize = 10) { + MangaReaderParser(context, MangaParserSource.MANHWALAND, "manhwaland.vip", pageSize = 20, searchPageSize = 10) { override val isTagsExclusionSupported = false + override val datePattern = "MMM d, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaLandInk.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaLandInk.kt new file mode 100644 index 00000000..9185128c --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaLandInk.kt @@ -0,0 +1,20 @@ +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.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("MANHWALAND_INK", "ManhwaLand.ink", "id", ContentType.HENTAI) +internal class ManhwaLandInk(context: MangaLoaderContext) : + MangaReaderParser( + context, + MangaParserSource.MANHWALAND_INK, + "www.manhwaland.ink", + pageSize = 20, + searchPageSize = 10, + ) { + override val isTagsExclusionSupported = false + override val datePattern = "MMM d, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MiHentai.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MiHentai.kt index 8eb841ac..720c0ba3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MiHentai.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MiHentai.kt @@ -4,7 +4,6 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("MIHENTAI", "MiHentai", "id", ContentType.HENTAI) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/AncientComics.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/AncientComics.kt new file mode 100644 index 00000000..bd37dbdf --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/AncientComics.kt @@ -0,0 +1,16 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("ANCIENTCOMICS", "AncientComics", "pt") +internal class AncientComics(context: MangaLoaderContext) : + MangaReaderParser( + context, + MangaParserSource.ANCIENTCOMICS, + "ancientcomics.com.br", + pageSize = 20, + searchPageSize = 20, + ) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/DragonManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/DragonManga.kt new file mode 100644 index 00000000..59e55dee --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/DragonManga.kt @@ -0,0 +1,17 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.th + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("DRAGONMANGA", "DragonManga", "th", ContentType.HENTAI) +internal class DragonManga(context: MangaLoaderContext) : + MangaReaderParser( + context, + MangaParserSource.DRAGONMANGA, + "www.dragon-manga.com", + pageSize = 40, + searchPageSize = 10, + ) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/EcchiDoujin.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/EcchiDoujin.kt new file mode 100644 index 00000000..7a84e7e9 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/EcchiDoujin.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.th + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("ECCHIDOUJIN", "EcchiDoujin", "th", ContentType.HENTAI) +internal class EcchiDoujin(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.ECCHIDOUJIN, "ecchi-doujin.com", pageSize = 30, searchPageSize = 10) { + override val listUrl = "/doujin" + override val isTagsExclusionSupported = false +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/Makimaaaaa.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/Makimaaaaa.kt new file mode 100644 index 00000000..ba12c809 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/Makimaaaaa.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.th + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("MAKIMAAAAA", "Makimaaaaa", "th") +internal class Makimaaaaa(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.MAKIMAAAAA, "makimaaaaa.com", pageSize = 30, searchPageSize = 30) { + override val isTagsExclusionSupported = false +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/NtrManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/NtrManga.kt new file mode 100644 index 00000000..6c43f394 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/NtrManga.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.th + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("NTRMANGA", "NtrManga", "th", ContentType.HENTAI) +internal class NtrManga(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.NTRMANGA, "www.ntr-manga.com", pageSize = 30, searchPageSize = 10) { + override val isTagsExclusionSupported = false +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/TanukiManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/TanukiManga.kt new file mode 100644 index 00000000..29401b44 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/TanukiManga.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.th + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("TANUKIMANGA", "TanukiManga", "th") +internal class TanukiManga(context: MangaLoaderContext) : + MangaReaderParser( + context, + MangaParserSource.TANUKIMANGA, + "www.tanuki-manga.com", + pageSize = 40, + searchPageSize = 10, + ) { + override val isTagsExclusionSupported = false +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/AduManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/AduManga.kt new file mode 100644 index 00000000..7e22381b --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/AduManga.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.util.Locale + +@MangaSourceParser("ADUMANGA", "AduManga", "tr") +internal class AduManga(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.ADUMANGA, "adumanga.com", pageSize = 20, searchPageSize = 10) { + override val isTagsExclusionSupported = false + override val sourceLocale: Locale = Locale.ENGLISH +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/AsemiFansub.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/AsemiFansub.kt new file mode 100644 index 00000000..16f5da2e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/AsemiFansub.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("ASEMIFANSUB", "AsemiFansub", "tr") +internal class AsemiFansub(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.ASEMIFANSUB, "asemifansub.com", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/AthenaManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/AthenaManga.kt new file mode 100644 index 00000000..f5b12810 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/AthenaManga.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("ATHENAMANGA", "AthenaManga", "tr") +internal class AthenaManga(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.ATHENAMANGA, "athenamanga.com", pageSize = 20, searchPageSize = 10) { + override val isMultipleTagsSupported = false +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/GaiaToon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/GaiaToon.kt new file mode 100644 index 00000000..1d46e727 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/GaiaToon.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("GAIATOON", "GaiaToon", "tr") +internal class GaiaToon(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.GAIATOON, "gaiatoon.com", pageSize = 50, searchPageSize = 10) { + override val isMultipleTagsSupported = false +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/MangaGezgini.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/MangaGezgini.kt index 6f9a04ec..71575ae1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/MangaGezgini.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/MangaGezgini.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.mangareader.tr +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +@Broken @MangaSourceParser("MANGAGEZGINI", "MangaGezgini", "tr") internal class MangaGezgini(context: MangaLoaderContext) : MangaReaderParser(context, MangaParserSource.MANGAGEZGINI, "mangagezgini.com", pageSize = 20, searchPageSize = 10) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/MangaSiginagi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/MangaSiginagi.kt new file mode 100644 index 00000000..93fdb837 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/MangaSiginagi.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("MANGASIGINAGI", "MangaSiginagi", "tr") +internal class MangaSiginagi(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.MANGASIGINAGI, "mangasiginagi.com", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/SereinScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/SereinScan.kt new file mode 100644 index 00000000..8197e495 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/SereinScan.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("SEREINSCAN", "SereinScan", "tr") +internal class SereinScan(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.SEREINSCAN, "sereinscan.com", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/ShijieScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/ShijieScans.kt new file mode 100644 index 00000000..d2b01d91 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/ShijieScans.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("SHIJIESCANS", "ShijieScans", "tr") +internal class ShijieScans(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.SHIJIESCANS, "shijiescans.com", pageSize = 20, searchPageSize = 10) { + override val listUrl = "/seri" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/ZenithScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/ZenithScans.kt new file mode 100644 index 00000000..663a4289 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/ZenithScans.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("ZENITHSCANS", "ZenithScans", "tr") +internal class ZenithScans(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.ZENITHSCANS, "zenithscans.com", pageSize = 20, searchPageSize = 10) { + override val isTagsExclusionSupported = false +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/en/BananaScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/en/BananaScan.kt index 0dbba8fd..fa4de1e5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/en/BananaScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/en/BananaScan.kt @@ -3,7 +3,6 @@ package org.koitharu.kotatsu.parsers.site.mmrcms.en import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.mmrcms.MmrcmsParser @MangaSourceParser("BANANASCAN_COM", "BananaScan.Com", "en") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/nepnep/NepnepParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/nepnep/NepnepParser.kt index 6790cff9..bd00031c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/nepnep/NepnepParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/nepnep/NepnepParser.kt @@ -184,17 +184,17 @@ internal abstract class NepnepParser( altTitle = null, state = when (doc.selectFirstOrThrow(".list-group-item:contains(Status:) a").text()) { "Ongoing (Scan)", "Ongoing (Publish)", - -> MangaState.ONGOING + -> MangaState.ONGOING "Complete (Scan)", "Complete (Publish)", - -> MangaState.FINISHED + -> MangaState.FINISHED "Cancelled (Scan)", "Cancelled (Publish)", "Discontinued (Scan)", "Discontinued (Publish)", - -> MangaState.ABANDONED + -> MangaState.ABANDONED "Hiatus (Scan)", "Hiatus (Publish)", - -> MangaState.PAUSED + -> MangaState.PAUSED else -> null }, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/LerManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/LerManga.kt index a1583931..a294a57d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/LerManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/LerManga.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.parsers.site.pt +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.ErrorMessages import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser @@ -10,6 +11,7 @@ import org.koitharu.kotatsu.parsers.util.* import java.text.SimpleDateFormat import java.util.* +@Broken @MangaSourceParser("LERMANGA", "LerManga", "pt") class LerManga(context: MangaLoaderContext) : PagedMangaParser(context, MangaParserSource.LERMANGA, 24) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/LerMangaOnline.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/LerMangaOnline.kt index d3f8fc35..48e07630 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/LerMangaOnline.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/LerMangaOnline.kt @@ -1,6 +1,7 @@ package org.koitharu.kotatsu.parsers.site.pt import org.jsoup.nodes.Document +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser @@ -10,6 +11,7 @@ import org.koitharu.kotatsu.parsers.util.* import java.text.SimpleDateFormat import java.util.* +@Broken @MangaSourceParser("LERMANGAONLINE", "LerMangaOnline", "pt") class LerMangaOnline(context: MangaLoaderContext) : PagedMangaParser(context, MangaParserSource.LERMANGAONLINE, 20) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/MuitoHentai.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/MuitoHentai.kt index 40a06503..ef3ce359 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/MuitoHentai.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/MuitoHentai.kt @@ -94,7 +94,7 @@ class MuitoHentai(context: MangaLoaderContext) : PagedMangaParser(context, Manga source = source, ) }, - chapters = doc.select(".backgroundpost h3 a").mapChapters() { i, a -> + chapters = doc.select(".backgroundpost h3 a").mapChapters { i, a -> val href = a.attrAsAbsoluteUrl("href") MangaChapter( id = generateUid(href), diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/OnePieceEx.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/OnePieceEx.kt index e9891e3a..6cf999f7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/OnePieceEx.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/OnePieceEx.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.parsers.site.pt +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser @@ -8,6 +9,7 @@ import org.koitharu.kotatsu.parsers.model.* import org.koitharu.kotatsu.parsers.util.* import java.util.* +@Broken @MangaSourceParser("ONEPIECEEX", "OnePieceEx", "pt") class OnePieceEx(context: MangaLoaderContext) : PagedMangaParser(context, MangaParserSource.ONEPIECEEX, 1) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/MangaWtfParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/MangaWtfParser.kt index 71824e7d..27b1715f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/MangaWtfParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/MangaWtfParser.kt @@ -69,7 +69,7 @@ class MangaWtfParser( SortOrder.NEWEST -> "createdAt,desc" SortOrder.ALPHABETICAL, SortOrder.ALPHABETICAL_DESC, - -> throw IllegalArgumentException("Unsupported ${filter.sortOrder}") + -> throw IllegalArgumentException("Unsupported ${filter.sortOrder}") }, ) if (filter.tags.isNotEmpty()) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/multichan/ChanParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/multichan/ChanParser.kt index 4d0b7341..a43f51f4 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/multichan/ChanParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/multichan/ChanParser.kt @@ -206,7 +206,7 @@ internal abstract class ChanParser( when (filter.sortOrder) { SortOrder.RATING, SortOrder.POPULARITY, - -> "favdesc" + -> "favdesc" SortOrder.ALPHABETICAL -> "abcasc" else -> "" // SortOrder.NEWEST diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/rulib/LibSocialParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/rulib/LibSocialParser.kt index f886d57e..c4f3fe3e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/rulib/LibSocialParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/rulib/LibSocialParser.kt @@ -87,7 +87,7 @@ internal abstract class LibSocialParser( SortOrder.NEWEST -> "created_at" SortOrder.ALPHABETICAL, SortOrder.ALPHABETICAL_DESC, - -> "rus_name" + -> "rus_name" }, ) urlBuilder.addQueryParameter( @@ -98,7 +98,7 @@ internal abstract class LibSocialParser( SortOrder.RATING, SortOrder.NEWEST, SortOrder.ALPHABETICAL_DESC, - -> "desc" + -> "desc" SortOrder.ALPHABETICAL -> "asc" }, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/scan/it/MangaItalia.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/scan/it/MangaItalia.kt index 7202732d..8e1a1d5c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/scan/it/MangaItalia.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/scan/it/MangaItalia.kt @@ -3,7 +3,6 @@ package org.koitharu.kotatsu.parsers.site.scan.it import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.scan.ScanParser @MangaSourceParser("MANGAITALIA", "MangaItalia", "pt") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/scan/pt/MangaBr.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/scan/pt/MangaBr.kt index 1fdbb562..c86c94b4 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/scan/pt/MangaBr.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/scan/pt/MangaBr.kt @@ -3,7 +3,6 @@ package org.koitharu.kotatsu.parsers.site.scan.pt import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.scan.ScanParser @MangaSourceParser("MANGABR", "MangaBr", "pt") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/scan/pt/MangaTerra.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/scan/pt/MangaTerra.kt index 264fe713..fdf00f2e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/scan/pt/MangaTerra.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/scan/pt/MangaTerra.kt @@ -3,7 +3,6 @@ package org.koitharu.kotatsu.parsers.site.scan.pt import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.scan.ScanParser @MangaSourceParser("MANGATERRA", "MangaTerra", "pt") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/TruyentranhLHParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/TruyentranhLHParser.kt index a1033ef1..a4896e73 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/TruyentranhLHParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/TruyentranhLHParser.kt @@ -4,6 +4,7 @@ import androidx.collection.ArrayMap import androidx.collection.ArraySet import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser @@ -13,6 +14,7 @@ import org.koitharu.kotatsu.parsers.util.* import java.text.SimpleDateFormat import java.util.* +@Broken @MangaSourceParser("TRUYENTRANHLH", "TruyentranhLH", "vi") class TruyentranhLHParser(context: MangaLoaderContext) : PagedMangaParser(context, source = MangaParserSource.TRUYENTRANHLH, pageSize = 18) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/WpComicsParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/WpComicsParser.kt index 4af889e0..19e891e5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/WpComicsParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/WpComicsParser.kt @@ -273,7 +273,7 @@ internal abstract class WpComicsParser( return when { d.endsWith(" ago") || d.endsWith(" trước") // Handle translated 'ago' in Viêt Nam. - -> parseRelativeDate(date) + -> parseRelativeDate(date) // Handle 'yesterday' and 'today', using midnight d.startsWith("year") -> Calendar.getInstance().apply { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/ZeistMangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/ZeistMangaParser.kt index 9cc37e8a..2ba778ec 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/ZeistMangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/ZeistMangaParser.kt @@ -189,7 +189,7 @@ internal abstract class ZeistMangaParser( } } - protected open val selectTags = "article div.mt-15 a, .info-genre a" + protected open val selectTags = "article div.mt-15 a, .info-genre a, dl:contains(Genre) dd a" override suspend fun getDetails(manga: Manga): Manga = coroutineScope { val doc = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() val state = @@ -198,6 +198,7 @@ internal abstract class ZeistMangaParser( ?: doc.selectFirst("ul.infonime li:contains(Status) span") ?: doc.selectFirst("ul.infonime li:contains(Estado) span") ?: doc.selectFirst("span.status-novel") + ?: doc.selectFirst("span[data-status]") val mangaState = state?.text()?.lowercase().let { when (it) { in ongoing -> MangaState.ONGOING @@ -209,11 +210,13 @@ internal abstract class ZeistMangaParser( } val author = doc.selectFirst("div.y6x11p:contains(الكاتب) .dt") ?: doc.selectFirst("div.y6x11p:contains(Author) .dt") + ?: doc.selectFirst("dl:contains(Author) dd") ?: doc.selectFirst("div.y6x11p:contains(Autor) .dt") ?: doc.selectFirst("div.y6x11p:contains(Yazar) .dt") + ?: doc.selectFirst("ul.infonime li:contains(Author) span") val desc = doc.getElementById("synopsis") ?: doc.getElementById("Sinopse") ?: doc.getElementById("sinopas") - ?: doc.selectFirst(".sinopsis") + ?: doc.selectFirst(".sinopsis") ?: doc.selectFirst(".sinopas") val chaptersDeferred = async { loadChapters(manga.url, doc) } manga.copy( author = author?.text(), @@ -254,6 +257,8 @@ internal abstract class ZeistMangaParser( ?.groupValues?.get(1) ?: throw Exception("Failed to find chapter feed") + } else if (doc.selectFirst("#chapterlist") != null) { + doc.selectFirstOrThrow("#chapterlist").attr("data-post-title") } else { doc.selectFirstOrThrow("script:containsData(var label_chapter)").data() .substringAfter("label_chapter = \"").substringBefore("\"") @@ -293,7 +298,8 @@ internal abstract class ZeistMangaParser( } } - protected open val selectPage = "div.check-box img, article#reader .separator img, article.container .separator img" + protected open val selectPage = + "div.check-box img, article#reader .separator img, article.container .separator img, #readarea img, #reader img, #readerarea img" override suspend fun getPages(chapter: MangaChapter): List { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/ar/ArabsDoujin.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/ar/ArabsDoujin.kt new file mode 100644 index 00000000..c4a45b9c --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/ar/ArabsDoujin.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.zeistmanga.ar + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser + +@MangaSourceParser("ARABSDOUJIN", "ArabsDoujin", "ar", ContentType.HENTAI) +internal class ArabsDoujin(context: MangaLoaderContext) : + ZeistMangaParser(context, MangaParserSource.ARABSDOUJIN, "www.arabsdoujin.online") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/es/GistamisHouseFansub.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/es/GistamisHouseFansub.kt new file mode 100644 index 00000000..41e97c2f --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/es/GistamisHouseFansub.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.zeistmanga.es + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser + +@MangaSourceParser("GISTAMISHOUSEFANSUB", "GistamisHouseFansub", "es") +internal class GistamisHouseFansub(context: MangaLoaderContext) : + ZeistMangaParser(context, MangaParserSource.GISTAMISHOUSEFANSUB, "gistamishousefansub.blogspot.com") { + override val sateOngoing: String = "Activo" + override val sateFinished: String = "Completo" + override val sateAbandoned: String = "Cancelado" + override val selectPage = ".post img" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/es/NekoScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/es/NekoScans.kt new file mode 100644 index 00000000..21981007 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/es/NekoScans.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.zeistmanga.es + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser + +@MangaSourceParser("NEKOSCANS", "NekoScans", "es") +internal class NekoScans(context: MangaLoaderContext) : + ZeistMangaParser(context, MangaParserSource.NEKOSCANS, "nekoscanlationlector.blogspot.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/IchiroManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/IchiroManga.kt new file mode 100644 index 00000000..e4c9ceac --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/IchiroManga.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.zeistmanga.id + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser + +@MangaSourceParser("ICHIROMANGA", "IchiroManga", "id") +internal class IchiroManga(context: MangaLoaderContext) : + ZeistMangaParser(context, MangaParserSource.ICHIROMANGA, "www.ichiromanga.my.id") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/Kishisan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/Kishisan.kt new file mode 100644 index 00000000..30cb77d3 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/Kishisan.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.zeistmanga.id + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser + +@MangaSourceParser("KISHISAN", "Kishisan", "id") +internal class Kishisan(context: MangaLoaderContext) : + ZeistMangaParser(context, MangaParserSource.KISHISAN, "www.kishisan.site") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/Nimemob.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/Nimemob.kt new file mode 100644 index 00000000..2b7f20b5 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/Nimemob.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.zeistmanga.id + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser + +@MangaSourceParser("NIMEMOB", "Nimemob", "id") +internal class Nimemob(context: MangaLoaderContext) : + ZeistMangaParser(context, MangaParserSource.NIMEMOB, "www.nimemob.my.id") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/ReYume.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/ReYume.kt new file mode 100644 index 00000000..a444a9b3 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/ReYume.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.zeistmanga.id + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser + +@MangaSourceParser("REYUME", "ReYume", "id") +internal class ReYume(context: MangaLoaderContext) : + ZeistMangaParser(context, MangaParserSource.REYUME, "www.re-yume.my.id") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/Sobatmanku.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/Sobatmanku.kt index 581f660c..870c3a94 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/Sobatmanku.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/Sobatmanku.kt @@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser @MangaSourceParser("SOBATMANKU", "Sobatmanku", "id") internal class Sobatmanku(context: MangaLoaderContext) : - ZeistMangaParser(context, MangaParserSource.SOBATMANKU, "www.sobatmanku19.site") + ZeistMangaParser(context, MangaParserSource.SOBATMANKU, "www.sobatmanku19.cab") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/GalaxScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/GalaxScans.kt index e19bd474..35751919 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/GalaxScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/GalaxScans.kt @@ -5,9 +5,9 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser -@MangaSourceParser("GALAXSCANS", "GalaxScans", "pt") +@MangaSourceParser("GALAXSCANS", "GalaxScanlator", "pt") internal class GalaxScans(context: MangaLoaderContext) : - ZeistMangaParser(context, MangaParserSource.GALAXSCANS, "galaxscans.blogspot.com") { + ZeistMangaParser(context, MangaParserSource.GALAXSCANS, "galaxscanlator.blogspot.com") { override val mangaCategory = "Recentes" override val sateOngoing: String = "Lançando" override val sateFinished: String = "Completo" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/RaysScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/RaysScan.kt index 69767754..2e120fbc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/RaysScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/RaysScan.kt @@ -3,7 +3,6 @@ package org.koitharu.kotatsu.parsers.site.zeistmanga.pt import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.model.MangaState import org.koitharu.kotatsu.parsers.model.MangaTag import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/SolooScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/SolooScan.kt index 7dd2a7cb..1c25abc7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/SolooScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/SolooScan.kt @@ -3,7 +3,6 @@ package org.koitharu.kotatsu.parsers.site.zeistmanga.pt import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser @MangaSourceParser("SOLOOSCAN", "SolooScan", "pt") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/TemakiMangas.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/TemakiMangas.kt index fec28c78..1d212030 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/TemakiMangas.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/TemakiMangas.kt @@ -3,7 +3,6 @@ package org.koitharu.kotatsu.parsers.site.zeistmanga.pt import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.model.MangaState import org.koitharu.kotatsu.parsers.model.MangaTag import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/YaoiFanClub.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/YaoiFanClub.kt new file mode 100644 index 00000000..f509a92f --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/YaoiFanClub.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.zeistmanga.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser + +@MangaSourceParser("YAOIFANCLUB", "YaoiFanClub", "pt") +internal class YaoiFanClub(context: MangaLoaderContext) : + ZeistMangaParser(context, MangaParserSource.YAOIFANCLUB, "www.yaoifanclub.com") { + override val sateOngoing: String = "Ativo" + override val sateFinished: String = "Completo" + override val sateAbandoned: String = "Dropado" +}