From 327c05d03edfa4960ef9fd232e178bcc5c326ad8 Mon Sep 17 00:00:00 2001 From: devi Date: Sat, 30 Dec 2023 11:09:56 +0100 Subject: [PATCH] Fix Chapters madtheme Url NettruyenBing Remove Dead Sources : AkuManga , CmReader, FalconManga, JaiminisBox, Manga3s, MangaCv, MangaLeks, UniToonOficial , 1stKissManga.tv, Manhwa2read, ManhuaMix, ManhuaDex, Hwago, ImmortalUpdates, KomikSay, MangaTx, Scan-Fr.org, QueenScans, PhantomScans, OpScanlations, NeuManga.net, ManhwaFreak.fr, Lady Estelar Scan, KomikManhwa, KomikManga, KaratcamScans, Boosei, LyraScans, MangaDiyari, MangaPro, NHentai.uk, Oxapk, SpiderScans, MangaNelo.biz, MangaOnline.team, SpartanManga --- .../site/galleryadults/all/NHentaiUk.kt | 88 ------- .../parsers/site/madara/ar/AkuManga.kt | 13 -- .../parsers/site/madara/ar/FalconManga.kt | 12 - .../parsers/site/madara/ar/MangaLeks.kt | 13 -- .../parsers/site/madara/en/CmReader.kt | 9 - .../parsers/site/madara/en/Jaiminisbox.kt | 10 - .../kotatsu/parsers/site/madara/en/Manga3s.kt | 12 - .../kotatsu/parsers/site/madara/en/MangaCv.kt | 12 - .../parsers/site/madara/en/MangaOnline.kt | 10 - .../kotatsu/parsers/site/madara/en/MangaTx.kt | 12 - .../parsers/site/madara/en/Manganelo.kt | 12 - .../parsers/site/madara/en/ManhuaDex.kt | 10 - .../parsers/site/madara/en/Manhuamix.kt | 13 -- .../parsers/site/madara/en/Manhwa2Read.kt | 10 - .../parsers/site/madara/en/StkissMangaTv.kt | 12 - .../parsers/site/madara/es/UniToonOficial.kt | 13 -- .../parsers/site/madara/fr/KaratcamScans.kt | 14 -- .../kotatsu/parsers/site/madara/id/Hwago.kt | 15 -- .../site/madara/id/ImmortalUpdatesId.kt | 14 -- .../parsers/site/madara/id/Komiksay.kt | 16 -- .../parsers/site/madara/pt/LadyestelarScan.kt | 12 - .../parsers/site/madara/tr/MangaDiyari.kt | 10 - .../parsers/site/madtheme/MadthemeParser.kt | 5 +- .../parsers/site/madtheme/en/MangaJinx.kt | 29 +++ .../parsers/site/madtheme/en/ManhuaScan.kt | 27 +++ .../parsers/site/mangareader/ar/MangaProtm.kt | 10 - .../parsers/site/mangareader/ar/Oxapk.kt | 89 -------- .../site/mangareader/ar/SpiderScans.kt | 10 - .../parsers/site/mangareader/en/Edomae.kt | 13 -- .../parsers/site/mangareader/en/LyraScans.kt | 10 - .../parsers/site/mangareader/en/OpScans.kt | 10 - .../site/mangareader/en/Phantomscans.kt | 12 - .../parsers/site/mangareader/en/QueenScans.kt | 10 - .../site/mangareader/fr/ManhwaFreakFr.kt | 215 ------------------ .../parsers/site/mangareader/id/Boosei.kt | 12 - .../site/mangareader/id/KomikMangaParser.kt | 16 -- .../site/mangareader/id/KomikManhwa.kt | 14 -- .../site/mangareader/tr/SpartanManga.kt | 11 - .../parsers/site/mmrcms/fr/ScanFrOrg.kt | 15 -- .../parsers/site/wpcomics/vi/Nettruyenmax.kt | 4 +- .../parsers/site/zeistmanga/id/MonzeeKomik.kt | 15 +- .../parsers/site/zmanga/id/NeuManga.kt | 10 - 42 files changed, 69 insertions(+), 810 deletions(-) delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/galleryadults/all/NHentaiUk.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/AkuManga.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/FalconManga.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLeks.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CmReader.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Jaiminisbox.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga3s.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaCv.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaOnline.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTx.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manganelo.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhuaDex.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuamix.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa2Read.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StkissMangaTv.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/UniToonOficial.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/KaratcamScans.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Hwago.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ImmortalUpdatesId.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Komiksay.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LadyestelarScan.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaDiyari.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/MangaProtm.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Oxapk.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/SpiderScans.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Edomae.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LyraScans.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/OpScans.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Phantomscans.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/QueenScans.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/ManhwaFreakFr.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Boosei.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikMangaParser.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikManhwa.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/SpartanManga.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/fr/ScanFrOrg.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/zmanga/id/NeuManga.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/galleryadults/all/NHentaiUk.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/galleryadults/all/NHentaiUk.kt deleted file mode 100644 index 643eeec7..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/galleryadults/all/NHentaiUk.kt +++ /dev/null @@ -1,88 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.galleryadults.all - -import org.koitharu.kotatsu.parsers.ErrorMessages -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.site.galleryadults.GalleryAdultsParser -import org.koitharu.kotatsu.parsers.util.* -import java.util.* - -@MangaSourceParser("NHENTAIUK", "NHentai.uk", type = ContentType.HENTAI) -internal class NHentaiUk(context: MangaLoaderContext) : - GalleryAdultsParser(context, MangaSource.NHENTAIUK, "nhentai.uk", pageSize = 50) { - override val selectGallery = ".gallery" - override val selectGalleryLink = "a" - override val selectGalleryTitle = ".caption" - override val pathTagUrl = "/tags/popular?p=" - override val selectTags = "#tag-container" - override val selectTag = "div.tag-container:contains(Tags:) span.tags" - override val selectAuthor = "div.tag-container:contains(Artists:) a" - override val selectLanguageChapter = "div.tag-container:contains(Languages:) a" - override val idImg = "image-container" - - override suspend fun getAvailableLocales(): Set = setOf( - Locale.ENGLISH, - Locale.FRENCH, - Locale.JAPANESE, - Locale.CHINESE, - Locale("es"), - Locale("ru"), - Locale("ko"), - Locale.GERMAN, - Locale("pt"), - Locale.ITALIAN, - Locale("tr"), - ) - - override suspend fun getListPage(page: Int, filter: MangaListFilter?): List { - - val url = buildString { - append("https://") - append(domain) - when (filter) { - - is MangaListFilter.Search -> { - throw IllegalArgumentException(ErrorMessages.SEARCH_NOT_SUPPORTED) - } - - is MangaListFilter.Advanced -> { - when { - filter.locale != null && filter.tags.isNotEmpty() -> { - throw IllegalArgumentException(ErrorMessages.FILTER_BOTH_LOCALE_GENRES_NOT_SUPPORTED) - } - - filter.locale != null -> { - append("/language") - append(filter.locale.toLanguagePath()) - append("/?p=") - } - - filter.tags.isNotEmpty() -> { - filter.tags.oneOrThrowIfMany()?.let { - append("/tag/") - append(it.key) - } - append("/?p=") - } - - else -> { - append("/home?p=") - } - } - } - - null -> append("/?") - } - append(page.toString()) - } - - return parseMangaList(webClient.httpGet(url).parseHtml()) - } - - override suspend fun getPageUrl(page: MangaPage): String { - val doc = webClient.httpGet(page.url.toAbsoluteUrl(domain)).parseHtml() - val root = doc.body() - return root.requireElementById(idImg).selectFirstOrThrow("img").src() ?: root.parseFailed("Image src not found") - } -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/AkuManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/AkuManga.kt deleted file mode 100644 index d62e1a65..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/AkuManga.kt +++ /dev/null @@ -1,13 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara.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.madara.MadaraParser -import java.util.Locale - -@MangaSourceParser("AKUMANGA", "AkuManga", "ar") -internal class AkuManga(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.AKUMANGA, "akumanga.com") { - override val sourceLocale: Locale = Locale.ENGLISH -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/FalconManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/FalconManga.kt deleted file mode 100644 index 1be5cdec..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/FalconManga.kt +++ /dev/null @@ -1,12 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara.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.madara.MadaraParser - -@MangaSourceParser("FALCONMANGA", "FalconManga", "ar") -internal class FalconManga(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.FALCONMANGA, "falconmanga.com") { - override val datePattern = "d MMMM، yyyy" -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLeks.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLeks.kt deleted file mode 100644 index a0b58c74..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLeks.kt +++ /dev/null @@ -1,13 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara.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.madara.MadaraParser - -@MangaSourceParser("MANGALEKS", "MangaLeks", "ar") -internal class MangaLeks(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANGALEKS, "mangaleks.com") { - override val datePattern = "yyyy/MM/dd" - override val postReq = true -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CmReader.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CmReader.kt deleted file mode 100644 index aee5e7f8..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CmReader.kt +++ /dev/null @@ -1,9 +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("CM_READER", "CmReader", "en") -internal class CmReader(context: MangaLoaderContext) : MadaraParser(context, MangaSource.CM_READER, "cmreader.info") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Jaiminisbox.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Jaiminisbox.kt deleted file mode 100644 index 6e7dcf8f..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Jaiminisbox.kt +++ /dev/null @@ -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("JAIMINISBOX", "JaiminisBox", "en") -internal class Jaiminisbox(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.JAIMINISBOX, "jaiminisbox.net") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga3s.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga3s.kt deleted file mode 100644 index b7b1b676..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga3s.kt +++ /dev/null @@ -1,12 +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("MANGA_3S", "Manga3s", "en") -internal class Manga3s(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGA_3S, "manga3s.com") { - override val tagPrefix = "manhwa-genre/" - override val datePattern = "MMMM dd, yyyy" -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaCv.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaCv.kt deleted file mode 100644 index b5ebc368..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaCv.kt +++ /dev/null @@ -1,12 +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("MANGACV", "MangaCv", "en") -internal class MangaCv(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANGACV, "mangacv.com", pageSize = 10) { - override val datePattern = "MMMM dd, yyyy" -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaOnline.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaOnline.kt deleted file mode 100644 index b6f3684b..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaOnline.kt +++ /dev/null @@ -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("MANGA_ONLINE", "MangaOnline.team", "en") -internal class MangaOnline(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANGA_ONLINE, "mangaonline.team", 18) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTx.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTx.kt deleted file mode 100644 index c05e9812..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTx.kt +++ /dev/null @@ -1,12 +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("MANGATX", "MangaTx", "en") -internal class MangaTx(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANGATX, "mangatx.com") { - override val datePattern = "MMMM dd, yyyy" -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manganelo.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manganelo.kt deleted file mode 100644 index c713c642..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manganelo.kt +++ /dev/null @@ -1,12 +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("MANGANELO", "MangaNelo.biz", "en") -internal class Manganelo(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANGANELO, "manganelo.biz", 10) { - override val postReq = true -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhuaDex.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhuaDex.kt deleted file mode 100644 index 34febb34..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhuaDex.kt +++ /dev/null @@ -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("MANHUADEX", "ManhuaDex", "en") -internal class ManhuaDex(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANHUADEX, "manhuadex.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuamix.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuamix.kt deleted file mode 100644 index 4685237e..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuamix.kt +++ /dev/null @@ -1,13 +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("MANHUAMIX", "ManhuaMix", "en") -internal class Manhuamix(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANHUAMIX, "manhuamix.com", 20) { - override val tagPrefix = "manhua-genre/" - override val listUrl = "manhua/" -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa2Read.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa2Read.kt deleted file mode 100644 index 92da295b..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa2Read.kt +++ /dev/null @@ -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("MANHWA2READ", "Manhwa2read", "en") -internal class Manhwa2Read(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANHWA2READ, "manhwa2read.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StkissMangaTv.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StkissMangaTv.kt deleted file mode 100644 index a328d59b..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/StkissMangaTv.kt +++ /dev/null @@ -1,12 +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("STKISSMANGA_TV", "1stKissManga.tv", "en") -internal class StkissMangaTv(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.STKISSMANGA_TV, "1stkissmanga.tv", 20) { - override val postReq = true -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/UniToonOficial.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/UniToonOficial.kt deleted file mode 100644 index 9cdc723d..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/UniToonOficial.kt +++ /dev/null @@ -1,13 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara.es - -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.site.madara.MadaraParser - -@MangaSourceParser("UNITOONOFICIAL", "UniToonOficial", "es") -internal class UniToonOficial(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.UNITOONOFICIAL, "unitoonoficial.com") { - override val datePattern = "dd/MM/yyyy" - override val tagPrefix = "generos/" -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/KaratcamScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/KaratcamScans.kt deleted file mode 100644 index ba3a27a6..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/KaratcamScans.kt +++ /dev/null @@ -1,14 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara.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.madara.MadaraParser - -@MangaSourceParser("KARATCAMSCANS", "KaratcamScans", "fr") -internal class KaratcamScans(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.KARATCAMSCANS, "karatcam-scans.fr") { - override val tagPrefix = "webtoon-genre/" - override val listUrl = "webtoon/" - override val datePattern = "dd/MM/yyyy" -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Hwago.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Hwago.kt deleted file mode 100644 index 05671175..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Hwago.kt +++ /dev/null @@ -1,15 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara.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.madara.MadaraParser -import java.util.Locale - -@MangaSourceParser("HWAGO", "Hwago", "id") -internal class Hwago(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.HWAGO, "hwago.id", 10) { - override val listUrl = "komik/" - override val tagPrefix = "genre/" - override val sourceLocale: Locale = Locale.ENGLISH -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ImmortalUpdatesId.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ImmortalUpdatesId.kt deleted file mode 100644 index 514833e2..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ImmortalUpdatesId.kt +++ /dev/null @@ -1,14 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara.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.madara.MadaraParser -import java.util.Locale - -@MangaSourceParser("IMMORTALUPDATESID", "ImmortalUpdates", "id") -internal class ImmortalUpdatesId(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.IMMORTALUPDATESID, "immortalupdates.id") { - override val datePattern = "d MMMM yyyy" - override val sourceLocale: Locale = Locale.ENGLISH -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Komiksay.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Komiksay.kt deleted file mode 100644 index 58ee0ace..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Komiksay.kt +++ /dev/null @@ -1,16 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara.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.madara.MadaraParser -import java.util.Locale - -@MangaSourceParser("KOMIKSA", "KomikSay", "id") -internal class Komiksay(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.KOMIKSA, "komiksay.site") { - override val tagPrefix = "komik-genre/" - override val listUrl = "komik/" - override val datePattern = "MMMM d" - override val sourceLocale: Locale = Locale.ENGLISH -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LadyestelarScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LadyestelarScan.kt deleted file mode 100644 index c2943ab9..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LadyestelarScan.kt +++ /dev/null @@ -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("LADYESTELARSCAN", "Lady Estelar Scan", "pt") -internal class LadyestelarScan(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.LADYESTELARSCAN, "ladyestelarscan.com.br", 10) { - override val datePattern: String = "dd/MM/yyyy" -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaDiyari.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaDiyari.kt deleted file mode 100644 index 1b2c5af4..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaDiyari.kt +++ /dev/null @@ -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("MANGADIYARI", "MangaDiyari", "tr") -internal class MangaDiyari(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANGADIYARI, "manga-diyari.com", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/MadthemeParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/MadthemeParser.kt index 7fc91319..40aef21e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/MadthemeParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/MadthemeParser.kt @@ -197,7 +197,10 @@ internal abstract class MadthemeParser( protected open suspend fun getChapters(doc: Document): List { val dateFormat = SimpleDateFormat(datePattern, sourceLocale) - return doc.body().select(selectChapter).mapChapters(reversed = true) { i, li -> + val slug = doc.selectFirstOrThrow("script:containsData(bookSlug)").data().substringAfter("bookSlug = \"") + .substringBefore("\";") + val docChapter = webClient.httpGet("https://$domain/api/manga/$slug/chapters?source=detail").parseHtml() + return docChapter.select(selectChapter).mapChapters(reversed = true) { i, li -> val a = li.selectFirstOrThrow("a") val href = a.attrAsRelativeUrl("href") val dateText = li.selectFirst(selectDate)?.text() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/en/MangaJinx.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/en/MangaJinx.kt index 0ebbcb33..fa8a1b8c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/en/MangaJinx.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/en/MangaJinx.kt @@ -1,22 +1,51 @@ package org.koitharu.kotatsu.parsers.site.madtheme.en +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.MangaPage import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madtheme.MadthemeParser +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl import org.koitharu.kotatsu.parsers.util.domain import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.mapChapters import org.koitharu.kotatsu.parsers.util.parseHtml import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import java.text.SimpleDateFormat @MangaSourceParser("MANGAJINX", "MangaJinx", "en") internal class MangaJinx(context: MangaLoaderContext) : MadthemeParser(context, MangaSource.MANGAJINX, "mangajinx.com") { override val listUrl = "search" + override suspend fun getChapters(doc: Document): List { + val dateFormat = SimpleDateFormat(datePattern, sourceLocale) + val id = doc.selectFirstOrThrow("script:containsData(bookId)").data().substringAfter("bookId = ") + .substringBefore(";") + val docChapter = webClient.httpGet("https://$domain/service/backend/chaplist/?manga_id=$id").parseHtml() + return docChapter.select(selectChapter).mapChapters(reversed = true) { i, li -> + val a = li.selectFirstOrThrow("a") + val href = a.attrAsRelativeUrl("href") + val dateText = li.selectFirst(selectDate)?.text() + MangaChapter( + id = generateUid(href), + name = li.selectFirstOrThrow(".chapter-title").text(), + number = i + 1, + url = href, + uploadDate = parseChapterDate( + dateFormat, + dateText, + ), + source = source, + scanlator = null, + branch = null, + ) + } + } + override suspend fun getPages(chapter: MangaChapter): List { val chapterUrl = chapter.url.toAbsoluteUrl(domain) val docs = webClient.httpGet(chapterUrl).parseHtml() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/en/ManhuaScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/en/ManhuaScan.kt index 2200ee6c..0d73749c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/en/ManhuaScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/en/ManhuaScan.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madtheme.en +import org.jsoup.nodes.Document import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.* import org.koitharu.kotatsu.parsers.site.madtheme.MadthemeParser import org.koitharu.kotatsu.parsers.util.* +import java.text.SimpleDateFormat import java.util.Locale @MangaSourceParser("MANHUASCAN", "ManhuaScan.io", "en") @@ -94,6 +96,31 @@ internal class ManhuaScan(context: MangaLoaderContext) : } } + override suspend fun getChapters(doc: Document): List { + val dateFormat = SimpleDateFormat(datePattern, sourceLocale) + val id = doc.selectFirstOrThrow("script:containsData(bookId)").data().substringAfter("bookId = ") + .substringBefore(";") + val docChapter = webClient.httpGet("https://$domain/service/backend/chaplist/?manga_id=$id").parseHtml() + return docChapter.select(selectChapter).mapChapters(reversed = true) { i, li -> + val a = li.selectFirstOrThrow("a") + val href = a.attrAsRelativeUrl("href") + val dateText = li.selectFirst(selectDate)?.text() + MangaChapter( + id = generateUid(href), + name = li.selectFirstOrThrow(".chapter-title").text(), + number = i + 1, + url = href, + uploadDate = parseChapterDate( + dateFormat, + dateText, + ), + source = source, + scanlator = null, + branch = null, + ) + } + } + override suspend fun getPages(chapter: MangaChapter): List { val chapterUrl = chapter.url.toAbsoluteUrl(domain) val docs = webClient.httpGet(chapterUrl).parseHtml() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/MangaProtm.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/MangaProtm.kt deleted file mode 100644 index ed0d1e4c..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/MangaProtm.kt +++ /dev/null @@ -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("MANGAPROTM", "MangaPro", "ar") -internal class MangaProtm(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.MANGAPROTM, "mangapro.co", pageSize = 20, searchPageSize = 20) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Oxapk.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Oxapk.kt deleted file mode 100644 index 455dfd6d..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Oxapk.kt +++ /dev/null @@ -1,89 +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.Manga -import org.koitharu.kotatsu.parsers.model.MangaChapter -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.WordSet -import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import org.koitharu.kotatsu.parsers.util.* -import java.text.DateFormat -import java.text.SimpleDateFormat -import java.util.* - -@MangaSourceParser("OXAPK", "Oxapk", "ar") -internal class Oxapk(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.OXAPK, "oxapk.com", pageSize = 24, searchPageSize = 10) { - - override val sourceLocale: Locale = Locale.ENGLISH - - override suspend fun getDetails(manga: Manga): Manga { - val docs = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() - val dateFormat = SimpleDateFormat(datePattern, sourceLocale) - val chapters = docs.select("#chapterlist > ul > li").mapChapters(reversed = true) { index, element -> - val url = element.selectFirst("a")?.attrAsRelativeUrl("href") ?: return@mapChapters null - MangaChapter( - id = generateUid(url), - name = docs.selectFirst("a.chapter-link-item")?.ownText().orEmpty(), - url = url, - number = index + 1, - scanlator = null, - uploadDate = parseChapterDate( - dateFormat, - element.selectFirst("div.chapter-link-time")?.text(), - ), - branch = null, - source = source, - ) - } - return parseInfo(docs, manga, chapters) - } - - private fun parseChapterDate(dateFormat: DateFormat, date: String?): Long { - date ?: return 0 - return when { - date.endsWith("منذ ", ignoreCase = true) -> { - parseRelativeDate(date) - } - - else -> dateFormat.tryParse(date) - } - } - - private fun parseRelativeDate(date: String): Long { - val number = Regex("""(\d+)""").find(date)?.value?.toIntOrNull() ?: return 0 - val cal = Calendar.getInstance() - - return when { - WordSet("أيام").anyWordIn(date) -> cal.apply { add(Calendar.DAY_OF_MONTH, -number) }.timeInMillis - - WordSet("hour", "hours").anyWordIn(date) -> cal.apply { - add( - Calendar.HOUR, - -number, - ) - }.timeInMillis - - WordSet( - "mins", - ).anyWordIn(date) -> cal.apply { - add( - Calendar.MINUTE, - -number, - ) - }.timeInMillis - - WordSet("second").anyWordIn(date) -> cal.apply { - add( - Calendar.SECOND, - -number, - ) - }.timeInMillis - - WordSet("أشهر").anyWordIn(date) -> cal.apply { add(Calendar.MONTH, -number) }.timeInMillis - WordSet("year").anyWordIn(date) -> cal.apply { add(Calendar.YEAR, -number) }.timeInMillis - else -> 0 - } - } -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/SpiderScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/SpiderScans.kt deleted file mode 100644 index 6152f1ed..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/SpiderScans.kt +++ /dev/null @@ -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("SPIDERSCANS", "SpiderScans", "ar") -internal class SpiderScans(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.SPIDERSCANS, "spiderscans.com", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Edomae.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Edomae.kt deleted file mode 100644 index f51a8bad..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Edomae.kt +++ /dev/null @@ -1,13 +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("EDOMAE", "Edomae", "en") -internal class Edomae(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.EDOMAE, "edomae.co", pageSize = 20, searchPageSize = 10) { - override val encodedSrc = true - override val selectScript = "#content script" -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LyraScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LyraScans.kt deleted file mode 100644 index 4a1566e4..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LyraScans.kt +++ /dev/null @@ -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("LYRASCANS", "LyraScans", "en") -internal class LyraScans(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.LYRASCANS, "lyrascans.com", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/OpScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/OpScans.kt deleted file mode 100644 index e6744ba0..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/OpScans.kt +++ /dev/null @@ -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("OPSCANS", "OpScanlations", "en") -internal class OpScans(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.OPSCANS, "opscanlations.com", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Phantomscans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Phantomscans.kt deleted file mode 100644 index 2fa6f91b..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Phantomscans.kt +++ /dev/null @@ -1,12 +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("PHANTOMSCANS", "PhantomScans", "en") -internal class Phantomscans(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.PHANTOMSCANS, "phantomscans.com", pageSize = 20, searchPageSize = 20) { - override val datePattern = "MMM d, yyyy" -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/QueenScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/QueenScans.kt deleted file mode 100644 index dc6d11d6..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/QueenScans.kt +++ /dev/null @@ -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("QUEENSCANS", "QueenScans", "en") -internal class QueenScans(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.QUEENSCANS, "fairymanga.com", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/ManhwaFreakFr.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/ManhwaFreakFr.kt deleted file mode 100644 index ff49525b..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/ManhwaFreakFr.kt +++ /dev/null @@ -1,215 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.mangareader.fr - -import org.jsoup.nodes.Document -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -import org.koitharu.kotatsu.parsers.util.* -import java.text.DateFormat -import java.text.SimpleDateFormat -import java.util.Calendar -import java.util.Locale - -@MangaSourceParser("MANHWA_FREAK_FR", "ManhwaFreak.fr", "fr") -internal class ManhwaFreakFr(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.MANHWA_FREAK_FR, "manhwafreak.fr", pageSize = 0, searchPageSize = 10) { - - override val selectMangaList = ".listupd .lastest-serie" - override val selectMangaListImg = "img" - override val sourceLocale: Locale = Locale.ENGLISH - override val availableStates: Set = emptySet() - override val isMultipleTagsSupported = false - - override suspend fun getListPage(page: Int, filter: MangaListFilter?): List { - val url = buildString { - append("https://") - append(domain) - - when (filter) { - - is MangaListFilter.Search -> { - append("/page/") - append(page.toString()) - append("/?s=") - append(filter.query.urlEncoded()) - } - - is MangaListFilter.Advanced -> { - if (page > 1) { - return emptyList() - } - - if (filter.tags.isNotEmpty()) { - filter.tags.oneOrThrowIfMany()?.let { - append("/genres/?genre=") - append(it.key) - } - } else { - append(listUrl) - append("/?order=") - append( - when (filter.sortOrder) { - SortOrder.ALPHABETICAL -> "az" - SortOrder.NEWEST -> "new" - SortOrder.POPULARITY -> "views" - SortOrder.UPDATED -> "" - else -> "" - }, - ) - } - } - - null -> { - append(listUrl) - } - } - } - return parseMangaList(webClient.httpGet(url).parseHtml()) - } - - override suspend fun getAvailableTags(): Set { - val doc = webClient.httpGet("https://$domain/genres/").parseHtml() - return doc.select("ul.genre-list li a").mapNotNullToSet { a -> - val href = a.attr("href").substringAfterLast("=") - MangaTag( - key = href, - title = a.text(), - source = source, - ) - } - } - - override suspend fun getDetails(manga: Manga): Manga { - val docs = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() - val dateFormat = SimpleDateFormat(datePattern, sourceLocale) - val chapters = docs.select("div.chapter-li a").mapChapters(reversed = true) { index, a -> - val url = a.attrAsRelativeUrl("href") - val dateText = a.selectFirst(".chapter-info p.new")?.text() ?: a.select(".chapter-info p")[1].text() - MangaChapter( - id = generateUid(url), - name = a.selectFirst(".chapter-info p:contains(Chapter)")?.text() ?: "Chapter ${index + 1}", - url = url, - number = index + 1, - scanlator = null, - uploadDate = if (dateText == "NEW") { - parseChapterDate( - dateFormat, - "today", - ) - } else { - parseChapterDate( - dateFormat, - dateText, - ) - }, - branch = null, - source = source, - ) - } - return parseInfo(docs, manga, chapters) - } - - override suspend fun parseInfo(docs: Document, manga: Manga, chapters: List): Manga { - val tagMap = getOrCreateTagMap() - val selectTag = docs.requireElementById("info").select("div:contains(Genre) > p:last-child").text().split(",") - val tags = selectTag.mapNotNullToSet { tagMap[it] } - val mangaState = docs.requireElementById("info").select("div:contains(Status) > p:last-child").text().let { - when (it) { - "Ongoing" -> MangaState.ONGOING - "Completed" -> MangaState.FINISHED - else -> null - } - } - val author = docs.requireElementById("info").select("div:contains(Author(s)) > p:last-child").text() - return manga.copy( - altTitle = docs.requireElementById("info").select("div:contains(Alternative) > p:last-child").text(), - description = docs.requireElementById("summary").html(), - state = mangaState, - author = author, - isNsfw = manga.isNsfw, - tags = tags, - chapters = chapters, - ) - } - - private fun parseChapterDate(dateFormat: DateFormat, date: String?): Long { - // Clean date (e.g. 5th December 2019 to 5 December 2019) before parsing it - val d = date?.lowercase() ?: return 0 - return when { - d.endsWith(" ago") -> parseRelativeDate(date) - // Handle 'yesterday' and 'today', using midnight - d.startsWith("year") -> Calendar.getInstance().apply { - add(Calendar.DAY_OF_MONTH, -1) // yesterday - set(Calendar.HOUR_OF_DAY, 0) - set(Calendar.MINUTE, 0) - set(Calendar.SECOND, 0) - set(Calendar.MILLISECOND, 0) - }.timeInMillis - - d.startsWith("today") -> Calendar.getInstance().apply { - set(Calendar.HOUR_OF_DAY, 0) - set(Calendar.MINUTE, 0) - set(Calendar.SECOND, 0) - set(Calendar.MILLISECOND, 0) - }.timeInMillis - - date.contains(Regex("""\d(st|nd|rd|th)""")) -> date.split(" ").map { - if (it.contains(Regex("""\d\D\D"""))) { - it.replace(Regex("""\D"""), "") - } else { - it - } - }.let { dateFormat.tryParse(it.joinToString(" ")) } - - else -> dateFormat.tryParse(date) - } - } - - // Parses dates in this form: - // 21 hours ago - private fun parseRelativeDate(date: String): Long { - val number = Regex("""(\d+)""").find(date)?.value?.toIntOrNull() ?: return 0 - val cal = Calendar.getInstance() - return when { - WordSet( - "day", - "days", - "d", - ).anyWordIn(date) -> cal.apply { add(Calendar.DAY_OF_MONTH, -number) }.timeInMillis - - WordSet( - "hour", - "hours", - "h", - ).anyWordIn(date) -> cal.apply { - add( - Calendar.HOUR, - -number, - ) - }.timeInMillis - - WordSet( - "minute", - "minutes", - "mins", - ).anyWordIn(date) -> cal.apply { - add( - Calendar.MINUTE, - -number, - ) - }.timeInMillis - - WordSet("second").anyWordIn(date) -> cal.apply { - add( - Calendar.SECOND, - -number, - ) - }.timeInMillis - - WordSet("month", "months").anyWordIn(date) -> cal.apply { add(Calendar.MONTH, -number) }.timeInMillis - WordSet("year").anyWordIn(date) -> cal.apply { add(Calendar.YEAR, -number) }.timeInMillis - else -> 0 - } - } -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Boosei.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Boosei.kt deleted file mode 100644 index 9b0c4073..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Boosei.kt +++ /dev/null @@ -1,12 +0,0 @@ -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 - -@MangaSourceParser("BOOSEI", "Boosei", "id") -internal class Boosei(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.BOOSEI, "boosei.net", pageSize = 30, searchPageSize = 30) { - override val datePattern = "MMM d, yyyy" -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikMangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikMangaParser.kt deleted file mode 100644 index 7e386f8a..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikMangaParser.kt +++ /dev/null @@ -1,16 +0,0 @@ -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.* - -@MangaSourceParser("KOMIKMANGA", "KomikManga", "id") -internal class KomikMangaParser(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.KOMIKMANGA, "komikhentai.co", pageSize = 20, searchPageSize = 10) { - override val listUrl = "/project" - override val datePattern = "MMM d, yyyy" - override val sourceLocale: Locale = Locale.ENGLISH - -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikManhwa.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikManhwa.kt deleted file mode 100644 index 1ac0a1f8..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikManhwa.kt +++ /dev/null @@ -1,14 +0,0 @@ -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.ContentType -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser - -@MangaSourceParser("KOMIKMANHWA", "KomikManhwa", "id", ContentType.HENTAI) -internal class KomikManhwa(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.KOMIKMANHWA, "komikmanhwa.me", pageSize = 20, searchPageSize = 20) { - override val listUrl = "/series" - override val datePattern = "MMM d, yyyy" -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/SpartanManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/SpartanManga.kt deleted file mode 100644 index 95f8fb64..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/SpartanManga.kt +++ /dev/null @@ -1,11 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.mangareader.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.mangareader.MangaReaderParser - -@MangaSourceParser("SPARTANMANGA", "SpartanManga", "tr") -internal class SpartanManga(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.SPARTANMANGA, "spartanmanga.com.tr", pageSize = 40, searchPageSize = 20) - diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/fr/ScanFrOrg.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/fr/ScanFrOrg.kt deleted file mode 100644 index efbf5e5f..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/fr/ScanFrOrg.kt +++ /dev/null @@ -1,15 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.mmrcms.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.mmrcms.MmrcmsParser -import java.util.Locale - -@MangaSourceParser("SCAN_FR_ORG", "Scan-Fr.org", "fr") -internal class ScanFrOrg(context: MangaLoaderContext) : - MmrcmsParser(context, MangaSource.SCAN_FR_ORG, "www.scan-fr.org") { - - override val sourceLocale: Locale = Locale.ENGLISH - override val selectChapter = "ul.chapterszozo li" -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/Nettruyenmax.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/Nettruyenmax.kt index 070093fb..f9164c5c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/Nettruyenmax.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/Nettruyenmax.kt @@ -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("NETTRUYENMAX", "NettruyenMax", "vi") +@MangaSourceParser("NETTRUYENMAX", "NettruyenBing", "vi") internal class Nettruyenmax(context: MangaLoaderContext) : - WpComicsParser(context, MangaSource.NETTRUYENMAX, "www.nettruyenus.com", 36) + WpComicsParser(context, MangaSource.NETTRUYENMAX, "www.nettruyenbing.com", 36) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/MonzeeKomik.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/MonzeeKomik.kt index 1afcf59e..36e2d10f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/MonzeeKomik.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/MonzeeKomik.kt @@ -16,7 +16,7 @@ import java.text.SimpleDateFormat @MangaSourceParser("MONZEEKOMIK", "MonzeeKomik", "id") internal class MonzeeKomik(context: MangaLoaderContext) : - ZeistMangaParser(context, MangaSource.MONZEEKOMIK, "www.monzeekomik.my.id"){ + ZeistMangaParser(context, MangaSource.MONZEEKOMIK, "www.monzeekomik.my.id") { override val selectPage = "article#reader img" override suspend fun loadChapters(mangaUrl: String, doc: Document): List { @@ -32,13 +32,12 @@ internal class MonzeeKomik(context: MangaLoaderContext) : val feedClean = feedFind.removeSuffix(")") // clean - val feed = if(feedClean == "Reincarnation Colosseum") // hot fix - { - "I Have 90 Billion Licking Gold" - }else - { - feedClean - } + val feed = if (feedClean == "Reincarnation Colosseum") // hot fix + { + "I Have 90 Billion Licking Gold" + } else { + feedClean + } val url = buildString { append("https://") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zmanga/id/NeuManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zmanga/id/NeuManga.kt deleted file mode 100644 index ad303a69..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zmanga/id/NeuManga.kt +++ /dev/null @@ -1,10 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.zmanga.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.zmanga.ZMangaParser - -@MangaSourceParser("NEU_MANGA", "NeuManga.net", "id") -internal class NeuManga(context: MangaLoaderContext) : - ZMangaParser(context, MangaSource.NEU_MANGA, "neumanga.net")