Add : MangaTx.to - AlterkaiScans - StoneScape

Kalango - SolooScan - ErosScans - SolooScan
RaysScan - TemakiMangas - ZinChanManga
Urls Changes
Add volume on some parser
Fix ThunderScans close #818
NinjaScan close #753
Add Ngomik close #761
Remove dulicate source paragonscans
Fix LuminousScans close #578
Fix YugenApp close #854
Fix KaiScans close #614
Add PeachBl Close #884
Fix GalinhaSamurai close #835
Fix RocksManga close #827
Fix CrystalComics close #792
master
devi 2 years ago
parent ad7c953d29
commit cd468df9ad

@ -147,7 +147,8 @@ class TuMangaOnlineParser(context: MangaLoaderContext) : PagedMangaParser(
return MangaChapter(
id = generateUid(href),
name = "One Shot",
number = 1,
number = 1f,
volume = 0,
url = href,
scanlator = element.select("div.col-md-6.text-truncate").text(),
branch = null,
@ -163,7 +164,8 @@ class TuMangaOnlineParser(context: MangaLoaderContext) : PagedMangaParser(
return MangaChapter(
id = generateUid(href),
name = chName,
number = number + 1,
number = number + 1f,
volume = 0,
url = href,
scanlator = element.select("div.col-md-6.text-truncate").text(),
branch = null,

@ -228,7 +228,8 @@ internal class BentomangaParser(context: MangaLoaderContext) : PagedMangaParser(
MangaChapter(
id = generateUid(href),
name = if (name != null && name != title) "$title: $name" else title,
number = href.substringAfterLast('/').toIntOrNull() ?: 0,
number = href.substringAfterLast('/').toFloatOrNull() ?: 0f,
volume = 0,
url = href,
scanlator = div.selectFirst(".team_link-name")?.textOrNull(),
uploadDate = div.selectFirst(".component-chapter-date")

@ -158,7 +158,8 @@ internal abstract class GalleryAdultsParser(
MangaChapter(
id = manga.id,
name = manga.title,
number = 1,
number = 1f,
volume = 0,
url = urlChapters,
scanlator = null,
uploadDate = 0,

@ -131,7 +131,8 @@ internal class HentaiEra(context: MangaLoaderContext) :
MangaChapter(
id = manga.id,
name = manga.title,
number = 1,
number = 1f,
volume = 0,
url = urlChapters,
scanlator = null,
uploadDate = 0,

@ -115,7 +115,8 @@ internal abstract class GattsuParser(
MangaChapter(
id = manga.id,
name = manga.title,
number = 1,
number = 1f,
volume = 0,
url = urlChapter,
scanlator = null,
uploadDate = 0,

@ -91,7 +91,8 @@ internal abstract class GuyaParser(
MangaChapter(
id = generateUid(url),
name = chapter.getString("title"),
number = i,
number = i.toFloat(),
volume = 0,
url = url,
scanlator = null,
uploadDate = 0,

@ -126,7 +126,8 @@ class DoujinDesuParser(context: MangaLoaderContext) : PagedMangaParser(context,
MangaChapter(
id = generateUid(url),
name = titleTag.text(),
number = index + 1,
number = index + 1f,
volume = 0,
url = url,
scanlator = null,
uploadDate = chapterDateFormat.tryParse(element.select(".epsleft > .date").text()),

@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
@MangaSourceParser("MANGAWORLD", "MangaWorld", "it")
internal class MangaWorld(
context: MangaLoaderContext,
) : MangaWorldParser(context, MangaSource.MANGAWORLD,"mangaworld.ac")
) : MangaWorldParser(context, MangaSource.MANGAWORLD, "mangaworld.ac")

@ -13,17 +13,24 @@ abstract class MangaWorldParser(
context: MangaLoaderContext,
source: MangaSource,
domain: String,
pageSize: Int = 16
pageSize: Int = 16,
) : PagedMangaParser(context, source, pageSize) {
override val availableSortOrders: Set<SortOrder> =
EnumSet.of(SortOrder.POPULARITY, SortOrder.ALPHABETICAL, SortOrder.NEWEST, SortOrder.ALPHABETICAL_DESC, SortOrder.UPDATED)
EnumSet.of(
SortOrder.POPULARITY,
SortOrder.ALPHABETICAL,
SortOrder.NEWEST,
SortOrder.ALPHABETICAL_DESC,
SortOrder.UPDATED,
)
override val defaultSortOrder: SortOrder
get() = SortOrder.ALPHABETICAL
override val configKeyDomain = ConfigKey.Domain(domain)
override val availableStates: Set<MangaState> = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED, MangaState.ABANDONED, MangaState.PAUSED)
override val availableStates: Set<MangaState> =
EnumSet.of(MangaState.ONGOING, MangaState.FINISHED, MangaState.ABANDONED, MangaState.PAUSED)
override val isMultipleTagsSupported = true
@ -43,7 +50,9 @@ abstract class MangaWorldParser(
}
is MangaListFilter.Advanced -> {
if(filter.tags.isEmpty() && filter.states.isEmpty() && filter.sortOrder == SortOrder.UPDATED) return parseMangaList(webClient.httpGet("https://$domain/?page=$page").parseHtml())
if (filter.tags.isEmpty() && filter.states.isEmpty() && filter.sortOrder == SortOrder.UPDATED) return parseMangaList(
webClient.httpGet("https://$domain/?page=$page").parseHtml(),
)
if (filter.tags.isNotEmpty()) {
filter.tags.joinTo(this, "&") { it.key.substringAfter("archive?") }

@ -219,7 +219,8 @@ internal abstract class LikeMangaParser(
MangaChapter(
id = generateUid(url),
name = li.selectFirstOrThrow("a").text(),
number = chapNum.toInt(),
number = chapNum.toFloat(),
volume = 0,
url = url,
scanlator = null,
uploadDate = parseChapterDate(

@ -1,10 +1,49 @@
package org.koitharu.kotatsu.parsers.site.madara.ar
import org.jsoup.nodes.Document
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaChapter
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrlOrNull
import org.koitharu.kotatsu.parsers.util.generateUid
import org.koitharu.kotatsu.parsers.util.mapChapters
import org.koitharu.kotatsu.parsers.util.parseFailed
import java.text.SimpleDateFormat
@MangaSourceParser("ROCKSMANGA", "RocksManga", "ar")
internal class RocksManga(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.ROCKSMANGA, "rocks-manga.com")
MadaraParser(context, MangaSource.ROCKSMANGA, "rocks-manga.com") {
override val selectChapter = "ul#chapter-list li.chapter-item"
override val datePattern = "d MMMM yyyy"
override val selectDate = ".ch-post-time"
override val selectBodyPage = "div.reading-content"
override val selectPage = "img"
override val selectDesc = ".story"
override suspend fun loadChapters(mangaUrl: String, document: Document): List<MangaChapter> {
val dateFormat = SimpleDateFormat(datePattern, sourceLocale)
return document.select(selectChapter).mapChapters(reversed = true) { i, li ->
val a = li.selectFirst("a")
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(".ch-title")?.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,
)
}
}
}

@ -5,8 +5,8 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("PARAGONSCANS", "ParagonScans", "en")
internal class Paragonscans(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.PARAGONSCANS, "paragonscans.com", pageSize = 50) {
override val datePattern = "MM/dd/yyyy"
@MangaSourceParser("MANGATX_TO", "MangaTx.to", "en")
internal class MangaTxTo(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANGATX_TO, "mangatx.to", 10) {
override val tagPrefix = "manhua-genre/"
}

@ -0,0 +1,13 @@
package org.koitharu.kotatsu.parsers.site.madara.en
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("STONESCAPE", "StoneScape", "en")
internal class StoneScape(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.STONESCAPE, "stonescape.xyz", 10) {
override val listUrl = "series/"
override val tagPrefix = "series-genre/"
}

@ -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.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("TCBSCANSMANGA", "TcbScansManga", "en")
internal class TcbScansManga(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.TCBSCANSMANGA, "tcbscans-manga.com", 10) {
override val selectPage = "img"
}

@ -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.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("ZINCHANMANGA", "ZinChanManga", "en", ContentType.HENTAI)
internal class ZinChanManga(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.ZINCHANMANGA, "zinchanmanga.com", 10)

@ -5,6 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("CRYSTALSCAN", "CrystalScan", "pt")
@MangaSourceParser("CRYSTALSCAN", "CrystalComics", "pt")
internal class CrystalScan(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.CRYSTALSCAN, "crystalscan.net")
MadaraParser(context, MangaSource.CRYSTALSCAN, "crystalcomics.com")

@ -5,8 +5,9 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("GALINHASAMURAI", "Galinha Samurai", "pt")
@MangaSourceParser("GALINHASAMURAI", "GalinhaSamurai", "pt")
internal class GalinhaSamurai(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.GALINHASAMURAI, "galinhasamurai.com") {
override val datePattern = "dd/MM/yyyy"
override val withoutAjax = true
}

@ -5,6 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("KAKUSEIPROJECT", "Kakusei Project", "pt")
@MangaSourceParser("KAKUSEIPROJECT", "KakuseiProject", "pt")
internal class KakuseiProject(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.KAKUSEIPROJECT, "kakuseiproject.com", 10)

@ -0,0 +1,14 @@
package org.koitharu.kotatsu.parsers.site.madara.pt
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
import java.util.Locale
@MangaSourceParser("KALANGO", "Kalango", "pt")
internal class Kalango(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.KALANGO, "kalango.org") {
override val datePattern: String = "dd 'de' MMMM 'de' yyyy"
override val sourceLocale: Locale = Locale.ENGLISH
}

@ -5,8 +5,8 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("NINJASCAN", "NinjaScan", "pt")
@MangaSourceParser("NINJASCAN", "NinjaComics", "pt")
internal class NinjaScan(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.NINJASCAN, "ninjascan.site") {
MadaraParser(context, MangaSource.NINJASCAN, "ninjacomics.xyz") {
override val datePattern: String = "dd 'de' MMMMM 'de' yyyy"
}

@ -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.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken // Not dead, changed template
@MangaSourceParser("SINENSISSCANS", "SinensisScans", "pt")
internal class SinensisScans(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.SINENSISSCANS, "sinensistoon.com") {

@ -0,0 +1,14 @@
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.ContentType
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
import java.util.Locale
@MangaSourceParser("PEACHBL", "PeachBl", "ar", ContentType.HENTAI)
internal class PeachBl(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.PEACHBL, "peach-bl.com", pageSize = 20, searchPageSize = 10) {
override val sourceLocale: Locale = Locale.ENGLISH
}

@ -9,4 +9,5 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
internal class ThunderScans(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.THUNDERSCANS, "thunderscans.com", pageSize = 32, searchPageSize = 10) {
override val isTagsExclusionSupported = false
override val selectChapter = ".eplister > ul > li"
}

@ -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.MangaSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("EROSSCANS", "ErosScans", "en")
internal class ErosScans(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.EROSSCANS, "erosscans.xyz", pageSize = 20, searchPageSize = 10)

@ -7,6 +7,6 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("FLAMECOMICS", "FlameComics", "en")
internal class FlameComics(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.FLAMECOMICS, "flamecomics.com", pageSize = 24, searchPageSize = 10) {
MangaReaderParser(context, MangaSource.FLAMECOMICS, "flamecomics.me", pageSize = 24, searchPageSize = 10) {
override val listUrl = "/series"
}

@ -8,6 +8,5 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("KAISCANS", "KaiScans", "en")
internal class KaiScans(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.KAISCANS, "kaiscans.org", pageSize = 20, searchPageSize = 10) {
override val listUrl = "/series"
override val isTagsExclusionSupported = false
}

@ -7,7 +7,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("LUMINOUSSCANS", "LuminousScans", "en")
internal class LuminousScans(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.LUMINOUSSCANS, "lumitoon.com", pageSize = 20, searchPageSize = 10) {
MangaReaderParser(context, MangaSource.LUMINOUSSCANS, "luminous-scans.com", pageSize = 20, searchPageSize = 10) {
override val listUrl = "/series"
override val isTagsExclusionSupported = false
}

@ -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.MangaSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
import java.util.Locale
@MangaSourceParser("ALTERKAISCANS", "AlterkaiScans", "id")
internal class AlterkaiScans(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.ALTERKAISCANS, "alterkaiscans.my.id", pageSize = 20, searchPageSize = 10) {
override val sourceLocale: Locale = Locale.ENGLISH
}

@ -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.MangaSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
import java.util.Locale
@MangaSourceParser("NGOMIK", "Ngomik", "id")
internal class Ngomik(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.NGOMIK, "ngomik.mom", pageSize = 20, searchPageSize = 5) {
override val sourceLocale: Locale = Locale.ENGLISH
}

@ -186,7 +186,8 @@ internal abstract class OtakuSanctuaryParser(
MangaChapter(
id = generateUid(url),
name = name,
number = i,
number = i.toFloat(),
volume = 0,
url = url,
scanlator = null,
uploadDate = parseChapterDate(

@ -6,6 +6,7 @@ import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.Response
import okhttp3.ResponseBody.Companion.toResponseBody
import org.json.JSONArray
import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.ErrorMessages
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaParser
@ -16,13 +17,14 @@ import org.koitharu.kotatsu.parsers.util.*
import java.text.SimpleDateFormat
import java.util.zip.ZipInputStream
@MangaSourceParser("RANDOMSCANS", "Luratoon Scan", "pt")
@Broken // Not dead but totally changed structure
@MangaSourceParser("RANDOMSCANS", "LuratoonScan", "pt")
internal class LuratoonScansParser(context: MangaLoaderContext) : MangaParser(context, MangaSource.RANDOMSCANS),
Interceptor {
override val availableSortOrders = setOf(SortOrder.ALPHABETICAL)
override val configKeyDomain = ConfigKey.Domain("luratoon.com")
override val configKeyDomain = ConfigKey.Domain("luratoons.com")
private val userAgentKey = ConfigKey.UserAgent(context.getDefaultUserAgent())

@ -12,11 +12,11 @@ import java.text.DateFormat
import java.text.SimpleDateFormat
import java.util.*
@MangaSourceParser("YUGENMANGAS", "YugenMangas.net.br", "pt")
@MangaSourceParser("YUGENMANGAS", "YugenApp", "pt")
class YugenMangas(context: MangaLoaderContext) : PagedMangaParser(context, MangaSource.YUGENMANGAS, 28) {
override val availableSortOrders: Set<SortOrder> = EnumSet.of(SortOrder.ALPHABETICAL, SortOrder.UPDATED)
override val configKeyDomain = ConfigKey.Domain("yugenmangas.net.br")
override val availableSortOrders: Set<SortOrder> = EnumSet.of(SortOrder.UPDATED)
override val configKeyDomain = ConfigKey.Domain("yugenapp.lat")
override suspend fun getListPage(page: Int, filter: MangaListFilter?): List<Manga> {
@ -32,7 +32,7 @@ class YugenMangas(context: MangaLoaderContext) : PagedMangaParser(context, Manga
val url = buildString {
append("https://api.")
append(domain)
append("/api/series/list/?query=")
append("/api/series/?search=")
append(filter.query.urlEncoded())
}
webClient.httpGet(url).parseJsonArray()
@ -41,22 +41,12 @@ class YugenMangas(context: MangaLoaderContext) : PagedMangaParser(context, Manga
is MangaListFilter.Advanced -> {
if (filter.sortOrder == SortOrder.UPDATED) {
val url = buildString {
append("https://api.")
append(domain)
append("/api/latest_updates/")
}
webClient.httpGet(url).parseJsonArray()
} else {
val url = buildString {
append("https://api.")
append(domain)
append("/api/all_series/")
}
webClient.httpGet(url).parseJson().getJSONArray("series")
}
}
null -> {
@ -73,7 +63,7 @@ class YugenMangas(context: MangaLoaderContext) : PagedMangaParser(context, Manga
val slug = j.getString("slug")
val cover = if (!j.getString("cover").startsWith("https://")) {
// Some covers don't have the "/" so we ensure that the URL will be spelled correctly.
"https://$domain/media/" + j.getString("cover").removePrefix("/")
"https://api.$domain/media/" + j.getString("cover").removePrefix("/")
} else {
j.getString("cover")
}
@ -97,10 +87,11 @@ class YugenMangas(context: MangaLoaderContext) : PagedMangaParser(context, Manga
override suspend fun getDetails(manga: Manga): Manga {
val detailManga =
webClient.httpPost("https://api.$domain/api/serie_details/${manga.url}", emptyMap()).parseJson()
webClient.httpPost("https://api.$domain/api/serie/serie_details/${manga.url}", emptyMap()).parseJson()
val body = JSONObject()
body.put("serie_slug", manga.url)
val chapterManga = webClient.httpPost("https://api.$domain/api/get_chapters_by_serie/", body).parseJson()
val chapterManga =
webClient.httpPost("https://api.$domain/api/chapters/get_chapters_by_serie/", body).parseJson()
.getJSONArray("chapters")
val dateFormat = SimpleDateFormat("dd/MM/yyyy", sourceLocale)
return manga.copy(
@ -117,11 +108,12 @@ class YugenMangas(context: MangaLoaderContext) : PagedMangaParser(context, Manga
}
},
chapters = chapterManga.mapJSON { j ->
val url = "https://api.$domain/api/serie/${manga.url}/chapter/${j.getString("slug")}/images/imgs/"
val url = "https://api.$domain/api/serie/${manga.url}/chapter/${j.getString("slug")}/images/imgs/get/"
MangaChapter(
id = generateUid(url),
name = j.getString("name"),
number = j.getString("name").removePrefix("Capítulo ").toInt(),
number = j.getString("name").removePrefix("Capítulo ").toFloat(),
volume = 0,
url = url,
scanlator = null,
uploadDate = parseChapterDate(
@ -158,7 +150,7 @@ class YugenMangas(context: MangaLoaderContext) : PagedMangaParser(context, Manga
val jsonPages = webClient.httpPost(chapter.url, emptyMap()).parseJson().getJSONArray("chapter_images")
val pages = ArrayList<MangaPage>(jsonPages.length())
for (i in 0 until jsonPages.length()) {
val img = "https://$domain/${jsonPages.getString(i)}"
val img = "https://api.$domain/${jsonPages.getString(i)}"
pages.add(
MangaPage(
id = generateUid(img),

@ -142,7 +142,8 @@ internal class AComics(context: MangaLoaderContext) :
MangaChapter(
id = manga.id,
name = manga.title,
number = 1,
number = 1f,
volume = 0,
url = manga.url.replace("/about", "/"),
scanlator = null,
uploadDate = 0,

@ -197,7 +197,8 @@ class BlogTruyenParser(context: MangaLoaderContext) :
MangaChapter(
id = generateUid(id),
name = name,
number = index + 1,
number = index + 1f,
volume = 0,
url = relativeUrl,
scanlator = null,
uploadDate = uploadDate,

@ -244,7 +244,8 @@ class HentaiVNParser(context: MangaLoaderContext) : MangaParser(context, MangaSo
MangaChapter(
id = generateUid(titleEl.attrAsRelativeUrl("href")),
name = titleEl.text(),
number = index + 1,
number = index + 1f,
volume = 0,
url = titleEl.attrAsRelativeUrl("href"),
scanlator = null,
uploadDate = chapterDateFormat.tryParse(dateStr),

@ -142,7 +142,8 @@ internal class LxManga(context: MangaLoaderContext) : PagedMangaParser(context,
MangaChapter(
id = generateUid(href),
name = name,
number = i,
number = i.toFloat(),
volume = 0,
url = href,
scanlator = null,
uploadDate = dateFormat.tryParse(date),

@ -133,7 +133,8 @@ class TruyentranhLHParser(context: MangaLoaderContext) :
MangaChapter(
id = generateUid(element.attrAsRelativeUrl("href")),
name = element.selectFirst(".chapter-name")?.text()?.trim().orEmpty(),
number = index + 1,
number = index + 1f,
volume = 0,
url = element.attrAsRelativeUrl("href"),
scanlator = null,
uploadDate = chapterDateFormat.tryParse(element.selectFirst(".chapter-time")?.text()),

@ -122,7 +122,8 @@ internal abstract class VmpParser(
MangaChapter(
id = manga.id,
name = manga.title,
number = 1,
number = 1f,
volume = 0,
url = manga.url,
scanlator = null,
uploadDate = 0,

@ -0,0 +1,17 @@
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.MangaSource
import org.koitharu.kotatsu.parsers.model.MangaState
import org.koitharu.kotatsu.parsers.model.MangaTag
import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser
@MangaSourceParser("RAYSSCAN", "RaysScan", "pt")
internal class RaysScan(context: MangaLoaderContext) :
ZeistMangaParser(context, MangaSource.RAYSSCAN, "raysscan.blogspot.com") {
override val availableStates: Set<MangaState> = emptySet()
override suspend fun getAvailableTags(): Set<MangaTag> = emptySet()
}

@ -0,0 +1,15 @@
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.MangaSource
import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser
@MangaSourceParser("SOLOOSCAN", "SolooScan", "pt")
internal class SolooScan(context: MangaLoaderContext) :
ZeistMangaParser(context, MangaSource.SOLOOSCAN, "solooscan.blogspot.com") {
override val mangaCategory = "Recentes"
override val sateOngoing: String = "Lançando"
override val sateFinished: String = "Completo"
override val sateAbandoned: String = "Dropado"
}

@ -0,0 +1,17 @@
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.MangaSource
import org.koitharu.kotatsu.parsers.model.MangaState
import org.koitharu.kotatsu.parsers.model.MangaTag
import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser
@MangaSourceParser("TEMAKIMANGAS", "TemakiMangas", "pt")
internal class TemakiMangas(context: MangaLoaderContext) :
ZeistMangaParser(context, MangaSource.TEMAKIMANGAS, "www.temakimangas.xyz") {
override val availableStates: Set<MangaState> = emptySet()
override suspend fun getAvailableTags(): Set<MangaTag> = emptySet()
}
Loading…
Cancel
Save