parent
ca212ca692
commit
b3a0b97f0e
@ -0,0 +1,14 @@
|
|||||||
|
package org.koitharu.kotatsu.parsers.site.madara.all
|
||||||
|
|
||||||
|
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
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
@MangaSourceParser("EROMANHWA", "EroManhwa", "", ContentType.HENTAI)
|
||||||
|
internal class EroManhwa(context: MangaLoaderContext) :
|
||||||
|
MadaraParser(context, MangaParserSource.EROMANHWA, "eromanhwa.org") {
|
||||||
|
override val sourceLocale: Locale = Locale.ENGLISH
|
||||||
|
}
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
package org.koitharu.kotatsu.parsers.site.madara.all
|
||||||
|
|
||||||
|
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.*
|
||||||
|
|
||||||
|
@MangaSourceParser("KDTSCANS", "KdtScans", "")
|
||||||
|
internal class KdtScans(context: MangaLoaderContext) :
|
||||||
|
MadaraParser(context, MangaParserSource.KDTSCANS, "kdtscans.com", 10) {
|
||||||
|
override val sourceLocale: Locale = Locale("es")
|
||||||
|
}
|
||||||
@ -1,12 +1,10 @@
|
|||||||
package org.koitharu.kotatsu.parsers.site.madara.en
|
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.MangaLoaderContext
|
||||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||||
|
|
||||||
@Broken
|
|
||||||
@MangaSourceParser("AQUAMANGA", "AquaManga", "en")
|
@MangaSourceParser("AQUAMANGA", "AquaManga", "en")
|
||||||
internal class AquaManga(context: MangaLoaderContext) :
|
internal class AquaManga(context: MangaLoaderContext) :
|
||||||
MadaraParser(context, MangaParserSource.AQUAMANGA, "aquareader.net", 20)
|
MadaraParser(context, MangaParserSource.AQUAMANGA, "aquareader.net", 20)
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
package org.koitharu.kotatsu.parsers.site.madara.en
|
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.MangaLoaderContext
|
||||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||||
import org.koitharu.kotatsu.parsers.model.ContentType
|
import org.koitharu.kotatsu.parsers.model.ContentType
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||||
|
|
||||||
|
@Broken // Redirect to @hentai20
|
||||||
@MangaSourceParser("MANGA18H", "Manga18h", "en", ContentType.HENTAI)
|
@MangaSourceParser("MANGA18H", "Manga18h", "en", ContentType.HENTAI)
|
||||||
internal class Manga18h(context: MangaLoaderContext) :
|
internal class Manga18h(context: MangaLoaderContext) :
|
||||||
MadaraParser(context, MangaParserSource.MANGA18H, "manga18h.xyz", 20)
|
MadaraParser(context, MangaParserSource.MANGA18H, "manga18h.xyz", 20)
|
||||||
|
|||||||
@ -1,10 +1,12 @@
|
|||||||
package org.koitharu.kotatsu.parsers.site.madara.en
|
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.MangaLoaderContext
|
||||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||||
|
|
||||||
|
@Broken
|
||||||
@MangaSourceParser("ZINMANGA_CC", "ZinManga.cc", "en")
|
@MangaSourceParser("ZINMANGA_CC", "ZinManga.cc", "en")
|
||||||
internal class ZinMangaCc(context: MangaLoaderContext) :
|
internal class ZinMangaCc(context: MangaLoaderContext) :
|
||||||
MadaraParser(context, MangaParserSource.ZINMANGA_CC, "zinmanga.cc")
|
MadaraParser(context, MangaParserSource.ZINMANGA_CC, "zinmanga.cc")
|
||||||
|
|||||||
@ -1,10 +1,12 @@
|
|||||||
package org.koitharu.kotatsu.parsers.site.madara.es
|
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.MangaLoaderContext
|
||||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||||
|
|
||||||
|
@Broken
|
||||||
@MangaSourceParser("HOUSEMANGAS", "HouseMangas", "es")
|
@MangaSourceParser("HOUSEMANGAS", "HouseMangas", "es")
|
||||||
internal class HouseMangas(context: MangaLoaderContext) :
|
internal class HouseMangas(context: MangaLoaderContext) :
|
||||||
MadaraParser(context, MangaParserSource.HOUSEMANGAS, "housemangas.com")
|
MadaraParser(context, MangaParserSource.HOUSEMANGAS, "housemangas.com")
|
||||||
|
|||||||
@ -1,15 +0,0 @@
|
|||||||
package org.koitharu.kotatsu.parsers.site.madara.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.ContentType
|
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
|
||||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
|
||||||
|
|
||||||
@Broken
|
|
||||||
@MangaSourceParser("LUNARHENTAI", "LunarHentai", "fr", ContentType.HENTAI)
|
|
||||||
internal class LunarHentai(context: MangaLoaderContext) :
|
|
||||||
MadaraParser(context, MangaParserSource.LUNARHENTAI, "hentai.lunarscans.fr") {
|
|
||||||
override val datePattern = "dd MMMM yyyy"
|
|
||||||
}
|
|
||||||
@ -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("KORELISCANS", "KoreliScans", "tr")
|
||||||
|
internal class KoreliScans(context: MangaLoaderContext) :
|
||||||
|
MadaraParser(context, MangaParserSource.KORELISCANS, "koreliscans.com", 10) {
|
||||||
|
override val datePattern = "d MMMM"
|
||||||
|
}
|
||||||
@ -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("NABISCANS", "NabiScans", "tr")
|
||||||
|
internal class NabiScans(context: MangaLoaderContext) :
|
||||||
|
MadaraParser(context, MangaParserSource.NABISCANS, "nabiscans.com") {
|
||||||
|
override val datePattern = "d MMMM yyyy"
|
||||||
|
}
|
||||||
@ -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("HENTAIVNCAFE", "HentaiVnCafe", "vi", ContentType.HENTAI)
|
||||||
|
internal class HentaiVnCafe(context: MangaLoaderContext) :
|
||||||
|
MadaraParser(context, MangaParserSource.HENTAIVNCAFE, "hentaivn.cafe", 24) {
|
||||||
|
override val listUrl = "truyen-hentai/"
|
||||||
|
override val tagPrefix = "the-loai/"
|
||||||
|
override val datePattern = "dd/MM/yyyy"
|
||||||
|
}
|
||||||
@ -1,10 +1,12 @@
|
|||||||
package org.koitharu.kotatsu.parsers.site.madara.vi
|
package org.koitharu.kotatsu.parsers.site.madara.vi
|
||||||
|
|
||||||
|
import org.koitharu.kotatsu.parsers.Broken
|
||||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||||
|
|
||||||
|
@Broken
|
||||||
@MangaSourceParser("MANGAZODIAC", "MangaZodiac", "vi")
|
@MangaSourceParser("MANGAZODIAC", "MangaZodiac", "vi")
|
||||||
internal class MangaZodiac(context: MangaLoaderContext) :
|
internal class MangaZodiac(context: MangaLoaderContext) :
|
||||||
MadaraParser(context, MangaParserSource.MANGAZODIAC, "mangazodiac.com")
|
MadaraParser(context, MangaParserSource.MANGAZODIAC, "mangazodiac.com")
|
||||||
|
|||||||
@ -1,12 +1,10 @@
|
|||||||
package org.koitharu.kotatsu.parsers.site.mangareader.en
|
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.MangaLoaderContext
|
||||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||||
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
|
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
|
||||||
|
|
||||||
@Broken
|
|
||||||
@MangaSourceParser("MANHWA_FREAK", "ManhwaFreak", "en")
|
@MangaSourceParser("MANHWA_FREAK", "ManhwaFreak", "en")
|
||||||
internal class ManhwaFreak(context: MangaLoaderContext) :
|
internal class ManhwaFreak(context: MangaLoaderContext) :
|
||||||
MangaReaderParser(context, MangaParserSource.MANHWA_FREAK, "manhwafreak.xyz", pageSize = 30, searchPageSize = 42)
|
MangaReaderParser(context, MangaParserSource.MANHWA_FREAK, "manhwafreak.xyz", pageSize = 30, searchPageSize = 42)
|
||||||
|
|||||||
@ -0,0 +1,12 @@
|
|||||||
|
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.site.mangareader.MangaReaderParser
|
||||||
|
|
||||||
|
@MangaSourceParser("LUNARHENTAI", "GloryScans", "fr")
|
||||||
|
internal class LunarHentai(context: MangaLoaderContext) :
|
||||||
|
MangaReaderParser(context, MangaParserSource.LUNARHENTAI, "gloryscans.fr", pageSize = 40, searchPageSize = 10) {
|
||||||
|
override val isTagsExclusionSupported = false
|
||||||
|
}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
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.site.mangareader.MangaReaderParser
|
||||||
|
|
||||||
|
@MangaSourceParser("PORNHWASCANS", "PornhwaScans", "fr")
|
||||||
|
internal class PornhwaScans(context: MangaLoaderContext) :
|
||||||
|
MangaReaderParser(context, MangaParserSource.PORNHWASCANS, "pornhwascans.fr", pageSize = 24, searchPageSize = 10) {
|
||||||
|
override val isTagsExclusionSupported = false
|
||||||
|
}
|
||||||
@ -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("MONZEEKOMIK", "MonzeeKomik", "id")
|
||||||
|
internal class MonzeeKomik(context: MangaLoaderContext) :
|
||||||
|
MangaReaderParser(context, MangaParserSource.MONZEEKOMIK, "www.monzeekomik.my.id", pageSize = 30, searchPageSize = 10) {
|
||||||
|
override val sourceLocale: Locale = Locale.ENGLISH
|
||||||
|
override val isTagsExclusionSupported = false
|
||||||
|
}
|
||||||
@ -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("TEMPESTSCANS", "TempestScans", "tr")
|
||||||
|
internal class TempestScans(context: MangaLoaderContext) :
|
||||||
|
MangaReaderParser(context, MangaParserSource.TEMPESTSCANS, "adumanga.com", pageSize = 20, searchPageSize = 10) {
|
||||||
|
override val isTagsExclusionSupported = false
|
||||||
|
}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
package org.koitharu.kotatsu.parsers.site.pizzareader.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.site.pizzareader.PizzaReaderParser
|
||||||
|
|
||||||
|
@MangaSourceParser("HASTATEAM_READER", "HastaTeamReader", "it")
|
||||||
|
internal class HastaTeamReader(context: MangaLoaderContext) :
|
||||||
|
PizzaReaderParser(context, MangaParserSource.HASTATEAM_READER, "reader.hastateam.com")
|
||||||
@ -1,73 +0,0 @@
|
|||||||
package org.koitharu.kotatsu.parsers.site.zeistmanga.id
|
|
||||||
|
|
||||||
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.model.MangaChapter
|
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
|
||||||
import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser
|
|
||||||
import org.koitharu.kotatsu.parsers.util.*
|
|
||||||
import org.koitharu.kotatsu.parsers.util.json.toJSONList
|
|
||||||
import java.text.SimpleDateFormat
|
|
||||||
|
|
||||||
@Broken
|
|
||||||
@MangaSourceParser("MONZEEKOMIK", "MonzeeKomik", "id")
|
|
||||||
internal class MonzeeKomik(context: MangaLoaderContext) :
|
|
||||||
ZeistMangaParser(context, MangaParserSource.MONZEEKOMIK, "www.monzeekomik.my.id") {
|
|
||||||
override val selectPage = "article#reader img"
|
|
||||||
|
|
||||||
override suspend fun loadChapters(mangaUrl: String, doc: Document): List<MangaChapter> {
|
|
||||||
|
|
||||||
|
|
||||||
val chapterRegex = """clwd\.run\('([^']+)'""".toRegex()
|
|
||||||
val scriptSelector = "#clwd > script"
|
|
||||||
val script = doc.selectFirstOrThrow(scriptSelector)
|
|
||||||
val feedFind = chapterRegex
|
|
||||||
.find(script.html())
|
|
||||||
?.groupValues?.get(1)
|
|
||||||
?: throw Exception("Failed to find chapter feed")
|
|
||||||
|
|
||||||
val feedClean = feedFind.removeSuffix(")") // clean
|
|
||||||
|
|
||||||
val feed = if (feedClean == "Reincarnation Colosseum") // hot fix
|
|
||||||
{
|
|
||||||
"I Have 90 Billion Licking Gold"
|
|
||||||
} else {
|
|
||||||
feedClean
|
|
||||||
}
|
|
||||||
|
|
||||||
val url = buildString {
|
|
||||||
append("https://")
|
|
||||||
append(domain)
|
|
||||||
append("/feeds/posts/default/-/")
|
|
||||||
append(feed)
|
|
||||||
append("?alt=json&orderby=published&max-results=9999")
|
|
||||||
}
|
|
||||||
val json =
|
|
||||||
webClient.httpGet(url).parseJson().getJSONObject("feed").getJSONArray("entry").toJSONList().reversed()
|
|
||||||
val dateFormat = SimpleDateFormat(datePattern, sourceLocale)
|
|
||||||
return json.mapIndexedNotNull { i, j ->
|
|
||||||
val name = j.getJSONObject("title").getString("\$t")
|
|
||||||
val href =
|
|
||||||
j.getJSONArray("link").toJSONList().first { it.getString("rel") == "alternate" }.getString("href")
|
|
||||||
val dateText = j.getJSONObject("published").getString("\$t").substringBefore("T")
|
|
||||||
val slug = mangaUrl.substringAfterLast('/')
|
|
||||||
val slugChapter = href.substringAfterLast('/')
|
|
||||||
if (slug == slugChapter) {
|
|
||||||
return@mapIndexedNotNull null
|
|
||||||
}
|
|
||||||
MangaChapter(
|
|
||||||
id = generateUid(href),
|
|
||||||
url = href,
|
|
||||||
name = name,
|
|
||||||
number = i + 1f,
|
|
||||||
volume = 0,
|
|
||||||
branch = null,
|
|
||||||
uploadDate = dateFormat.tryParse(dateText),
|
|
||||||
scanlator = null,
|
|
||||||
source = source,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue