From bb9902e3b2499fcb1f9d28e87f53abd4b00149b4 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Fri, 5 Jul 2024 12:17:16 +0300 Subject: [PATCH 1/6] [LibSoc] Add split by translations config option --- .../kotatsu/parsers/site/ru/rulib/LibSocialParser.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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 d5afad35..aa5fa8ec 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 @@ -37,6 +37,7 @@ internal abstract class LibSocialParser( 5, MangaState.ABANDONED, ) private val imageServers = SuspendLazy(::fetchServers) + private val splitTranslationsKey = ConfigKey.SplitByTranslations(true) override suspend fun getListPage(page: Int, filter: MangaListFilter?): List { val urlBuilder = urlBuilder("api") @@ -167,6 +168,11 @@ internal abstract class LibSocialParser( } } + override fun onCreateConfig(keys: MutableCollection>) { + super.onCreateConfig(keys) + keys.add(splitTranslationsKey) + } + private fun parseManga(jo: JSONObject): Manga { val cover = jo.getJSONObject("cover") return Manga( @@ -197,6 +203,7 @@ internal abstract class LibSocialParser( val json = webClient.httpGet(url).parseJson().getJSONArray("data") val builder = ChaptersListBuilder(json.length()) val dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US) + val useBranching = config[splitTranslationsKey] for (i in 0 until json.length()) { val jo = json.getJSONObject(i) val volume = jo.getIntOrDefault("volume", 0) @@ -219,7 +226,7 @@ internal abstract class LibSocialParser( url = "${manga.url}/chapter?number=$numberString&volume=$volume", scanlator = team, uploadDate = dateFormat.tryParse(bjo.getStringOrNull("created_at")), - branch = team, + branch = if (useBranching) team else null, source = source, ) } From 0f73f745399dc3258acc357055722f1b5cd11d6d Mon Sep 17 00:00:00 2001 From: Koitharu Date: Fri, 5 Jul 2024 13:23:47 +0300 Subject: [PATCH 2/6] [LibSoc] Default image server config option --- .../kotatsu/parsers/config/ConfigKey.kt | 5 ++++ .../parsers/site/ru/rulib/LibSocialParser.kt | 25 ++++++++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/config/ConfigKey.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/config/ConfigKey.kt index 49422e65..45c86648 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/config/ConfigKey.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/config/ConfigKey.kt @@ -29,4 +29,9 @@ sealed class ConfigKey( class SplitByTranslations( override val defaultValue: Boolean, ) : ConfigKey("split_translations") + + class PreferredImageServer( + val presetValues: Map, + override val defaultValue: String?, + ) : ConfigKey("img_server") } 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 aa5fa8ec..619092f9 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 @@ -38,6 +38,16 @@ internal abstract class LibSocialParser( ) private val imageServers = SuspendLazy(::fetchServers) private val splitTranslationsKey = ConfigKey.SplitByTranslations(true) + private val preferredServerKey = ConfigKey.PreferredImageServer( + presetValues = mapOf( + SERVER_MAIN to "Первый", + SERVER_SECONDARY to "Второй", + SERVER_COMPRESS to "Сжатия", + SERVER_DOWNLOAD to "Загрузки", + SERVER_CROP to "Обрезки", + ), + defaultValue = null, + ) override suspend fun getListPage(page: Int, filter: MangaListFilter?): List { val urlBuilder = urlBuilder("api") @@ -133,10 +143,7 @@ internal abstract class LibSocialParser( } val servers = imageServers.get() val json = pages.await() - val primaryServer = - checkNotNull(servers[SERVER_MAIN] ?: servers[SERVER_DOWNLOAD] ?: servers[SERVER_SECONDARY]) { - "No available images servers" - } + val primaryServer = getPrimaryImageServer(servers) json.getJSONArray("pages").mapJSON { jo -> val url = jo.getString("url") MangaPage( @@ -193,6 +200,16 @@ internal abstract class LibSocialParser( ) } + private fun getPrimaryImageServer(servers: ScatterMap): String { + val preferred = config[preferredServerKey] + if (preferred != null) { + servers[preferred]?.let { return it } + } + return checkNotNull(servers[SERVER_MAIN] ?: servers[SERVER_DOWNLOAD] ?: servers[SERVER_SECONDARY]) { + "No available images servers" + } + } + private suspend fun fetchChapters(manga: Manga): List { val url = urlBuilder("api") .addPathSegment("api") From 41ced8edee21931e4501e5c1de62049fd7f57c54 Mon Sep 17 00:00:00 2001 From: Naga <94557604+NagaYZ@users.noreply.github.com> Date: Sun, 23 Jun 2024 18:37:44 +0200 Subject: [PATCH 3/6] added states , fixed title, added types --- .../kotatsu/parsers/site/it/MangaWorld.kt | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/it/MangaWorld.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/it/MangaWorld.kt index 12fe02b9..96cc2b72 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/it/MangaWorld.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/it/MangaWorld.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.parsers.site.it +import org.jsoup.nodes.Document import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser @@ -9,15 +10,17 @@ import org.koitharu.kotatsu.parsers.util.* import java.text.SimpleDateFormat import java.util.* -@MangaSourceParser("MANGAWORLD", "mangaworld.ac", "it") +@MangaSourceParser("MANGAWORLD", "MangaWorld", "it") internal class MangaWorld( context: MangaLoaderContext, ) : PagedMangaParser(context, MangaSource.MANGAWORLD, pageSize = 16) { override val availableSortOrders: Set = - EnumSet.of(SortOrder.POPULARITY, SortOrder.ALPHABETICAL, SortOrder.NEWEST, SortOrder.ALPHABETICAL_DESC) + EnumSet.of(SortOrder.POPULARITY, SortOrder.ALPHABETICAL, SortOrder.NEWEST, SortOrder.ALPHABETICAL_DESC, SortOrder.UPDATED) override val configKeyDomain = ConfigKey.Domain("mangaworld.ac") + override val availableStates: Set = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED, MangaState.ABANDONED, MangaState.PAUSED) + override val isMultipleTagsSupported = true override suspend fun getListPage( @@ -61,6 +64,10 @@ internal class MangaWorld( append("&page=$page") } val doc = webClient.httpGet(url).parseHtml() + return parseMangaList(doc) + } + + private fun parseMangaList(doc: Document): List { return doc.select(".comics-grid .entry").map { div -> val href = div.selectFirstOrThrow("a.thumb").attrAsRelativeUrl("href") val tags = div.select(".genres a[href*=/archive?genre=]") @@ -89,15 +96,26 @@ internal class MangaWorld( } } + override suspend fun getAvailableTags(): Set { val doc = webClient.httpGet("https://$domain/").parseHtml() - return doc.select("div[aria-labelledby=genresDropdown] a").mapNotNullToSet { + val genres = doc.select("div[aria-labelledby=genresDropdown] a").mapNotNullToSet { + MangaTag( + key = it.attr("href"), + title = it.text().toTitleCase(sourceLocale), + source = source, + ) + } + + val tags = doc.select("div[aria-labelledby=typesDropdown] a").mapNotNullToSet { MangaTag( key = it.attr("href"), title = it.text().toTitleCase(sourceLocale), source = source, ) } + + return genres + tags } override suspend fun getDetails(manga: Manga): Manga { From a88a861d821c4c9edae10f1afa0c69d8d4347444 Mon Sep 17 00:00:00 2001 From: Naga <94557604+NagaYZ@users.noreply.github.com> Date: Sun, 23 Jun 2024 18:51:51 +0200 Subject: [PATCH 4/6] added main page sortby updated --- .../org/koitharu/kotatsu/parsers/site/it/MangaWorld.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/it/MangaWorld.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/it/MangaWorld.kt index 96cc2b72..79fb5cd6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/it/MangaWorld.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/it/MangaWorld.kt @@ -17,6 +17,9 @@ internal class MangaWorld( override val availableSortOrders: Set = 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("mangaworld.ac") override val availableStates: Set = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED, MangaState.ABANDONED, MangaState.PAUSED) @@ -39,6 +42,8 @@ internal class MangaWorld( } 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.isNotEmpty()) { filter.tags.joinTo(this, "&") { it.key.substringAfter("archive?") } } @@ -107,7 +112,7 @@ internal class MangaWorld( ) } - val tags = doc.select("div[aria-labelledby=typesDropdown] a").mapNotNullToSet { + val types = doc.select("div[aria-labelledby=typesDropdown] a").mapNotNullToSet { MangaTag( key = it.attr("href"), title = it.text().toTitleCase(sourceLocale), @@ -115,7 +120,7 @@ internal class MangaWorld( ) } - return genres + tags + return genres + types } override suspend fun getDetails(manga: Manga): Manga { From b1ac1cf2386d294db65f047c400c70ccca05565d Mon Sep 17 00:00:00 2001 From: Koitharu Date: Sat, 6 Jul 2024 11:53:18 +0300 Subject: [PATCH 5/6] [LibSoc] Fix image server option --- .../kotatsu/parsers/site/ru/rulib/LibSocialParser.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 619092f9..de4ead15 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 @@ -40,6 +40,7 @@ internal abstract class LibSocialParser( private val splitTranslationsKey = ConfigKey.SplitByTranslations(true) private val preferredServerKey = ConfigKey.PreferredImageServer( presetValues = mapOf( + null to null, SERVER_MAIN to "Первый", SERVER_SECONDARY to "Второй", SERVER_COMPRESS to "Сжатия", @@ -86,7 +87,7 @@ internal abstract class LibSocialParser( SortOrder.NEWEST -> "created_at" SortOrder.ALPHABETICAL, SortOrder.ALPHABETICAL_DESC, - -> "rus_name" + -> "rus_name" }, ) urlBuilder.addQueryParameter( @@ -97,7 +98,7 @@ internal abstract class LibSocialParser( SortOrder.RATING, SortOrder.NEWEST, SortOrder.ALPHABETICAL_DESC, - -> "desc" + -> "desc" SortOrder.ALPHABETICAL -> "asc" }, From 7433fb8fa0cbaf628daba02adc6d78d0ce7e3e7c Mon Sep 17 00:00:00 2001 From: Koitharu Date: Sat, 6 Jul 2024 12:23:37 +0300 Subject: [PATCH 6/6] [LibSoc] Fix image server option --- .../koitharu/kotatsu/parsers/site/ru/rulib/LibSocialParser.kt | 1 + 1 file changed, 1 insertion(+) 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 de4ead15..b81aa404 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 @@ -179,6 +179,7 @@ internal abstract class LibSocialParser( override fun onCreateConfig(keys: MutableCollection>) { super.onCreateConfig(keys) keys.add(splitTranslationsKey) + keys.add(preferredServerKey) } private fun parseManga(jo: JSONObject): Manga {