Add template Scan and move ScanVfOrg in

Add ScanIta

Remove Mangastic -> redirect to toon69
Remove MangaGoYaoi -> redirect to asurascans.us
Remove Cizgiromanarsivi -> redirect to mangaoku.info
Remove WebtoonEvreni -> redirect to merlinscans.com
Remove GalaxyAction -> redirect to flixscans.com
Remove GalaxyAction -> redirect to kingofshojo.com
Remove aquamanga.live -> redirect to kingofshojo.com
Remove MangaReaderPro -> redirect to hadesnofansub.com

Urls : S2Manga.io, KomikzoId, Toon69, ReaperComics, ShadowXManga, TeamXNovel, YaoiFlix, MangaEmpress, MangaMukai.com, komikRemaja.cfd, MangaKyo, KomikMirror, ManhwaDesu, ManhwaIndo.sbs, ManhwaLand, Wowomik, LireScanVf.com, NhattruyenPlus
pull/431/head
devi 2 years ago
parent 904e0719eb
commit 07aaec7d3c

@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.animebootstrap.AnimeBootstrapParser
@MangaSourceParser("KOMIKZOID", "KomikzoId", "id")
internal class KomikzoId(context: MangaLoaderContext) :
AnimeBootstrapParser(context, MangaSource.KOMIKZOID, "komikzoid.xyz")
AnimeBootstrapParser(context, MangaSource.KOMIKZOID, "komikzoid.id")

