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
This commit is contained in:
@@ -147,7 +147,8 @@ class TuMangaOnlineParser(context: MangaLoaderContext) : PagedMangaParser(
|
|||||||
return MangaChapter(
|
return MangaChapter(
|
||||||
id = generateUid(href),
|
id = generateUid(href),
|
||||||
name = "One Shot",
|
name = "One Shot",
|
||||||
number = 1,
|
number = 1f,
|
||||||
|
volume = 0,
|
||||||
url = href,
|
url = href,
|
||||||
scanlator = element.select("div.col-md-6.text-truncate").text(),
|
scanlator = element.select("div.col-md-6.text-truncate").text(),
|
||||||
branch = null,
|
branch = null,
|
||||||
@@ -163,7 +164,8 @@ class TuMangaOnlineParser(context: MangaLoaderContext) : PagedMangaParser(
|
|||||||
return MangaChapter(
|
return MangaChapter(
|
||||||
id = generateUid(href),
|
id = generateUid(href),
|
||||||
name = chName,
|
name = chName,
|
||||||
number = number + 1,
|
number = number + 1f,
|
||||||
|
volume = 0,
|
||||||
url = href,
|
url = href,
|
||||||
scanlator = element.select("div.col-md-6.text-truncate").text(),
|
scanlator = element.select("div.col-md-6.text-truncate").text(),
|
||||||
branch = null,
|
branch = null,
|
||||||
|
|||||||
@@ -228,7 +228,8 @@ internal class BentomangaParser(context: MangaLoaderContext) : PagedMangaParser(
|
|||||||
MangaChapter(
|
MangaChapter(
|
||||||
id = generateUid(href),
|
id = generateUid(href),
|
||||||
name = if (name != null && name != title) "$title: $name" else title,
|
name = if (name != null && name != title) "$title: $name" else title,
|
||||||
number = href.substringAfterLast('/').toIntOrNull() ?: 0,
|
number = href.substringAfterLast('/').toFloatOrNull() ?: 0f,
|
||||||
|
volume = 0,
|
||||||
url = href,
|
url = href,
|
||||||
scanlator = div.selectFirst(".team_link-name")?.textOrNull(),
|
scanlator = div.selectFirst(".team_link-name")?.textOrNull(),
|
||||||
uploadDate = div.selectFirst(".component-chapter-date")
|
uploadDate = div.selectFirst(".component-chapter-date")
|
||||||
|
|||||||
@@ -158,7 +158,8 @@ internal abstract class GalleryAdultsParser(
|
|||||||
MangaChapter(
|
MangaChapter(
|
||||||
id = manga.id,
|
id = manga.id,
|
||||||
name = manga.title,
|
name = manga.title,
|
||||||
number = 1,
|
number = 1f,
|
||||||
|
volume = 0,
|
||||||
url = urlChapters,
|
url = urlChapters,
|
||||||
scanlator = null,
|
scanlator = null,
|
||||||
uploadDate = 0,
|
uploadDate = 0,
|
||||||
|
|||||||
@@ -131,7 +131,8 @@ internal class HentaiEra(context: MangaLoaderContext) :
|
|||||||
MangaChapter(
|
MangaChapter(
|
||||||
id = manga.id,
|
id = manga.id,
|
||||||
name = manga.title,
|
name = manga.title,
|
||||||
number = 1,
|
number = 1f,
|
||||||
|
volume = 0,
|
||||||
url = urlChapters,
|
url = urlChapters,
|
||||||
scanlator = null,
|
scanlator = null,
|
||||||
uploadDate = 0,
|
uploadDate = 0,
|
||||||
|
|||||||
@@ -115,7 +115,8 @@ internal abstract class GattsuParser(
|
|||||||
MangaChapter(
|
MangaChapter(
|
||||||
id = manga.id,
|
id = manga.id,
|
||||||
name = manga.title,
|
name = manga.title,
|
||||||
number = 1,
|
number = 1f,
|
||||||
|
volume = 0,
|
||||||
url = urlChapter,
|
url = urlChapter,
|
||||||
scanlator = null,
|
scanlator = null,
|
||||||
uploadDate = 0,
|
uploadDate = 0,
|
||||||
|
|||||||
@@ -91,7 +91,8 @@ internal abstract class GuyaParser(
|
|||||||
MangaChapter(
|
MangaChapter(
|
||||||
id = generateUid(url),
|
id = generateUid(url),
|
||||||
name = chapter.getString("title"),
|
name = chapter.getString("title"),
|
||||||
number = i,
|
number = i.toFloat(),
|
||||||
|
volume = 0,
|
||||||
url = url,
|
url = url,
|
||||||
scanlator = null,
|
scanlator = null,
|
||||||
uploadDate = 0,
|
uploadDate = 0,
|
||||||
|
|||||||
@@ -126,7 +126,8 @@ class DoujinDesuParser(context: MangaLoaderContext) : PagedMangaParser(context,
|
|||||||
MangaChapter(
|
MangaChapter(
|
||||||
id = generateUid(url),
|
id = generateUid(url),
|
||||||
name = titleTag.text(),
|
name = titleTag.text(),
|
||||||
number = index + 1,
|
number = index + 1f,
|
||||||
|
volume = 0,
|
||||||
url = url,
|
url = url,
|
||||||
scanlator = null,
|
scanlator = null,
|
||||||
uploadDate = chapterDateFormat.tryParse(element.select(".epsleft > .date").text()),
|
uploadDate = chapterDateFormat.tryParse(element.select(".epsleft > .date").text()),
|
||||||
|
|||||||
@@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
|
|||||||
@MangaSourceParser("MANGAWORLD", "MangaWorld", "it")
|
@MangaSourceParser("MANGAWORLD", "MangaWorld", "it")
|
||||||
internal class MangaWorld(
|
internal class MangaWorld(
|
||||||
context: MangaLoaderContext,
|
context: MangaLoaderContext,
|
||||||
) : MangaWorldParser(context, MangaSource.MANGAWORLD,"mangaworld.ac")
|
) : MangaWorldParser(context, MangaSource.MANGAWORLD, "mangaworld.ac")
|
||||||
|
|||||||
@@ -10,20 +10,27 @@ import java.text.SimpleDateFormat
|
|||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
abstract class MangaWorldParser(
|
abstract class MangaWorldParser(
|
||||||
context: MangaLoaderContext,
|
context: MangaLoaderContext,
|
||||||
source: MangaSource,
|
source: MangaSource,
|
||||||
domain: String,
|
domain: String,
|
||||||
pageSize: Int = 16
|
pageSize: Int = 16,
|
||||||
) : PagedMangaParser(context, source, pageSize) {
|
) : PagedMangaParser(context, source, pageSize) {
|
||||||
override val availableSortOrders: Set<SortOrder> =
|
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
|
override val defaultSortOrder: SortOrder
|
||||||
get() = SortOrder.ALPHABETICAL
|
get() = SortOrder.ALPHABETICAL
|
||||||
|
|
||||||
override val configKeyDomain = ConfigKey.Domain(domain)
|
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
|
override val isMultipleTagsSupported = true
|
||||||
|
|
||||||
@@ -43,7 +50,9 @@ abstract class MangaWorldParser(
|
|||||||
}
|
}
|
||||||
|
|
||||||
is MangaListFilter.Advanced -> {
|
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()) {
|
if (filter.tags.isNotEmpty()) {
|
||||||
filter.tags.joinTo(this, "&") { it.key.substringAfter("archive?") }
|
filter.tags.joinTo(this, "&") { it.key.substringAfter("archive?") }
|
||||||
|
|||||||
@@ -219,7 +219,8 @@ internal abstract class LikeMangaParser(
|
|||||||
MangaChapter(
|
MangaChapter(
|
||||||
id = generateUid(url),
|
id = generateUid(url),
|
||||||
name = li.selectFirstOrThrow("a").text(),
|
name = li.selectFirstOrThrow("a").text(),
|
||||||
number = chapNum.toInt(),
|
number = chapNum.toFloat(),
|
||||||
|
volume = 0,
|
||||||
url = url,
|
url = url,
|
||||||
scanlator = null,
|
scanlator = null,
|
||||||
uploadDate = parseChapterDate(
|
uploadDate = parseChapterDate(
|
||||||
|
|||||||
@@ -1,10 +1,49 @@
|
|||||||
package org.koitharu.kotatsu.parsers.site.madara.ar
|
package org.koitharu.kotatsu.parsers.site.madara.ar
|
||||||
|
|
||||||
|
import org.jsoup.nodes.Document
|
||||||
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.MangaChapter
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
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")
|
@MangaSourceParser("ROCKSMANGA", "RocksManga", "ar")
|
||||||
internal class RocksManga(context: MangaLoaderContext) :
|
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.model.MangaSource
|
||||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||||
|
|
||||||
@MangaSourceParser("PARAGONSCANS", "ParagonScans", "en")
|
@MangaSourceParser("MANGATX_TO", "MangaTx.to", "en")
|
||||||
internal class Paragonscans(context: MangaLoaderContext) :
|
internal class MangaTxTo(context: MangaLoaderContext) :
|
||||||
MadaraParser(context, MangaSource.PARAGONSCANS, "paragonscans.com", pageSize = 50) {
|
MadaraParser(context, MangaSource.MANGATX_TO, "mangatx.to", 10) {
|
||||||
override val datePattern = "MM/dd/yyyy"
|
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.model.MangaSource
|
||||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||||
|
|
||||||
@MangaSourceParser("CRYSTALSCAN", "CrystalScan", "pt")
|
@MangaSourceParser("CRYSTALSCAN", "CrystalComics", "pt")
|
||||||
internal class CrystalScan(context: MangaLoaderContext) :
|
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.model.MangaSource
|
||||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||||
|
|
||||||
@MangaSourceParser("GALINHASAMURAI", "Galinha Samurai", "pt")
|
@MangaSourceParser("GALINHASAMURAI", "GalinhaSamurai", "pt")
|
||||||
internal class GalinhaSamurai(context: MangaLoaderContext) :
|
internal class GalinhaSamurai(context: MangaLoaderContext) :
|
||||||
MadaraParser(context, MangaSource.GALINHASAMURAI, "galinhasamurai.com") {
|
MadaraParser(context, MangaSource.GALINHASAMURAI, "galinhasamurai.com") {
|
||||||
override val datePattern = "dd/MM/yyyy"
|
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.model.MangaSource
|
||||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||||
|
|
||||||
@MangaSourceParser("KAKUSEIPROJECT", "Kakusei Project", "pt")
|
@MangaSourceParser("KAKUSEIPROJECT", "KakuseiProject", "pt")
|
||||||
internal class KakuseiProject(context: MangaLoaderContext) :
|
internal class KakuseiProject(context: MangaLoaderContext) :
|
||||||
MadaraParser(context, MangaSource.KAKUSEIPROJECT, "kakuseiproject.com", 10)
|
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.model.MangaSource
|
||||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||||
|
|
||||||
@MangaSourceParser("NINJASCAN", "NinjaScan", "pt")
|
@MangaSourceParser("NINJASCAN", "NinjaComics", "pt")
|
||||||
internal class NinjaScan(context: MangaLoaderContext) :
|
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"
|
override val datePattern: String = "dd 'de' MMMMM 'de' yyyy"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
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.MangaLoaderContext
|
||||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||||
|
|
||||||
|
@Broken // Not dead, changed template
|
||||||
@MangaSourceParser("SINENSISSCANS", "SinensisScans", "pt")
|
@MangaSourceParser("SINENSISSCANS", "SinensisScans", "pt")
|
||||||
internal class SinensisScans(context: MangaLoaderContext) :
|
internal class SinensisScans(context: MangaLoaderContext) :
|
||||||
MadaraParser(context, MangaSource.SINENSISSCANS, "sinensistoon.com") {
|
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) :
|
internal class ThunderScans(context: MangaLoaderContext) :
|
||||||
MangaReaderParser(context, MangaSource.THUNDERSCANS, "thunderscans.com", pageSize = 32, searchPageSize = 10) {
|
MangaReaderParser(context, MangaSource.THUNDERSCANS, "thunderscans.com", pageSize = 32, searchPageSize = 10) {
|
||||||
override val isTagsExclusionSupported = false
|
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")
|
@MangaSourceParser("FLAMECOMICS", "FlameComics", "en")
|
||||||
internal class FlameComics(context: MangaLoaderContext) :
|
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"
|
override val listUrl = "/series"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,5 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
|
|||||||
@MangaSourceParser("KAISCANS", "KaiScans", "en")
|
@MangaSourceParser("KAISCANS", "KaiScans", "en")
|
||||||
internal class KaiScans(context: MangaLoaderContext) :
|
internal class KaiScans(context: MangaLoaderContext) :
|
||||||
MangaReaderParser(context, MangaSource.KAISCANS, "kaiscans.org", pageSize = 20, searchPageSize = 10) {
|
MangaReaderParser(context, MangaSource.KAISCANS, "kaiscans.org", pageSize = 20, searchPageSize = 10) {
|
||||||
override val listUrl = "/series"
|
|
||||||
override val isTagsExclusionSupported = false
|
override val isTagsExclusionSupported = false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
|
|||||||
|
|
||||||
@MangaSourceParser("LUMINOUSSCANS", "LuminousScans", "en")
|
@MangaSourceParser("LUMINOUSSCANS", "LuminousScans", "en")
|
||||||
internal class LuminousScans(context: MangaLoaderContext) :
|
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 listUrl = "/series"
|
||||||
override val isTagsExclusionSupported = false
|
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(
|
MangaChapter(
|
||||||
id = generateUid(url),
|
id = generateUid(url),
|
||||||
name = name,
|
name = name,
|
||||||
number = i,
|
number = i.toFloat(),
|
||||||
|
volume = 0,
|
||||||
url = url,
|
url = url,
|
||||||
scanlator = null,
|
scanlator = null,
|
||||||
uploadDate = parseChapterDate(
|
uploadDate = parseChapterDate(
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
|||||||
import okhttp3.Response
|
import okhttp3.Response
|
||||||
import okhttp3.ResponseBody.Companion.toResponseBody
|
import okhttp3.ResponseBody.Companion.toResponseBody
|
||||||
import org.json.JSONArray
|
import org.json.JSONArray
|
||||||
|
import org.koitharu.kotatsu.parsers.Broken
|
||||||
import org.koitharu.kotatsu.parsers.ErrorMessages
|
import org.koitharu.kotatsu.parsers.ErrorMessages
|
||||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||||
import org.koitharu.kotatsu.parsers.MangaParser
|
import org.koitharu.kotatsu.parsers.MangaParser
|
||||||
@@ -16,13 +17,14 @@ import org.koitharu.kotatsu.parsers.util.*
|
|||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.zip.ZipInputStream
|
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),
|
internal class LuratoonScansParser(context: MangaLoaderContext) : MangaParser(context, MangaSource.RANDOMSCANS),
|
||||||
Interceptor {
|
Interceptor {
|
||||||
|
|
||||||
override val availableSortOrders = setOf(SortOrder.ALPHABETICAL)
|
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())
|
private val userAgentKey = ConfigKey.UserAgent(context.getDefaultUserAgent())
|
||||||
|
|
||||||
|
|||||||
@@ -12,11 +12,11 @@ import java.text.DateFormat
|
|||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@MangaSourceParser("YUGENMANGAS", "YugenMangas.net.br", "pt")
|
@MangaSourceParser("YUGENMANGAS", "YugenApp", "pt")
|
||||||
class YugenMangas(context: MangaLoaderContext) : PagedMangaParser(context, MangaSource.YUGENMANGAS, 28) {
|
class YugenMangas(context: MangaLoaderContext) : PagedMangaParser(context, MangaSource.YUGENMANGAS, 28) {
|
||||||
|
|
||||||
override val availableSortOrders: Set<SortOrder> = EnumSet.of(SortOrder.ALPHABETICAL, SortOrder.UPDATED)
|
override val availableSortOrders: Set<SortOrder> = EnumSet.of(SortOrder.UPDATED)
|
||||||
override val configKeyDomain = ConfigKey.Domain("yugenmangas.net.br")
|
override val configKeyDomain = ConfigKey.Domain("yugenapp.lat")
|
||||||
|
|
||||||
override suspend fun getListPage(page: Int, filter: MangaListFilter?): List<Manga> {
|
override suspend fun getListPage(page: Int, filter: MangaListFilter?): List<Manga> {
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ class YugenMangas(context: MangaLoaderContext) : PagedMangaParser(context, Manga
|
|||||||
val url = buildString {
|
val url = buildString {
|
||||||
append("https://api.")
|
append("https://api.")
|
||||||
append(domain)
|
append(domain)
|
||||||
append("/api/series/list/?query=")
|
append("/api/series/?search=")
|
||||||
append(filter.query.urlEncoded())
|
append(filter.query.urlEncoded())
|
||||||
}
|
}
|
||||||
webClient.httpGet(url).parseJsonArray()
|
webClient.httpGet(url).parseJsonArray()
|
||||||
@@ -41,22 +41,12 @@ class YugenMangas(context: MangaLoaderContext) : PagedMangaParser(context, Manga
|
|||||||
is MangaListFilter.Advanced -> {
|
is MangaListFilter.Advanced -> {
|
||||||
|
|
||||||
|
|
||||||
if (filter.sortOrder == SortOrder.UPDATED) {
|
val url = buildString {
|
||||||
val url = buildString {
|
append("https://api.")
|
||||||
append("https://api.")
|
append(domain)
|
||||||
append(domain)
|
append("/api/latest_updates/")
|
||||||
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")
|
|
||||||
}
|
}
|
||||||
|
webClient.httpGet(url).parseJsonArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
null -> {
|
null -> {
|
||||||
@@ -73,7 +63,7 @@ class YugenMangas(context: MangaLoaderContext) : PagedMangaParser(context, Manga
|
|||||||
val slug = j.getString("slug")
|
val slug = j.getString("slug")
|
||||||
val cover = if (!j.getString("cover").startsWith("https://")) {
|
val cover = if (!j.getString("cover").startsWith("https://")) {
|
||||||
// Some covers don't have the "/" so we ensure that the URL will be spelled correctly.
|
// 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 {
|
} else {
|
||||||
j.getString("cover")
|
j.getString("cover")
|
||||||
}
|
}
|
||||||
@@ -97,11 +87,12 @@ class YugenMangas(context: MangaLoaderContext) : PagedMangaParser(context, Manga
|
|||||||
|
|
||||||
override suspend fun getDetails(manga: Manga): Manga {
|
override suspend fun getDetails(manga: Manga): Manga {
|
||||||
val detailManga =
|
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()
|
val body = JSONObject()
|
||||||
body.put("serie_slug", manga.url)
|
body.put("serie_slug", manga.url)
|
||||||
val chapterManga = webClient.httpPost("https://api.$domain/api/get_chapters_by_serie/", body).parseJson()
|
val chapterManga =
|
||||||
.getJSONArray("chapters")
|
webClient.httpPost("https://api.$domain/api/chapters/get_chapters_by_serie/", body).parseJson()
|
||||||
|
.getJSONArray("chapters")
|
||||||
val dateFormat = SimpleDateFormat("dd/MM/yyyy", sourceLocale)
|
val dateFormat = SimpleDateFormat("dd/MM/yyyy", sourceLocale)
|
||||||
return manga.copy(
|
return manga.copy(
|
||||||
description = detailManga.getString("synopsis"),
|
description = detailManga.getString("synopsis"),
|
||||||
@@ -117,11 +108,12 @@ class YugenMangas(context: MangaLoaderContext) : PagedMangaParser(context, Manga
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
chapters = chapterManga.mapJSON { j ->
|
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(
|
MangaChapter(
|
||||||
id = generateUid(url),
|
id = generateUid(url),
|
||||||
name = j.getString("name"),
|
name = j.getString("name"),
|
||||||
number = j.getString("name").removePrefix("Capítulo ").toInt(),
|
number = j.getString("name").removePrefix("Capítulo ").toFloat(),
|
||||||
|
volume = 0,
|
||||||
url = url,
|
url = url,
|
||||||
scanlator = null,
|
scanlator = null,
|
||||||
uploadDate = parseChapterDate(
|
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 jsonPages = webClient.httpPost(chapter.url, emptyMap()).parseJson().getJSONArray("chapter_images")
|
||||||
val pages = ArrayList<MangaPage>(jsonPages.length())
|
val pages = ArrayList<MangaPage>(jsonPages.length())
|
||||||
for (i in 0 until 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(
|
pages.add(
|
||||||
MangaPage(
|
MangaPage(
|
||||||
id = generateUid(img),
|
id = generateUid(img),
|
||||||
|
|||||||
@@ -142,7 +142,8 @@ internal class AComics(context: MangaLoaderContext) :
|
|||||||
MangaChapter(
|
MangaChapter(
|
||||||
id = manga.id,
|
id = manga.id,
|
||||||
name = manga.title,
|
name = manga.title,
|
||||||
number = 1,
|
number = 1f,
|
||||||
|
volume = 0,
|
||||||
url = manga.url.replace("/about", "/"),
|
url = manga.url.replace("/about", "/"),
|
||||||
scanlator = null,
|
scanlator = null,
|
||||||
uploadDate = 0,
|
uploadDate = 0,
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ internal abstract class LibSocialParser(
|
|||||||
SortOrder.NEWEST -> "created_at"
|
SortOrder.NEWEST -> "created_at"
|
||||||
SortOrder.ALPHABETICAL,
|
SortOrder.ALPHABETICAL,
|
||||||
SortOrder.ALPHABETICAL_DESC,
|
SortOrder.ALPHABETICAL_DESC,
|
||||||
-> "rus_name"
|
-> "rus_name"
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
urlBuilder.addQueryParameter(
|
urlBuilder.addQueryParameter(
|
||||||
@@ -98,7 +98,7 @@ internal abstract class LibSocialParser(
|
|||||||
SortOrder.RATING,
|
SortOrder.RATING,
|
||||||
SortOrder.NEWEST,
|
SortOrder.NEWEST,
|
||||||
SortOrder.ALPHABETICAL_DESC,
|
SortOrder.ALPHABETICAL_DESC,
|
||||||
-> "desc"
|
-> "desc"
|
||||||
|
|
||||||
SortOrder.ALPHABETICAL -> "asc"
|
SortOrder.ALPHABETICAL -> "asc"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -197,7 +197,8 @@ class BlogTruyenParser(context: MangaLoaderContext) :
|
|||||||
MangaChapter(
|
MangaChapter(
|
||||||
id = generateUid(id),
|
id = generateUid(id),
|
||||||
name = name,
|
name = name,
|
||||||
number = index + 1,
|
number = index + 1f,
|
||||||
|
volume = 0,
|
||||||
url = relativeUrl,
|
url = relativeUrl,
|
||||||
scanlator = null,
|
scanlator = null,
|
||||||
uploadDate = uploadDate,
|
uploadDate = uploadDate,
|
||||||
|
|||||||
@@ -244,7 +244,8 @@ class HentaiVNParser(context: MangaLoaderContext) : MangaParser(context, MangaSo
|
|||||||
MangaChapter(
|
MangaChapter(
|
||||||
id = generateUid(titleEl.attrAsRelativeUrl("href")),
|
id = generateUid(titleEl.attrAsRelativeUrl("href")),
|
||||||
name = titleEl.text(),
|
name = titleEl.text(),
|
||||||
number = index + 1,
|
number = index + 1f,
|
||||||
|
volume = 0,
|
||||||
url = titleEl.attrAsRelativeUrl("href"),
|
url = titleEl.attrAsRelativeUrl("href"),
|
||||||
scanlator = null,
|
scanlator = null,
|
||||||
uploadDate = chapterDateFormat.tryParse(dateStr),
|
uploadDate = chapterDateFormat.tryParse(dateStr),
|
||||||
|
|||||||
@@ -142,7 +142,8 @@ internal class LxManga(context: MangaLoaderContext) : PagedMangaParser(context,
|
|||||||
MangaChapter(
|
MangaChapter(
|
||||||
id = generateUid(href),
|
id = generateUid(href),
|
||||||
name = name,
|
name = name,
|
||||||
number = i,
|
number = i.toFloat(),
|
||||||
|
volume = 0,
|
||||||
url = href,
|
url = href,
|
||||||
scanlator = null,
|
scanlator = null,
|
||||||
uploadDate = dateFormat.tryParse(date),
|
uploadDate = dateFormat.tryParse(date),
|
||||||
|
|||||||
@@ -133,7 +133,8 @@ class TruyentranhLHParser(context: MangaLoaderContext) :
|
|||||||
MangaChapter(
|
MangaChapter(
|
||||||
id = generateUid(element.attrAsRelativeUrl("href")),
|
id = generateUid(element.attrAsRelativeUrl("href")),
|
||||||
name = element.selectFirst(".chapter-name")?.text()?.trim().orEmpty(),
|
name = element.selectFirst(".chapter-name")?.text()?.trim().orEmpty(),
|
||||||
number = index + 1,
|
number = index + 1f,
|
||||||
|
volume = 0,
|
||||||
url = element.attrAsRelativeUrl("href"),
|
url = element.attrAsRelativeUrl("href"),
|
||||||
scanlator = null,
|
scanlator = null,
|
||||||
uploadDate = chapterDateFormat.tryParse(element.selectFirst(".chapter-time")?.text()),
|
uploadDate = chapterDateFormat.tryParse(element.selectFirst(".chapter-time")?.text()),
|
||||||
|
|||||||
@@ -122,7 +122,8 @@ internal abstract class VmpParser(
|
|||||||
MangaChapter(
|
MangaChapter(
|
||||||
id = manga.id,
|
id = manga.id,
|
||||||
name = manga.title,
|
name = manga.title,
|
||||||
number = 1,
|
number = 1f,
|
||||||
|
volume = 0,
|
||||||
url = manga.url,
|
url = manga.url,
|
||||||
scanlator = null,
|
scanlator = null,
|
||||||
uploadDate = 0,
|
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()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user