From cd468df9ad828c4bbb5444321c0f6b2c6521dffc Mon Sep 17 00:00:00 2001 From: devi Date: Wed, 10 Jul 2024 20:17:06 +0200 Subject: [PATCH] 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 --- .../parsers/site/es/TuMangaOnlineParser.kt | 6 ++- .../parsers/site/fr/BentomangaParser.kt | 3 +- .../site/galleryadults/GalleryAdultsParser.kt | 3 +- .../site/galleryadults/all/HentaiEra.kt | 3 +- .../parsers/site/gattsu/GattsuParser.kt | 3 +- .../kotatsu/parsers/site/guya/GuyaParser.kt | 3 +- .../parsers/site/id/DoujinDesuParser.kt | 3 +- .../parsers/site/it/mangaworld/MangaWorld.kt | 2 +- .../site/it/mangaworld/MangaWorldParser.kt | 23 +++++++--- .../parsers/site/likemanga/LikeMangaParser.kt | 3 +- .../parsers/site/madara/ar/RocksManga.kt | 41 ++++++++++++++++- .../en/{Paragonscans.kt => MangaTxTo.kt} | 8 ++-- .../parsers/site/madara/en/StoneScape.kt | 13 ++++++ .../parsers/site/madara/en/TcbScansManga.kt | 12 +++++ .../parsers/site/madara/en/ZinChanManga.kt | 11 +++++ .../parsers/site/madara/pt/CrystalScan.kt | 4 +- .../parsers/site/madara/pt/GalinhaSamurai.kt | 3 +- .../parsers/site/madara/pt/KakuseiProject.kt | 2 +- .../kotatsu/parsers/site/madara/pt/Kalango.kt | 14 ++++++ .../parsers/site/madara/pt/NinjaScan.kt | 4 +- .../parsers/site/madara/pt/SinensisScans.kt | 2 + .../parsers/site/mangareader/ar/PeachBl.kt | 14 ++++++ .../site/mangareader/ar/ThunderScans.kt | 1 + .../parsers/site/mangareader/en/ErosScans.kt | 10 +++++ .../site/mangareader/en/FlameComics.kt | 2 +- .../parsers/site/mangareader/en/KaiScans.kt | 1 - .../site/mangareader/en/LuminousScans.kt | 2 +- .../site/mangareader/id/AlterkaiScans.kt | 13 ++++++ .../parsers/site/mangareader/id/Ngomik.kt | 13 ++++++ .../otakusanctuary/OtakuSanctuaryParser.kt | 3 +- .../parsers/site/pt/LuratoonScansParser.kt | 6 ++- .../kotatsu/parsers/site/pt/YugenMangas.kt | 44 ++++++++----------- .../kotatsu/parsers/site/ru/AComics.kt | 3 +- .../parsers/site/ru/rulib/LibSocialParser.kt | 4 +- .../parsers/site/vi/BlogTruyenParser.kt | 3 +- .../kotatsu/parsers/site/vi/HentaiVNParser.kt | 3 +- .../kotatsu/parsers/site/vi/LxManga.kt | 3 +- .../parsers/site/vi/TruyentranhLHParser.kt | 3 +- .../kotatsu/parsers/site/vmp/VmpParser.kt | 3 +- .../parsers/site/zeistmanga/pt/RaysScan.kt | 17 +++++++ .../parsers/site/zeistmanga/pt/SolooScan.kt | 15 +++++++ .../site/zeistmanga/pt/TemakiMangas.kt | 17 +++++++ 42 files changed, 278 insertions(+), 68 deletions(-) rename src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/{Paragonscans.kt => MangaTxTo.kt} (53%) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StoneScape.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TcbScansManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinChanManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Kalango.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/PeachBl.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ErosScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/AlterkaiScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Ngomik.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/RaysScan.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/SolooScan.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/TemakiMangas.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/es/TuMangaOnlineParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/es/TuMangaOnlineParser.kt index 9a7cb14c..03bdb293 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/es/TuMangaOnlineParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/es/TuMangaOnlineParser.kt @@ -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, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/BentomangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/BentomangaParser.kt index f747b227..0e239c4b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/BentomangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/BentomangaParser.kt @@ -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") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/galleryadults/GalleryAdultsParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/galleryadults/GalleryAdultsParser.kt index e4b70d0b..f908e9d9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/galleryadults/GalleryAdultsParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/galleryadults/GalleryAdultsParser.kt @@ -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, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/galleryadults/all/HentaiEra.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/galleryadults/all/HentaiEra.kt index dccc423c..8e9b0047 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/galleryadults/all/HentaiEra.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/galleryadults/all/HentaiEra.kt @@ -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, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/gattsu/GattsuParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/gattsu/GattsuParser.kt index 80bb6a6b..5cb7ab3d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/gattsu/GattsuParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/gattsu/GattsuParser.kt @@ -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, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/guya/GuyaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/guya/GuyaParser.kt index 66f59eef..07b4f476 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/guya/GuyaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/guya/GuyaParser.kt @@ -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, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/id/DoujinDesuParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/id/DoujinDesuParser.kt index 4dfa52e1..19084598 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/id/DoujinDesuParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/id/DoujinDesuParser.kt @@ -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()), diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/it/mangaworld/MangaWorld.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/it/mangaworld/MangaWorld.kt index e9d2632f..7ffc5cf6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/it/mangaworld/MangaWorld.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/it/mangaworld/MangaWorld.kt @@ -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") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/it/mangaworld/MangaWorldParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/it/mangaworld/MangaWorldParser.kt index 45be8dbd..7b0bd5fd 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/it/mangaworld/MangaWorldParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/it/mangaworld/MangaWorldParser.kt @@ -10,20 +10,27 @@ import java.text.SimpleDateFormat import java.util.* abstract class MangaWorldParser( - context: MangaLoaderContext, - source: MangaSource, - domain: String, - pageSize: Int = 16 + context: MangaLoaderContext, + source: MangaSource, + domain: String, + pageSize: Int = 16, ) : PagedMangaParser(context, source, pageSize) { override val availableSortOrders: Set = - 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 = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED, MangaState.ABANDONED, MangaState.PAUSED) + override val availableStates: Set = + 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?") } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/likemanga/LikeMangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/likemanga/LikeMangaParser.kt index 1a8047b5..c955364a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/likemanga/LikeMangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/likemanga/LikeMangaParser.kt @@ -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( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/RocksManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/RocksManga.kt index c8636810..d372faed 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/RocksManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/RocksManga.kt @@ -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 { + 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, + ) + } + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Paragonscans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTxTo.kt similarity index 53% rename from src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Paragonscans.kt rename to src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTxTo.kt index 2abb29c9..7f3149fd 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Paragonscans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTxTo.kt @@ -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/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StoneScape.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StoneScape.kt new file mode 100644 index 00000000..cc0fd9cb --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StoneScape.kt @@ -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/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TcbScansManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TcbScansManga.kt new file mode 100644 index 00000000..0555715c --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TcbScansManga.kt @@ -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" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinChanManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinChanManga.kt new file mode 100644 index 00000000..5d56c48d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinChanManga.kt @@ -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) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CrystalScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CrystalScan.kt index 993701db..053e7dfc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CrystalScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CrystalScan.kt @@ -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") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/GalinhaSamurai.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/GalinhaSamurai.kt index 063c8200..bde9ae36 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/GalinhaSamurai.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/GalinhaSamurai.kt @@ -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 } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/KakuseiProject.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/KakuseiProject.kt index 20be0e9a..441c7e2f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/KakuseiProject.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/KakuseiProject.kt @@ -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) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Kalango.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Kalango.kt new file mode 100644 index 00000000..8d944c9c --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Kalango.kt @@ -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 +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/NinjaScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/NinjaScan.kt index f056d7aa..e75adcb5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/NinjaScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/NinjaScan.kt @@ -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" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/SinensisScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/SinensisScans.kt index b37cf2ea..3b7845e2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/SinensisScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/SinensisScans.kt @@ -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") { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/PeachBl.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/PeachBl.kt new file mode 100644 index 00000000..946096f2 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/PeachBl.kt @@ -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 +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/ThunderScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/ThunderScans.kt index 400fa3f1..d8f8a72d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/ThunderScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/ThunderScans.kt @@ -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" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ErosScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ErosScans.kt new file mode 100644 index 00000000..afaf77c5 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ErosScans.kt @@ -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) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FlameComics.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FlameComics.kt index fcdc78d5..95938ed2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FlameComics.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FlameComics.kt @@ -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" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/KaiScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/KaiScans.kt index 608eb9dd..af5ad5f1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/KaiScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/KaiScans.kt @@ -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 } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LuminousScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LuminousScans.kt index c72749f8..fc2ac11c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LuminousScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LuminousScans.kt @@ -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 } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/AlterkaiScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/AlterkaiScans.kt new file mode 100644 index 00000000..6e64d5c1 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/AlterkaiScans.kt @@ -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 +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Ngomik.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Ngomik.kt new file mode 100644 index 00000000..e87b6390 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Ngomik.kt @@ -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 +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/otakusanctuary/OtakuSanctuaryParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/otakusanctuary/OtakuSanctuaryParser.kt index 8d454c84..b1d032ca 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/otakusanctuary/OtakuSanctuaryParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/otakusanctuary/OtakuSanctuaryParser.kt @@ -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( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/LuratoonScansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/LuratoonScansParser.kt index 422374e1..f34f29e8 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/LuratoonScansParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/LuratoonScansParser.kt @@ -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()) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/YugenMangas.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/YugenMangas.kt index 3dc110c3..6c240306 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/YugenMangas.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/YugenMangas.kt @@ -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 = EnumSet.of(SortOrder.ALPHABETICAL, SortOrder.UPDATED) - override val configKeyDomain = ConfigKey.Domain("yugenmangas.net.br") + override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED) + override val configKeyDomain = ConfigKey.Domain("yugenapp.lat") override suspend fun getListPage(page: Int, filter: MangaListFilter?): List { @@ -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") + val url = buildString { + append("https://api.") + append(domain) + append("/api/latest_updates/") } - + webClient.httpGet(url).parseJsonArray() } 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,11 +87,12 @@ 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() - .getJSONArray("chapters") + 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( description = detailManga.getString("synopsis"), @@ -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(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), diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/AComics.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/AComics.kt index 32102ffc..291e5762 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/AComics.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/AComics.kt @@ -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, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/rulib/LibSocialParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/rulib/LibSocialParser.kt index b81aa404..44d751b0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/rulib/LibSocialParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/rulib/LibSocialParser.kt @@ -87,7 +87,7 @@ internal abstract class LibSocialParser( SortOrder.NEWEST -> "created_at" SortOrder.ALPHABETICAL, SortOrder.ALPHABETICAL_DESC, - -> "rus_name" + -> "rus_name" }, ) urlBuilder.addQueryParameter( @@ -98,7 +98,7 @@ internal abstract class LibSocialParser( SortOrder.RATING, SortOrder.NEWEST, SortOrder.ALPHABETICAL_DESC, - -> "desc" + -> "desc" SortOrder.ALPHABETICAL -> "asc" }, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/BlogTruyenParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/BlogTruyenParser.kt index f5bee237..b8827f12 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/BlogTruyenParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/BlogTruyenParser.kt @@ -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, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/HentaiVNParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/HentaiVNParser.kt index d5ea7409..87375c53 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/HentaiVNParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/HentaiVNParser.kt @@ -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), diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/LxManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/LxManga.kt index 98669335..26de65fe 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/LxManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/LxManga.kt @@ -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), diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/TruyentranhLHParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/TruyentranhLHParser.kt index e8c1effe..cb69e77e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/TruyentranhLHParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/TruyentranhLHParser.kt @@ -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()), diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vmp/VmpParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vmp/VmpParser.kt index 69b9c256..3e0faebd 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vmp/VmpParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vmp/VmpParser.kt @@ -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, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/RaysScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/RaysScan.kt new file mode 100644 index 00000000..4071eea9 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/RaysScan.kt @@ -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 = emptySet() + override suspend fun getAvailableTags(): Set = emptySet() +} + + diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/SolooScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/SolooScan.kt new file mode 100644 index 00000000..3bd59fa6 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/SolooScan.kt @@ -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" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/TemakiMangas.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/TemakiMangas.kt new file mode 100644 index 00000000..ba728ea7 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/TemakiMangas.kt @@ -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 = emptySet() + override suspend fun getAvailableTags(): Set = emptySet() +} + +