@ -20,7 +20,7 @@ internal class TeamXNovel(context: MangaLoaderContext) : PagedMangaParser(contex
override val availableStates: Set<MangaState> =
EnumSet.of(MangaState.ONGOING, MangaState.FINISHED, MangaState.ABANDONED)
override val configKeyDomain = ConfigKey.Domain("team11x11.com")
override val configKeyDomain = ConfigKey.Domain("team11x11.fun")
override val isMultipleTagsSupported = false
override suspend fun getListPage(page: Int, filter: MangaListFilter?): List<Manga> {

@ -20,7 +20,7 @@ internal class ReaperComics(context: MangaLoaderContext) :
override val availableSortOrders: Set<SortOrder> = EnumSet.of(SortOrder.UPDATED, SortOrder.ALPHABETICAL)
override val configKeyDomain = ConfigKey.Domain("reapercomics.com")
override val configKeyDomain = ConfigKey.Domain("reaperscans.com")
override val headers: Headers = Headers.Builder()
.add("User-Agent", UserAgents.CHROME_DESKTOP)

@ -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("SHADOWXMANGA", "Shadow X Manga", "ar")
@MangaSourceParser("SHADOWXMANGA", "ShadowXManga", "ar")
internal class ShadowxManga(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.SHADOWXMANGA, "shadowxmanga.com") {
MadaraParser(context, MangaSource.SHADOWXMANGA, "www.shadowxmanga.com") {
override val datePattern = "yyyy/MM/dd"
}

@ -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("JIMANGA", "JiManga", "en")
@MangaSourceParser("JIMANGA", "S2Manga.io", "en")
internal class JiManga(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.JIMANGA, "jimanga.com")
MadaraParser(context, MangaSource.JIMANGA, "s2manga.io")

@ -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("MANGAROSIE", "MangaRosie", "en")
@MangaSourceParser("MANGAROSIE", "Toon69", "en")
internal class MangaRosie(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANGAROSIE, "mangarosie.in", pageSize = 16) {
MadaraParser(context, MangaSource.MANGAROSIE, "toon69.com", pageSize = 16) {
override val datePattern = "MMMM dd, yyyy"
}

@ -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("MANGATXUNOFFICIAL", "Manga-Tx.com", "en")
@MangaSourceParser("MANGATXUNOFFICIAL", "MangaEmpress", "en")
internal class MangaTxUnofficial(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANGATXUNOFFICIAL, "manga-tx.com")
MadaraParser(context, MangaSource.MANGATXUNOFFICIAL, "mangaempress.com")

@ -1,11 +0,0 @@
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("MANGAGOYAOI", "MangaGoYaoi", "en", ContentType.HENTAI)
internal class Mangagoyaoi(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANGAGOYAOI, "mangagoyaoi.com")

@ -1,10 +0,0 @@
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("MANGASTIC", "Mangastic", "en")
internal class Mangastic(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANGASTIC, "mangastic.cc", 20)

@ -7,7 +7,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("TOPMANHUA", "TopManhua", "en")
internal class TopManhua(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.TOPMANHUA, "www.topmanhua.com") {
MadaraParser(context, MangaSource.TOPMANHUA, "topmanhua.com") {
override val tagPrefix = "manhua-genre/"
override val datePattern = "MM/dd/yyyy"
}

@ -1,12 +0,0 @@
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("VORTCESCAN", "VortceScan", "pt")
internal class VortceScan(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.VORTCESCAN, "vortcescan.com.br", pageSize = 10) {
override val datePattern: String = "d 'de' MMMMM 'de' yyyy"
}

@ -1,13 +0,0 @@
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("ZEROSCAN", "ZeroScan", "pt")
internal class ZeroScan(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.ZEROSCAN, "zeroscan.com.br") {
override val postReq = true
override val datePattern: String = "dd/MM/yyyy"
}

@ -1,15 +0,0 @@
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("CIZGIROMANARSIVI", "Cizgiromanarsivi", "tr")
internal class Cizgiromanarsivi(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.CIZGIROMANARSIVI, "cizgiromanarsivi.com", 24) {
override val stylePage = ""
override val tagPrefix = "kategori/"
override val listUrl = "seri/"
override val datePattern = "dd/MM/yyyy"
}

@ -7,5 +7,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("GHOSTFANSUB", "GhostFansub", "tr")
internal class GhostFansub(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.GHOSTFANSUB, "ghostfansub.online", 18)
MadaraParser(context, MangaSource.GHOSTFANSUB, "ghostfansub.co", 18)
// you now need to log in to access content

@ -7,6 +7,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("MANGAWOW", "MangaWow", "tr")
internal class MangaWow(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANGAWOW, "mangawow.com", 18) {
MadaraParser(context, MangaSource.MANGAWOW, "mangawow.org", 18) {
override val datePattern = "d MMMM yyyy"
}

@ -6,6 +6,8 @@ import org.koitharu.kotatsu.parsers.model.ContentType
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("TONIZUTOON", "TonizuToon", "tr", ContentType.HENTAI)
@MangaSourceParser("TONIZUTOON", "ToniZu.com", "tr", ContentType.HENTAI)
internal class Tonizutoon(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.TONIZUTOON, "tonizutoon.com")
MadaraParser(context, MangaSource.TONIZUTOON, "tonizu.com") {
override val datePattern = "dd/mm/yyyy"
}

@ -1,10 +0,0 @@
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("WEBTOONEVRENI", "WebtoonEvreni", "tr")
internal class Webtoonevreni(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.WEBTOONEVRENI, "webtoonevreni.net", 10)

@ -9,9 +9,9 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
import org.koitharu.kotatsu.parsers.util.*
import java.util.EnumSet
@MangaSourceParser("SAYTRUYENHAY", "Saytruyenhay", "vi")
@MangaSourceParser("SAYTRUYENHAY", "PheTruyen", "vi")
internal class Saytruyenhay(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.SAYTRUYENHAY, "saytruyenhay.com", 40) {
MadaraParser(context, MangaSource.SAYTRUYENHAY, "phetruyen.net", 40) {
override val tagPrefix = "genre/"
override val withoutAjax = true

@ -14,7 +14,7 @@ import java.util.EnumSet
internal class MangakakalotTv(context: MangaLoaderContext) :
MangaboxParser(context, MangaSource.MANGAKAKALOTTV) {
override val configKeyDomain = ConfigKey.Domain("ww6.mangakakalot.tv")
override val configKeyDomain = ConfigKey.Domain("ww7.mangakakalot.tv")
override val searchUrl = "/search/"
override val listUrl = "/manga_list"
override val availableSortOrders: Set<SortOrder> = EnumSet.of(

@ -1,10 +0,0 @@
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.MangaSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("GALAXYACTION", "GalaxyAction", "ar")
internal class GalaxyAction(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.GALAXYACTION, "galaxyaction.site", pageSize = 20, searchPageSize = 10)

@ -1,10 +0,0 @@
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.MangaSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("OZULSHOJO", "OzulShojo", "ar")
internal class OzulShojo(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.OZULSHOJO, "ozulshojo.com", pageSize = 20, searchPageSize = 10)

@ -1,10 +0,0 @@
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("AQUAMANGA_LIVE", "AquaManga.live", "en")
internal class AquaManga(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.AQUAMANGA_LIVE, "aquamanga.live", pageSize = 30, searchPageSize = 10)

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

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

@ -8,6 +8,6 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("MANHWALOVER", "ManhwaLover", "en", ContentType.HENTAI)
internal class ManhwaLover(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.MANHWALOVER, "manhwalover.com", pageSize = 20, searchPageSize = 20) {
MangaReaderParser(context, MangaSource.MANHWALOVER, "www.manhwalover.com", pageSize = 20, searchPageSize = 20) {
override val datePattern = "MMM d, yyyy"
}

@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("AIYUMANGASCANLATION", "AiyuManhua", "es")
internal class AiyuMangaScanlation(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.AIYUMANGASCANLATION, "aiyumanhua.com", 20, 10)
MangaReaderParser(context, MangaSource.AIYUMANGASCANLATION, "www.aiyumanhua.com", 20, 10)

@ -1,13 +0,0 @@
package org.koitharu.kotatsu.parsers.site.mangareader.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.mangareader.MangaReaderParser
import java.util.Locale
@MangaSourceParser("MANGAREADERPRO", "MangaReaderPro", "es")
internal class MangaReaderpro(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.MANGAREADERPRO, "mangareaderpro.com", pageSize = 20, searchPageSize = 10) {
override val sourceLocale: Locale = Locale.ENGLISH
}

@ -5,6 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("MANGASHIINA", "MangaShiina", "es")
@MangaSourceParser("MANGASHIINA", "MangaMukai.com", "es")
internal class MangaShiina(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.MANGASHIINA, "mangashiina.com", pageSize = 20, searchPageSize = 10)
MangaReaderParser(context, MangaSource.MANGASHIINA, "mangamukai.com", pageSize = 20, searchPageSize = 10)

@ -7,9 +7,9 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
import java.util.*
@MangaSourceParser("KOMIKDEWASA", "KomikDewasa.Club", "id", ContentType.HENTAI)
@MangaSourceParser("KOMIKDEWASA", "komikRemaja.cfd", "id", ContentType.HENTAI)
internal class KomikDewasaParser(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.KOMIKDEWASA, "komikremaja.club", pageSize = 20, searchPageSize = 10) {
MangaReaderParser(context, MangaSource.KOMIKDEWASA, "komikremaja.cfd", pageSize = 20, searchPageSize = 10) {
override val listUrl: String = "/komik"
override val sourceLocale: Locale = Locale.ENGLISH
}

@ -6,9 +6,9 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
import java.util.*
@MangaSourceParser("KOMIKLOKAL", "KomikLokal", "id")
@MangaSourceParser("KOMIKLOKAL", "KomikMirror", "id")
internal class KomikLokalParser(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.KOMIKLOKAL, "komikmirror.art", pageSize = 20, searchPageSize = 10) {
MangaReaderParser(context, MangaSource.KOMIKLOKAL, "komikmirror.sbs", pageSize = 20, searchPageSize = 10) {
override val datePattern = "MMM d, yyyy"
override val sourceLocale: Locale = Locale.ENGLISH
}

@ -7,7 +7,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("MANGAKYO", "MangaKyo", "id")
internal class Mangakyo(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.MANGAKYO, "mangakyo.org", pageSize = 40, searchPageSize = 20) {
MangaReaderParser(context, MangaSource.MANGAKYO, "mangakyo.vip", pageSize = 40, searchPageSize = 20) {
override val listUrl = "/komik"
override val datePattern = "MMM d, yyyy"
}

@ -7,8 +7,8 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
import java.util.*
@MangaSourceParser("MANHWAINDOICU", "ManhwaIndo.icu", "id", ContentType.HENTAI)
@MangaSourceParser("MANHWAINDOICU", "ManhwaIndo.sbs", "id", ContentType.HENTAI)
internal class ManhwaIndoIcu(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.MANHWAINDOICU, "manhwaindo.icu", pageSize = 30, searchPageSize = 10) {
MangaReaderParser(context, MangaSource.MANHWAINDOICU, "manhwaindo.sbs", pageSize = 30, searchPageSize = 10) {
override val sourceLocale: Locale = Locale.ENGLISH
}

@ -9,6 +9,4 @@ import java.util.*
@MangaSourceParser("MANHWALAND", "ManhwaLand", "id", ContentType.HENTAI)
internal class ManhwaLand(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.MANHWALAND, "manhwaland.lat", pageSize = 20, searchPageSize = 10) {
override val sourceLocale: Locale = Locale.ENGLISH
}
MangaReaderParser(context, MangaSource.MANHWALAND, "62.182.80.253", pageSize = 20, searchPageSize = 10)

@ -8,6 +8,6 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("MANHWADESU", "ManhwaDesu", "id", ContentType.HENTAI)
internal class ManhwadesuParser(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.MANHWADESU, "manhwadesu.one", pageSize = 20, searchPageSize = 10) {
MangaReaderParser(context, MangaSource.MANHWADESU, "manhwadesu.bio", pageSize = 20, searchPageSize = 10) {
override val listUrl = "/komik"
}

@ -6,8 +6,6 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
import java.util.Locale
@MangaSourceParser("MELOKOMIK", "Warpasar", "id")
@MangaSourceParser("MELOKOMIK", "Wowomik", "id")
internal class Melokomik(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.MELOKOMIK, "warpasar.com", pageSize = 20, searchPageSize = 10) {
override val sourceLocale: Locale = Locale.ENGLISH
}
MangaReaderParser(context, MangaSource.MELOKOMIK, "wowomik.com", pageSize = 20, searchPageSize = 10)

@ -7,8 +7,8 @@ import org.koitharu.kotatsu.parsers.site.mmrcms.MmrcmsParser
import java.util.*
//the search doesn't work on the source.
@MangaSourceParser("JPSCANVF", "JpScan-vf", "fr")
@MangaSourceParser("JPSCANVF", "LireScanVf.com", "fr")
internal class JpScanVf(context: MangaLoaderContext) :
MmrcmsParser(context, MangaSource.JPSCANVF, "jpscan-vf.net") {
MmrcmsParser(context, MangaSource.JPSCANVF, "lirescanvf.com") {
override val sourceLocale: Locale = Locale.ENGLISH
}

@ -1,11 +1,10 @@
package org.koitharu.kotatsu.parsers.site.fr
package org.koitharu.kotatsu.parsers.site.scan
import androidx.collection.ArrayMap
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import org.koitharu.kotatsu.parsers.ErrorMessages
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.PagedMangaParser
import org.koitharu.kotatsu.parsers.config.ConfigKey
import org.koitharu.kotatsu.parsers.model.*
@ -13,14 +12,17 @@ import org.koitharu.kotatsu.parsers.util.*
import java.text.SimpleDateFormat
import java.util.*
@MangaSourceParser("SCANVFORG", "ScanVfOrg", "fr")
internal class ScanVfOrg(context: MangaLoaderContext) :
PagedMangaParser(context, MangaSource.SCANVFORG, 0) {
internal abstract class ScanParser(
context: MangaLoaderContext,
source: MangaSource,
domain: String,
pageSize: Int = 0,
) : PagedMangaParser(context, source, pageSize) {
override val availableSortOrders: Set<SortOrder> =
EnumSet.of(SortOrder.ALPHABETICAL, SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.RATING)
override val configKeyDomain = ConfigKey.Domain("scanvf.org")
override val configKeyDomain = ConfigKey.Domain(domain)
override suspend fun getListPage(page: Int, filter: MangaListFilter?): List<Manga> {
@ -69,7 +71,7 @@ internal class ScanVfOrg(context: MangaLoaderContext) :
id = generateUid(href),
url = href,
publicUrl = href.toAbsoluteUrl(div.host ?: domain),
coverUrl = div.selectFirst("img")?.src().orEmpty(),
coverUrl = div.selectFirst("img")?.attr("data-src")?.replace("\t", "").orEmpty(),
title = div.selectFirstOrThrow(".link-series h3").text().orEmpty(),
altTitle = null,
rating = RATING_UNKNOWN,
@ -111,16 +113,16 @@ internal class ScanVfOrg(context: MangaLoaderContext) :
val doc = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml()
val dateFormat = SimpleDateFormat("MM-dd-yyyy", sourceLocale)
val tagMap = getOrCreateTagMap()
val selectTag = doc.select(".card-series-detail .col-6:contains(Categories) div")
val selectTag = doc.select(".card-series-detail .col-6:contains(Categorie) div")
val tags = selectTag.mapNotNullToSet { tagMap[it.text()] }
return manga.copy(
rating = doc.selectFirst(".card-series-detail .rate-value span")?.ownText()?.toFloatOrNull()?.div(5f)
?: RATING_UNKNOWN,
tags = tags,
author = doc.selectFirst(".card-series-detail .col-6:contains(Auteur) div")?.text(),
author = doc.selectFirst(".card-series-detail .col-6:contains(Autore) div")?.text(),
altTitle = doc.selectFirst(".card div.col-12.mb-4 h2")?.text().orEmpty(),
description = doc.selectFirst(".card div.col-12.mb-4 p")?.html().orEmpty(),
chapters = doc.select(".list-books .col-chapter").mapChapters(reversed = true) { i, div ->
chapters = doc.select(".chapters-list .col-chapter").mapChapters(reversed = true) { i, div ->
val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href")
MangaChapter(
id = generateUid(href),

@ -0,0 +1,10 @@
package org.koitharu.kotatsu.parsers.site.scan.fr
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.scan.ScanParser
@MangaSourceParser("SCANVFORG", "ScanVf.org", "fr")
internal class ScanVfOrg(context: MangaLoaderContext) :
ScanParser(context, MangaSource.SCANVFORG, "scanvf.org")

@ -0,0 +1,10 @@
package org.koitharu.kotatsu.parsers.site.scan.it
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.scan.ScanParser
@MangaSourceParser("SCANITA", "ScanIta.org", "it")
internal class ScanIta(context: MangaLoaderContext) :
ScanParser(context, MangaSource.SCANITA, "scanita.org")

@ -14,7 +14,7 @@ class YaoiFlix(context: MangaLoaderContext) : PagedMangaParser(context, MangaSou
override val availableSortOrders: Set<SortOrder> = EnumSet.of(SortOrder.UPDATED)
override val configKeyDomain = ConfigKey.Domain("www.yaoiflix.pro")
override val configKeyDomain = ConfigKey.Domain("www.yaoiflix.live")
override val isMultipleTagsSupported = false

@ -5,6 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.wpcomics.WpComicsParser
@MangaSourceParser("NHATTRUYENMIN", "NhattruyenMin", "vi")
@MangaSourceParser("NHATTRUYENMIN", "NhattruyenPlus", "vi")
internal class Nhattruyenmin(context: MangaLoaderContext) :
WpComicsParser(context, MangaSource.NHATTRUYENMIN, "nhattruyenmin.com")
WpComicsParser(context, MangaSource.NHATTRUYENMIN, "nhattruyenplus.com")

@ -7,6 +7,6 @@ import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser
@MangaSourceParser("MANGAATREND", "MangaATrend", "ar")
internal class Mangaatrend(context: MangaLoaderContext) :
ZeistMangaParser(context, MangaSource.MANGAATREND, "mangaatrend.net") {
ZeistMangaParser(context, MangaSource.MANGAATREND, "www.mangaatrend.net") {
override val selectPage = "#seoneurons-target img"
}

Loading…
Cancel
Save