From e916f2a66e8301c200ba0610b60eb93249893fc1 Mon Sep 17 00:00:00 2001 From: Naga <94557604+NagaYZ@users.noreply.github.com> Date: Wed, 11 Sep 2024 23:50:18 +0200 Subject: [PATCH 01/12] Closes #1057 --- .../org/koitharu/kotatsu/parsers/site/heancms/HeanCms.kt | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/HeanCms.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/HeanCms.kt index b0403174..7e1ab24a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/HeanCms.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/HeanCms.kt @@ -53,7 +53,7 @@ internal abstract class HeanCms( val url = buildString { append("https://") append(apiPath) - append("/query?query_string=") + append("/query?query_string=&series_type=Comic&perPage=$pageSize") when (filter) { is MangaListFilter.Search -> { append(filter.query.urlEncoded()) @@ -86,16 +86,12 @@ internal abstract class HeanCms( SortOrder.ALPHABETICAL_DESC -> append("title&order=desc") else -> append("latest&order=desc") } - - append("&series_type=Comic&perPage=20") append("&tags_ids=") append("[".urlEncoded()) append(filter.tags.joinToString(",") { it.key }) append("]".urlEncoded()) - } - - null -> append("&status=All&orderBy=$paramsUpdated&order=desc&series_type=Comic&perPage=20") + null -> append("&status=All&orderBy=$paramsUpdated&order=desc") } append("&page=") append(page.toString()) From 27c07d86bc80ebd59fcd96e66c9b5fa46d21b6ff Mon Sep 17 00:00:00 2001 From: Naga <94557604+NagaYZ@users.noreply.github.com> Date: Thu, 12 Sep 2024 01:20:34 +0200 Subject: [PATCH 02/12] fix tags --- .../kotatsu/parsers/site/heancms/HeanCms.kt | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/HeanCms.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/HeanCms.kt index 7e1ab24a..7dec6b31 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/HeanCms.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/HeanCms.kt @@ -182,10 +182,16 @@ internal abstract class HeanCms( override suspend fun getAvailableTags(): Set { val doc = webClient.httpGet("https://$domain/comics").parseHtml() - val regex = Regex("\"tags\\\\.*?(\\[.+?])") - val tags = doc.select("script").firstNotNullOf { script -> - regex.find(script.html())?.groupValues?.getOrNull(1) - }.unescapeJson() + val regex = Regex("\"tags\\\\?\":\\s*\\[(.+?)]\\s*[},]") + val tags = doc.select("script").joinToString("") { it.html() } + .let { fullHtml -> + regex.find(fullHtml)?.groupValues?.getOrNull(1) + } + ?.unescapeJson() + ?.replace(Regex(""""]\)\s*self\.__next_f\.push\(\[\d+,""""), "") + ?.let { "[$it]" } + ?: return emptySet() + return JSONArray(tags).mapJSON { MangaTag( key = it.getInt("id").toString(), @@ -194,4 +200,5 @@ internal abstract class HeanCms( ) }.toSet() } + } From 82a57cb3c8560f9da58b11a9a69dc110bda5f534 Mon Sep 17 00:00:00 2001 From: Draken <131387159+dragonx943@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:32:20 +0700 Subject: [PATCH 03/12] Update HentaiVN Domain --- .../org/koitharu/kotatsu/parsers/site/vi/HentaiVNParser.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 15ce1c33..2ef4f171 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 @@ -21,7 +21,7 @@ private const val SEARCH_PAGE_SIZE = 10 @MangaSourceParser("HENTAIVN", "HentaiVN", "vi", type = ContentType.HENTAI) class HentaiVNParser(context: MangaLoaderContext) : MangaParser(context, MangaParserSource.HENTAIVN) { - override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain("hentaiayame.com") + override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain("hentaiayame.net") override fun onCreateConfig(keys: MutableCollection>) { super.onCreateConfig(keys) From 2b0edfde604c43bcecfae6f1f51c0eab5bbbd07e Mon Sep 17 00:00:00 2001 From: Koitharu Date: Sat, 14 Sep 2024 14:27:17 +0300 Subject: [PATCH 04/12] [MangaDex] Data-saver server support (close #1062) --- .../parsers/site/all/MangaDexParser.kt | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaDexParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaDexParser.kt index 3f7980f2..62fd48ec 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaDexParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaDexParser.kt @@ -22,12 +22,22 @@ private const val CHAPTERS_MAX_PAGE_SIZE = 500 private const val CHAPTERS_PARALLELISM = 3 private const val CHAPTERS_MAX_COUNT = 10_000 // strange api behavior, looks like a bug private const val LOCALE_FALLBACK = "en" +private const val SERVER_DATA = "data" +private const val SERVER_DATA_SAVER = "data-saver" @MangaSourceParser("MANGADEX", "MangaDex") internal class MangaDexParser(context: MangaLoaderContext) : MangaParser(context, MangaParserSource.MANGADEX) { override val configKeyDomain = ConfigKey.Domain("mangadex.org") + private val preferredServerKey = ConfigKey.PreferredImageServer( + presetValues = mapOf( + SERVER_DATA to "Original quality", + SERVER_DATA_SAVER to "Compressed quality", + ), + defaultValue = SERVER_DATA, + ) + override fun onCreateConfig(keys: MutableCollection>) { super.onCreateConfig(keys) keys.add(userAgentKey) @@ -188,12 +198,15 @@ internal class MangaDexParser(context: MangaLoaderContext) : MangaParser(context } override suspend fun getPages(chapter: MangaChapter): List { - val domain = domain - val chapterJson = webClient.httpGet("https://api.$domain/at-home/server/${chapter.url}?forcePort443=false") - .parseJson() - .getJSONObject("chapter") - val pages = chapterJson.getJSONArray("data") - val prefix = "https://uploads.$domain/data/${chapterJson.getString("hash")}/" + val json = webClient.httpGet( + "https://api.$domain/at-home/server/${chapter.url}?forcePort443=false", + ).parseJson() + val chapterJson = json.getJSONObject("chapter") + val server = config[preferredServerKey] ?: SERVER_DATA + val pages = chapterJson.getJSONArray( + if (server == SERVER_DATA_SAVER) "dataSaver" else "data", + ) + val prefix = "${json.getString("baseUrl")}/$server/${chapterJson.getString("hash")}/" return List(pages.length()) { i -> val url = prefix + pages.getString(i) MangaPage( From aba8a80d8fbbcd82cd652442dc9dc1af210d5e42 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Sun, 15 Sep 2024 15:48:35 +0300 Subject: [PATCH 05/12] [MangaDex] Fix settings --- .../org/koitharu/kotatsu/parsers/site/all/MangaDexParser.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaDexParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaDexParser.kt index 62fd48ec..c0b01040 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaDexParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaDexParser.kt @@ -41,6 +41,7 @@ internal class MangaDexParser(context: MangaLoaderContext) : MangaParser(context override fun onCreateConfig(keys: MutableCollection>) { super.onCreateConfig(keys) keys.add(userAgentKey) + keys.add(preferredServerKey) } override val availableSortOrders: EnumSet = EnumSet.allOf(SortOrder::class.java) From 0bafd117ffbd63e92d9d2d8ad7294c7763697703 Mon Sep 17 00:00:00 2001 From: Draken <131387159+dragonx943@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:17:49 +0700 Subject: [PATCH 06/12] Update and rename HentaiVnCafe.kt to HentaiVnFit.kt --- .../site/madara/vi/{HentaiVnCafe.kt => HentaiVnFit.kt} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/{HentaiVnCafe.kt => HentaiVnFit.kt} (77%) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiVnCafe.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiVnFit.kt similarity index 77% rename from src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiVnCafe.kt rename to src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiVnFit.kt index 156dfa5e..fd039970 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiVnCafe.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiVnFit.kt @@ -6,9 +6,9 @@ import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -@MangaSourceParser("HENTAIVNCAFE", "HentaiVnCafe", "vi", ContentType.HENTAI) +@MangaSourceParser("HENTAIVNFIT", "HentaiVnFit", "vi", ContentType.HENTAI) internal class HentaiVnCafe(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.HENTAIVNCAFE, "hentaivn.cafe", 24) { + MadaraParser(context, MangaParserSource.HENTAIVNFIT, "hentaivn.fit", 24) { override val listUrl = "truyen-hentai/" override val tagPrefix = "the-loai/" override val datePattern = "dd/MM/yyyy" From 8af75d8c6a9e72a4bd2f4bded77454524919faee Mon Sep 17 00:00:00 2001 From: Draken <131387159+dragonx943@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:18:30 +0700 Subject: [PATCH 07/12] Update TruyenVn.kt --- .../org/koitharu/kotatsu/parsers/site/madara/vi/TruyenVn.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/TruyenVn.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/TruyenVn.kt index f938f9e7..4ecf84ad 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/TruyenVn.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/TruyenVn.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("TRUYENVN", "TruyenVn", "vi", ContentType.HENTAI) internal class TruyenVn(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.TRUYENVN, "truyenvn.mobi", 20) { + MadaraParser(context, MangaParserSource.TRUYENVN, "truyenvn.fit", 20) { override val listUrl = "truyen-tranh/" override val tagPrefix = "the-loai/" override val datePattern = "dd/MM/yyyy" From fbd610349a7e29e53bf5be59f387dfe0d368dba5 Mon Sep 17 00:00:00 2001 From: Draken <131387159+dragonx943@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:19:57 +0700 Subject: [PATCH 08/12] Update PinkTeaComic.kt --- .../org/koitharu/kotatsu/parsers/site/madara/vi/PinkTeaComic.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/PinkTeaComic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/PinkTeaComic.kt index 96fd9a08..a72c0208 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/PinkTeaComic.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/PinkTeaComic.kt @@ -4,7 +4,9 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import org.koitharu.kotatsu.parsers.Broken +@Broken @MangaSourceParser("PINKTEACOMIC", "PinkTeaComic", "vi") internal class PinkTeaComic(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.PINKTEACOMIC, "pinkteacomics.com") { From 74ccbdcaeedea8fcbdc6817678ca9c16db31afbb Mon Sep 17 00:00:00 2001 From: Draken <131387159+dragonx943@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:20:49 +0700 Subject: [PATCH 09/12] Update HentaiCube.kt --- .../org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt index 2b62099a..7399b44c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt @@ -12,7 +12,7 @@ import org.koitharu.kotatsu.parsers.util.* @MangaSourceParser("HENTAICUBE", "HentaiCube", "vi", ContentType.HENTAI) internal class HentaiCube(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.HENTAICUBE, "hentaicb.mom") { + MadaraParser(context, MangaParserSource.HENTAICUBE, "hentaicb.lol") { override val datePattern = "dd/MM/yyyy" override val tagPrefix = "the-loai/" From 3a52062ce4b3485a538db0bd520668c3b149e3a6 Mon Sep 17 00:00:00 2001 From: Draken <131387159+dragonx943@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:36:35 +0700 Subject: [PATCH 10/12] Update NetTruyenLL.kt --- .../koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenLL.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenLL.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenLL.kt index 63cb5ece..09c458b6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenLL.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenLL.kt @@ -14,7 +14,9 @@ import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.site.wpcomics.WpComicsParser import org.koitharu.kotatsu.parsers.util.* import java.util.EnumSet +import org.koitharu.kotatsu.parsers.Broken +@Broken @MangaSourceParser("NETTRUYENLL", "NetTruyenLL", "vi") internal class NetTruyenLL(context: MangaLoaderContext) : WpComicsParser(context, MangaParserSource.NETTRUYENLL, "nettruyenll.com", 20) { From 62c17155ca8cf68d55c36c12b500cca6d680b3a0 Mon Sep 17 00:00:00 2001 From: Draken <131387159+dragonx943@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:41:44 +0700 Subject: [PATCH 11/12] Update NetTruyen.kt --- .../org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyen.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyen.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyen.kt index cb78f158..4dc10761 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyen.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyen.kt @@ -10,6 +10,6 @@ import org.koitharu.kotatsu.parsers.site.wpcomics.WpComicsParser internal class NetTruyen(context: MangaLoaderContext) : WpComicsParser(context, MangaParserSource.NETTRUYEN, "www.nettruyenupp.com", 44) { override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain( - "www.nettruyenupp.com", "nettruyenaa.com", "nettruyenx.com", + "www.nettruyenupp.com", "nettruyenww.com", "nettruyenx.com", ) } From 75c46130edaada9c2e59df01b2f3fd2bc01325ff Mon Sep 17 00:00:00 2001 From: Draken <131387159+dragonx943@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:44:18 +0700 Subject: [PATCH 12/12] Update NetTruyenSSR.kt --- .../koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenSSR.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenSSR.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenSSR.kt index ff0447d5..cec49745 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenSSR.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenSSR.kt @@ -13,8 +13,10 @@ import org.koitharu.kotatsu.parsers.model.MangaTag import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.site.wpcomics.WpComicsParser import org.koitharu.kotatsu.parsers.util.* +import org.koitharu.kotatsu.parsers.Broken import java.util.EnumSet +@Broken @MangaSourceParser("NETTRUYENSSR", "NetTruyenSSR", "vi") internal class NetTruyenSSR(context: MangaLoaderContext) : WpComicsParser(context, MangaParserSource.NETTRUYENSSR, "nettruyenssr.com", 20) {