Compare commits
67 Commits
fe5534b006
...
7f98a7fb5c
| Author | SHA1 | Date |
|---|---|---|
|
|
7f98a7fb5c | 6 months ago |
|
|
a39721eaf7 | 6 months ago |
|
|
65c61c0c01 | 7 months ago |
|
|
ac977a6cbb | 7 months ago |
|
|
8908031eee | 7 months ago |
|
|
4141a8f429 | 7 months ago |
|
|
ad7f1eddca | 7 months ago |
|
|
472ddab27c | 7 months ago |
|
|
560cf63a5e | 7 months ago |
|
|
d4e1acd515 | 7 months ago |
|
|
f66b97edc1 | 7 months ago |
|
|
a084909507 | 7 months ago |
|
|
58357a3745 | 7 months ago |
|
|
8a6a529023 | 7 months ago |
|
|
1b9ff47ab3 | 7 months ago |
|
|
229f321299 | 7 months ago |
|
|
a5233ede48 | 7 months ago |
|
|
d9025dbf81 | 7 months ago |
|
|
2cc0af17d5 | 7 months ago |
|
|
a3f384e3b3 | 7 months ago |
|
|
5882a5d54d | 7 months ago |
|
|
f62809407b | 7 months ago |
|
|
14c0eaf273 | 7 months ago |
|
|
0817a82f36 | 7 months ago |
|
|
727e326379 | 7 months ago |
|
|
ccaf52b74e | 7 months ago |
|
|
fc988cdd1e | 7 months ago |
|
|
cb2e9841ae | 7 months ago |
|
|
775063d36f | 7 months ago |
|
|
86b8642456 | 7 months ago |
|
|
185d9b6e6e | 7 months ago |
|
|
e3495fc41f | 7 months ago |
|
|
d8e47b2b52 | 7 months ago |
|
|
be64bf2328 | 7 months ago |
|
|
d85bb64b1c | 7 months ago |
|
|
de2289eb75 | 7 months ago |
|
|
7cb069d108 | 7 months ago |
|
|
8a18df148d | 7 months ago |
|
|
9007852d31 | 7 months ago |
|
|
60e451303e | 7 months ago |
|
|
170a11ae26 | 7 months ago |
|
|
642ac08338 | 7 months ago |
|
|
ff256cb3ec | 7 months ago |
|
|
08d46988a3 | 7 months ago |
|
|
a3abc81dfc | 7 months ago |
|
|
41a4c90e75 | 7 months ago |
|
|
23fdfbbef9 | 8 months ago |
|
|
a4f41e41f8 | 8 months ago |
|
|
db586045d7 | 8 months ago |
|
|
e636eda840 | 8 months ago |
|
|
406992a6c9 | 8 months ago |
|
|
30f97c5c82 | 8 months ago |
|
|
b9ecdb2db6 | 8 months ago |
|
|
e044463f91 | 8 months ago |
|
|
a93c760133 | 8 months ago |
|
|
f2b6cab251 | 8 months ago |
|
|
07225568ee | 8 months ago |
|
|
860dd32a53 | 8 months ago |
|
|
74f5891ffe | 8 months ago |
|
|
7bae2602c7 | 8 months ago |
|
|
4c697b6406 | 8 months ago |
|
|
b61698d405 | 8 months ago |
|
|
260e5acd5c | 8 months ago |
|
|
e599f431c5 | 8 months ago |
|
|
0ec4fe42c1 | 8 months ago |
|
|
c9e4c7273e | 8 months ago |
|
|
3e2515ac6a | 8 months ago |
@ -1 +1 @@
|
||||
total: 1251
|
||||
total: 1255
|
||||
Binary file not shown.
@ -1,6 +1,7 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionSha256Sum=bd71102213493060956ec229d946beee57158dbd89d0e62b91bca0fa2c5f3531
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
dependencyResolutionManagement {
|
||||
versionCatalogs {
|
||||
create("libs") {
|
||||
from(files("../gradle/libs.versions.toml"))
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,9 +1,15 @@
|
||||
# Following this blog:
|
||||
## Following this blog:
|
||||
# https://proandroiddev.com/how-we-reduced-our-gradle-build-times-by-over-80-51f2b6d6b05b
|
||||
kotlin.code.style=official
|
||||
systemProp.org.gradle.unsafe.configuration-cache=false
|
||||
org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=4096m -XX:+UseParallelGC
|
||||
org.gradle.vfs.watch=true
|
||||
org.gradle.configureondemand=true
|
||||
org.gradle.parallel=true
|
||||
org.gradle.caching=true
|
||||
org.gradle.unsafe.configuration-cache=true
|
||||
org.gradle.configuration-cache.problems=warn
|
||||
|
||||
## Use these flags on local machine for faster build time
|
||||
# org.gradle.caching=true
|
||||
# org.gradle.configuration-cache=true
|
||||
# org.gradle.vfs.watch=true
|
||||
# org.gradle.parallel=true
|
||||
# org.gradle.workers.max=8
|
||||
# org.gradle.configuration-cache.max-problems=8
|
||||
|
||||
Binary file not shown.
@ -1,7 +1,7 @@
|
||||
#Wed Aug 27 01:56:37 ICT 2025
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionSha256Sum=bd71102213493060956ec229d946beee57158dbd89d0e62b91bca0fa2c5f3531
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
@ -0,0 +1,2 @@
|
||||
jdk:
|
||||
- openjdk17
|
||||
@ -1,11 +1,12 @@
|
||||
package org.koitharu.kotatsu.parsers.site.en.MTL
|
||||
package org.koitharu.kotatsu.parsers.site.en.mtl
|
||||
|
||||
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.model.ContentType
|
||||
import org.koitharu.kotatsu.parsers.site.en.MTL.MTLParser
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("SNOWMTL", "SnowMTL", "en", type = ContentType.OTHER)
|
||||
internal class SnowMTL(context: MangaLoaderContext):
|
||||
MTLParser(context, source = MangaParserSource.SNOWMTL, "snowmtl.ru")
|
||||
@ -1,11 +1,12 @@
|
||||
package org.koitharu.kotatsu.parsers.site.en.MTL
|
||||
package org.koitharu.kotatsu.parsers.site.en.mtl
|
||||
|
||||
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.model.ContentType
|
||||
import org.koitharu.kotatsu.parsers.site.en.MTL.MTLParser
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("SOLARMTL", "SolarMTL", "en", type = ContentType.MANGA)
|
||||
internal class SolarMTL(context: MangaLoaderContext):
|
||||
MTLParser(context, source = MangaParserSource.SOLARMTL, "solarmtl.com")
|
||||
@ -0,0 +1,230 @@
|
||||
package org.koitharu.kotatsu.parsers.site.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.Manga
|
||||
import org.koitharu.kotatsu.parsers.model.MangaChapter
|
||||
import org.koitharu.kotatsu.parsers.model.MangaListFilter
|
||||
import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities
|
||||
import org.koitharu.kotatsu.parsers.model.MangaListFilterOptions
|
||||
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.RATING_UNKNOWN
|
||||
import org.koitharu.kotatsu.parsers.model.SortOrder
|
||||
import org.koitharu.kotatsu.parsers.util.generateUid
|
||||
import org.koitharu.kotatsu.parsers.util.parseHtml
|
||||
import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl
|
||||
import org.koitharu.kotatsu.parsers.config.ConfigKey
|
||||
import org.koitharu.kotatsu.parsers.core.SinglePageMangaParser
|
||||
import java.util.EnumSet
|
||||
import java.util.Locale
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("MANGAMOINS", "MangaMoins", "fr")
|
||||
internal class MangaMoins(context: MangaLoaderContext) :
|
||||
SinglePageMangaParser(context, MangaParserSource.MANGAMOINS) {
|
||||
|
||||
override val configKeyDomain = ConfigKey.Domain("mangamoins.com")
|
||||
override val availableSortOrders: Set<SortOrder> = EnumSet.of(SortOrder.UPDATED)
|
||||
override val filterCapabilities = MangaListFilterCapabilities()
|
||||
|
||||
override suspend fun getFilterOptions(): MangaListFilterOptions = MangaListFilterOptions()
|
||||
|
||||
override suspend fun getList(order: SortOrder, filter: MangaListFilter): List<Manga> {
|
||||
return listOf(
|
||||
Manga(
|
||||
id = generateUid("OP"),
|
||||
title = "One Piece",
|
||||
altTitles = emptySet(),
|
||||
url = "OP",
|
||||
publicUrl = "https://mangamoins.com/",
|
||||
rating = RATING_UNKNOWN,
|
||||
contentRating = null,
|
||||
coverUrl = "https://mangamoins.com/files/scans/OP1161/thumbnail.png",
|
||||
tags = emptySet(),
|
||||
state = MangaState.ONGOING,
|
||||
authors = setOf("Eiichiro Oda"),
|
||||
source = source,
|
||||
),
|
||||
Manga(
|
||||
id = generateUid("LCDL"),
|
||||
title = "Les Carnets de l'Apothicaire",
|
||||
altTitles = emptySet(),
|
||||
url = "LCDL",
|
||||
publicUrl = "https://mangamoins.com/",
|
||||
rating = RATING_UNKNOWN,
|
||||
contentRating = null,
|
||||
coverUrl = "https://mangamoins.com/files/scans/LCDL76.2/thumbnail.png",
|
||||
tags = emptySet(),
|
||||
state = MangaState.ONGOING,
|
||||
authors = setOf("Itsuki Nanao", "Nekokurage"),
|
||||
source = source,
|
||||
),
|
||||
Manga(
|
||||
id = generateUid("JKM"),
|
||||
title = "Jujutsu Kaisen Modulo",
|
||||
altTitles = emptySet(),
|
||||
url = "JKM",
|
||||
publicUrl = "https://mangamoins.com/",
|
||||
rating = RATING_UNKNOWN,
|
||||
contentRating = null,
|
||||
coverUrl = "https://mangamoins.com/files/scans/JKM1/thumbnail.png",
|
||||
tags = emptySet(),
|
||||
state = MangaState.ONGOING,
|
||||
authors = setOf("Gege Akutami", "Yuji Iwasaki"),
|
||||
source = source,
|
||||
),
|
||||
Manga(
|
||||
id = generateUid("OPC"),
|
||||
title = "One Piece Colo",
|
||||
altTitles = emptySet(),
|
||||
url = "OPC",
|
||||
publicUrl = "https://mangamoins.com/",
|
||||
rating = RATING_UNKNOWN,
|
||||
contentRating = null,
|
||||
coverUrl = "https://mangamoins.com/files/scans/OPC1160/thumbnail.png",
|
||||
tags = emptySet(),
|
||||
state = MangaState.ONGOING,
|
||||
authors = setOf("Eiichiro Oda"),
|
||||
source = source,
|
||||
),
|
||||
Manga(
|
||||
id = generateUid("LDS"),
|
||||
title = "L'Atelier des Sorciers",
|
||||
altTitles = emptySet(),
|
||||
url = "LDS",
|
||||
publicUrl = "https://mangamoins.com/",
|
||||
rating = RATING_UNKNOWN,
|
||||
contentRating = null,
|
||||
coverUrl = "https://sceneario.com/wp-content/uploads/2023/05/9782811641344-1.jpg",
|
||||
tags = emptySet(),
|
||||
state = MangaState.ONGOING,
|
||||
authors = setOf("Kamome Shirahama"),
|
||||
source = source,
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override suspend fun getDetails(manga: Manga): Manga {
|
||||
val doc = webClient.httpGet("https://$domain").parseHtml()
|
||||
val prefix = manga.url
|
||||
val latestSiteChapterNumber = doc.select("div.sortie a").mapNotNull { a ->
|
||||
val href = a.attr("href")
|
||||
if (href.startsWith("?scan=$prefix")) {
|
||||
href.substringAfter(prefix).toFloatOrNull()
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}.maxOrNull()
|
||||
|
||||
if (latestSiteChapterNumber == null) return manga
|
||||
|
||||
val cachedChapters = manga.chapters
|
||||
val lastKnownChapterNumber = cachedChapters?.maxByOrNull { it.number }?.number
|
||||
|
||||
if (lastKnownChapterNumber != null && cachedChapters.isNotEmpty()) {
|
||||
// INCREMENTAL SCAN (CACHE EXISTS)
|
||||
if (latestSiteChapterNumber <= lastKnownChapterNumber) {
|
||||
return manga.copy(chapters = cachedChapters.sortedBy { it.number })
|
||||
}
|
||||
|
||||
val newChapters = mutableListOf<MangaChapter>()
|
||||
var currentChapterInt = latestSiteChapterNumber.toInt()
|
||||
|
||||
while (currentChapterInt > lastKnownChapterNumber.toInt()) {
|
||||
val chaptersForGroup = doChecks(prefix, currentChapterInt)
|
||||
newChapters.addAll(chaptersForGroup)
|
||||
currentChapterInt--
|
||||
}
|
||||
|
||||
val combinedChapters = (cachedChapters + newChapters).distinctBy { it.number }
|
||||
return manga.copy(chapters = combinedChapters.sortedBy { it.number })
|
||||
|
||||
} else {
|
||||
// FULL SCAN (NO CACHE)
|
||||
val allChapters = mutableListOf<MangaChapter>()
|
||||
var currentChapterInt = latestSiteChapterNumber.toInt()
|
||||
var misses = 0
|
||||
|
||||
while (currentChapterInt >= 1 && misses < 4) {
|
||||
val chaptersForGroup = doChecks(prefix, currentChapterInt)
|
||||
if (chaptersForGroup.isNotEmpty()) {
|
||||
misses = 0
|
||||
allChapters.addAll(chaptersForGroup)
|
||||
} else {
|
||||
misses++
|
||||
}
|
||||
currentChapterInt--
|
||||
}
|
||||
return manga.copy(chapters = allChapters.sortedBy { it.number })
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun doChecks(prefix: String, chapterInt: Int): List<MangaChapter> {
|
||||
val foundChapters = mutableListOf<MangaChapter>()
|
||||
|
||||
// Check for integer chapter
|
||||
val integerChapter = checkChapter(prefix, chapterInt.toString(), chapterInt.toFloat())
|
||||
if (integerChapter != null) {
|
||||
foundChapters.add(integerChapter)
|
||||
}
|
||||
|
||||
// Conditionally and sequentially check for decimal chapters
|
||||
if (prefix == "LCDL") {
|
||||
// Start from 2 because .1 never exists
|
||||
for (i in 2..9) {
|
||||
val decimalNum = chapterInt + (i / 10.0f)
|
||||
val decimalNumStr = String.format(Locale.US, "%.1f", decimalNum)
|
||||
val decimalChapter = checkChapter(prefix, decimalNumStr, decimalNum)
|
||||
if (decimalChapter != null) {
|
||||
foundChapters.add(decimalChapter)
|
||||
} else {
|
||||
break // Stop if there's a gap
|
||||
}
|
||||
}
|
||||
}
|
||||
return foundChapters
|
||||
}
|
||||
|
||||
private suspend fun checkChapter(prefix: String, chapterNumStr: String, chapterNumFloat: Float): MangaChapter? {
|
||||
val thumbUrl = "https://mangamoins.com/files/scans/$prefix$chapterNumStr/thumbnail.png"
|
||||
return try {
|
||||
val response = webClient.httpHead(thumbUrl)
|
||||
if (response.isSuccessful) {
|
||||
response.close()
|
||||
val chapterUrl = "https://mangamoins.com/?scan=$prefix$chapterNumStr"
|
||||
MangaChapter(
|
||||
id = generateUid(chapterUrl),
|
||||
title = null,
|
||||
number = chapterNumFloat,
|
||||
volume = 0,
|
||||
url = chapterUrl,
|
||||
scanlator = null,
|
||||
uploadDate = 0,
|
||||
branch = null,
|
||||
source = source
|
||||
)
|
||||
} else {
|
||||
response.close()
|
||||
null
|
||||
}
|
||||
} catch (_: Exception) {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> {
|
||||
val doc = webClient.httpGet(chapter.url).parseHtml()
|
||||
return doc.select("link[rel=preload][as=image]").map { element ->
|
||||
val url = element.attr("href").toAbsoluteUrl(domain)
|
||||
MangaPage(
|
||||
id = generateUid(url),
|
||||
url = url,
|
||||
preview = null,
|
||||
source = source
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,15 +1,90 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.en
|
||||
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.Response
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.config.ConfigKey
|
||||
import org.koitharu.kotatsu.parsers.exception.ParseException
|
||||
import org.koitharu.kotatsu.parsers.model.ContentType
|
||||
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.network.UserAgents
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import org.koitharu.kotatsu.parsers.util.*
|
||||
|
||||
private const val F_URL = "fullUrl="
|
||||
|
||||
@MangaSourceParser("MADARADEX", "MadaraDex", "en", ContentType.HENTAI)
|
||||
internal class MadaraDex(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.MADARADEX, "madaradex.org") {
|
||||
override val listUrl = "title/"
|
||||
override val tagPrefix = "genre/"
|
||||
override val postReq = true
|
||||
MadaraParser(context, MangaParserSource.MADARADEX, "madaradex.org") {
|
||||
|
||||
init {
|
||||
context.cookieJar.insertCookies(domain, "wpmanga-adault=1")
|
||||
}
|
||||
|
||||
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
|
||||
super.onCreateConfig(keys)
|
||||
keys.remove(userAgentKey)
|
||||
}
|
||||
|
||||
override fun getRequestHeaders() = super.getRequestHeaders().newBuilder()
|
||||
.set("User-Agent", UserAgents.CHROME_DESKTOP)
|
||||
.build()
|
||||
|
||||
override val authUrl: String
|
||||
get() = "https://${domain}"
|
||||
|
||||
override suspend fun isAuthorized(): Boolean {
|
||||
return context.cookieJar.getCookies(domain).any {
|
||||
it.name.contains("cm_uaid")
|
||||
}
|
||||
}
|
||||
|
||||
override val listUrl = "title/"
|
||||
override val tagPrefix = "genre/"
|
||||
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(selectBodyPage)
|
||||
?: throw ParseException("No image found, try to log in", fullUrl)
|
||||
|
||||
return root.select(selectPage).flatMap { div ->
|
||||
div.selectOrThrow("img").map { img ->
|
||||
val fragUrl = img.requireSrc().toRelativeUrl(domain).toHttpUrl().newBuilder()
|
||||
.fragment(F_URL + fullUrl)
|
||||
.build()
|
||||
val cleanUrl = fragUrl.newBuilder().fragment(null).build()
|
||||
MangaPage(
|
||||
id = generateUid(cleanUrl.toString()),
|
||||
url = fragUrl.toString(),
|
||||
preview = null,
|
||||
source = source,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun intercept(chain: Interceptor.Chain): Response {
|
||||
val request = chain.request()
|
||||
val url = request.url
|
||||
val fullUrl = url.fragment?.substringAfter(F_URL, "")
|
||||
return if (!fullUrl.isNullOrEmpty()) {
|
||||
copyCookies()
|
||||
val cleanUrl = url.newBuilder().fragment(null).toString()
|
||||
val newReq = request.newBuilder()
|
||||
.header("Referer", fullUrl)
|
||||
.url(cleanUrl)
|
||||
.build()
|
||||
chain.proceed(newReq)
|
||||
} else {
|
||||
super.intercept(chain)
|
||||
}
|
||||
}
|
||||
|
||||
private fun copyCookies() = context.cookieJar.copyCookies(domain, "cdn.$domain")
|
||||
}
|
||||
|
||||
@ -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("DRAGONTRANSLATIONORG", "DragonTranslation.org", "es")
|
||||
internal class DragonTranslationOrg(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.DRAGONTRANSLATIONORG, "dragontranslation.org", 16) {
|
||||
override val datePattern = "dd/MM/yyyy"
|
||||
}
|
||||
@ -1,14 +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("LEGENDSCANLATIONS", "LegendScanlations", "es")
|
||||
internal class LegendScanlations(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.LEGENDSCANLATIONS, "legendscanlations.com", 10) {
|
||||
MadaraParser(context, MangaParserSource.LEGENDSCANLATIONS, "escaneodeleyendas.com", 10) {
|
||||
override val datePattern = "dd/MM/yyyy"
|
||||
}
|
||||
|
||||
@ -1,15 +1,13 @@
|
||||
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("MANTRAZSCAN", "MantrazScan", "es")
|
||||
internal class MantrazScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.MANTRAZSCAN, "artessupremas.com") {
|
||||
MadaraParser(context, MangaParserSource.MANTRAZSCAN, "mantrazscan.org") {
|
||||
override val datePattern = "dd/MM/yyyy"
|
||||
override val tagPrefix = "generos-de-manga/"
|
||||
}
|
||||
|
||||
@ -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("TRUYENTRANHFULL", "Truyện Tranh Full", "vi")
|
||||
internal class TruyenTranhFull(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.TRUYENTRANHFULL, "truyentranhfull.net", 20) {
|
||||
override val listUrl = "truyen-tranh/"
|
||||
override val tagPrefix = "the-loai/"
|
||||
override val datePattern = "dd/MM/yyyy"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue