add 10 new source
This commit is contained in:
@@ -123,6 +123,7 @@ internal abstract class MadaraParser(
|
||||
"Terminé ⚫",
|
||||
"Tamamlandı",
|
||||
"Đã hoàn thành",
|
||||
"Hoàn Thành",
|
||||
"مكتملة",
|
||||
"Завершено",
|
||||
"Finished",
|
||||
@@ -189,7 +190,7 @@ internal abstract class MadaraParser(
|
||||
"Devam ediyor",
|
||||
-> MangaState.ONGOING
|
||||
|
||||
"Completed", "Completo", "Complété", "Fini", "Achevé", "Terminé", "Terminé ⚫", "Tamamlandı", "Đã hoàn thành", "مكتملة",
|
||||
"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
|
||||
|
||||
@@ -373,6 +374,10 @@ internal abstract class MadaraParser(
|
||||
date.endsWith(" önce", ignoreCase = true) -> {
|
||||
parseRelativeDate(date)
|
||||
}
|
||||
// Handle translated 'ago' in Viêt Nam.
|
||||
date.endsWith(" trước", ignoreCase = true) -> {
|
||||
parseRelativeDate(date)
|
||||
}
|
||||
// Handle translated 'ago' in french.
|
||||
date.startsWith("il y a", ignoreCase = true) -> {
|
||||
parseRelativeDate(date)
|
||||
@@ -448,7 +453,7 @@ internal abstract class MadaraParser(
|
||||
)
|
||||
}.timeInMillis
|
||||
|
||||
WordSet("menit", "dakika", "min", "minute", "minuto", "mins").anyWordIn(date) -> cal.apply {
|
||||
WordSet("menit", "dakika", "min", "minute", "minuto", "mins", "phút").anyWordIn(date) -> cal.apply {
|
||||
add(
|
||||
Calendar.MINUTE,
|
||||
-number,
|
||||
|
||||
@@ -10,6 +10,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
internal class ColoredManga(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.COLORED_MANGA, "coloredmanga.com") {
|
||||
|
||||
override val tagPrefix = "manga-tag"
|
||||
override val tagPrefix = "manga-tag/"
|
||||
override val datePattern = "dd-MMM"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.en
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("HMANHWA", "HManhwa", "en")
|
||||
internal class HManhwa(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.HMANHWA, "hmanhwa.com") {
|
||||
|
||||
override val tagPrefix = "manhwa-genre/"
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val datePattern = "dd MMM"
|
||||
override val postreq = true
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("HENTAIMANGA", "Hentai Manga", "en")
|
||||
internal class HentaiManga(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.HENTAIMANGA, "hentaimanga.me", 36) {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val isNsfwSource = true
|
||||
override val postreq = true
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("HENTAIWEBTOON", "Hentai Webtoon", "en")
|
||||
internal class HentaiWebtoon(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.HENTAIWEBTOON, "hentaiwebtoon.com") {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val isNsfwSource = true
|
||||
override val postreq = true
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("HENTAIXCOMIC", "Hentai x Comic", "en")
|
||||
internal class HentaixComic(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.HENTAIXCOMIC, "hentaixcomic.com", 16) {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val isNsfwSource = true
|
||||
override val postreq = true
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("HENTAIXYURI", "Hentai x Yuri", "en")
|
||||
internal class HentaixYuri(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.HENTAIXYURI, "hentaixyuri.com", 16) {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val isNsfwSource = true
|
||||
override val postreq = true
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.en
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("HSCANS", "Hscans", "en")
|
||||
internal class Hscans(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.HSCANS, "hscans.com", 10) {
|
||||
|
||||
override val tagPrefix = "manga-tag/"
|
||||
override val datePattern = "dd/MM/yyyy"
|
||||
|
||||
}
|
||||
@@ -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.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("HERENSCAN", "Heren Scan", "es")
|
||||
internal class HerenScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.HERENSCAN, "herenscan.com") {
|
||||
|
||||
override val datePattern = "d 'de' MMMMM 'de' yyyy"
|
||||
override val sourceLocale: Locale = Locale("es")
|
||||
}
|
||||
@@ -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.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("MANGAREADERPRO", "Manga Reader Pro", "es")
|
||||
internal class MangaReaderpro(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MANGAREADERPRO, "mangareaderpro.com", 10) {
|
||||
|
||||
override val datePattern = "MM/dd/yyyy"
|
||||
}
|
||||
@@ -12,7 +12,7 @@ import java.util.Locale
|
||||
internal class Anikiga(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.ANIKIGA, "anikiga.com") {
|
||||
|
||||
override val tagPrefix = "manga-tur"
|
||||
override val tagPrefix = "manga-tur/"
|
||||
override val datePattern = "d MMMM yyyy"
|
||||
override val sourceLocale: Locale = Locale("tr")
|
||||
override val postreq = true
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
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.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
|
||||
@MangaSourceParser("HAYALISTIC", "Hayalistic", "vi")
|
||||
internal class Hayalistic(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.HAYALISTIC, "hayalistic.com", 24) {
|
||||
|
||||
override val datePattern = "dd/MM/yyyy"
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
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.exception.ParseException
|
||||
import org.koitharu.kotatsu.parsers.model.MangaChapter
|
||||
import org.koitharu.kotatsu.parsers.model.MangaPage
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import org.koitharu.kotatsu.parsers.util.domain
|
||||
import org.koitharu.kotatsu.parsers.util.generateUid
|
||||
import org.koitharu.kotatsu.parsers.util.parseFailed
|
||||
import org.koitharu.kotatsu.parsers.util.parseHtml
|
||||
import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl
|
||||
import org.koitharu.kotatsu.parsers.util.toRelativeUrl
|
||||
|
||||
|
||||
@MangaSourceParser("HENTAICUBE", "Hentai Cube", "vi")
|
||||
internal class HentaiCube(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.HENTAICUBE, "hentaicube.net") {
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val datePattern = "dd/MM/yyyy"
|
||||
override val tagPrefix = "the-loai/"
|
||||
override val postreq = true
|
||||
|
||||
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> {
|
||||
val fullUrl = chapter.url.toAbsoluteUrl(domain)
|
||||
val doc = webClient.httpGet(fullUrl).parseHtml()
|
||||
val root = doc.body().selectFirst("div.main-col-inner")?.selectFirst("div.reading-content")
|
||||
?: throw ParseException("Root not found", fullUrl)
|
||||
return root.select("img").map { img ->
|
||||
val url = img.src()?.toRelativeUrl(domain) ?: img.parseFailed("Image src not found")
|
||||
MangaPage(
|
||||
id = generateUid(url),
|
||||
url = url,
|
||||
preview = null,
|
||||
source = source,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user