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 bf7fd2f3..4af96e61 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 @@ -10,58 +10,61 @@ import java.text.SimpleDateFormat import java.util.* @MangaSourceParser("MANGAWORLD", "mangaworld.ac", "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) +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) override val configKeyDomain = ConfigKey.Domain("mangaworld.ac") override val isMultipleTagsSupported = true - override suspend fun getListPage(page: Int, filter: MangaListFilter?): List { - val url = buildString { - append("https://") - append(domain) - append("/archive?") - when (filter) { - is MangaListFilter.Search -> { - append("keyword=") - append(filter.query.urlEncoded()) - } - is MangaListFilter.Advanced -> { - - if (filter.tags.isNotEmpty()) { - println(filter.tags) - val tags = filter.tags.joinToString("&") {it.key.substringAfter("archive?") } - append(tags) + override suspend fun getListPage( + page: Int, + filter: MangaListFilter?, + ): List { + val url = + buildString { + append("https://") + append(domain) + append("/archive?") + when (filter) { + is MangaListFilter.Search -> { + append("keyword=") + append(filter.query.urlEncoded()) } - when (filter.sortOrder) { - SortOrder.POPULARITY -> append("&sort=most_read") - SortOrder.ALPHABETICAL -> append("&sort=a-z") - SortOrder.NEWEST -> append("&sort=newest") - SortOrder.ALPHABETICAL_DESC -> append("&sort=z-a") - else -> append("&sort=a-z") - } - when(filter.states.oneOrThrowIfMany()){ - MangaState.ONGOING -> append("&status=ongoing") - MangaState.FINISHED -> append("&status=completed") - MangaState.ABANDONED -> append("&status=dropped") - MangaState.PAUSED -> append("&status=paused") - else -> append("") + is MangaListFilter.Advanced -> { + if (filter.tags.isNotEmpty()) { + filter.tags.joinTo(this, "&") { it.key.substringAfter("archive?") } + } + + when (filter.sortOrder) { + SortOrder.POPULARITY -> append("&sort=most_read") + SortOrder.ALPHABETICAL -> append("&sort=a-z") + SortOrder.NEWEST -> append("&sort=newest") + SortOrder.ALPHABETICAL_DESC -> append("&sort=z-a") + else -> append("&sort=a-z") + } + when (filter.states.oneOrThrowIfMany()) { + MangaState.ONGOING -> append("&status=ongoing") + MangaState.FINISHED -> append("&status=completed") + MangaState.ABANDONED -> append("&status=dropped") + MangaState.PAUSED -> append("&status=paused") + else -> Unit + } } + null -> Unit } - null -> append("") + append("&page=$page") } - append("&page=$page") - } - println("URL: $url") val doc = webClient.httpGet(url).parseHtml() 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=]").mapNotNullToSet { MangaTag(it.ownText(), it.attr("href"), source) } + val tags = div.select(".genres a[href*=/archive?genre=]") + .mapNotNullToSet { MangaTag(it.ownText().toTitleCase(sourceLocale), it.attr("href"), source) } Manga( id = generateUid(href), url = href, @@ -72,7 +75,8 @@ internal class MangaWorld(context: MangaLoaderContext) : rating = RATING_UNKNOWN, tags = tags, author = div.selectFirst(".author a")?.text(), - state = when (div.selectFirst(".status a")?.text()) { + state = + when (div.selectFirst(".status a")?.text()) { "In corso" -> MangaState.ONGOING "Finito" -> MangaState.FINISHED "Droppato" -> MangaState.ABANDONED @@ -90,7 +94,7 @@ internal class MangaWorld(context: MangaLoaderContext) : return doc.select("div[aria-labelledby=genresDropdown] a").mapNotNullToSet { MangaTag( key = it.attr("href"), - title = it.text().trim(), + title = it.text().toTitleCase(sourceLocale), source = source, ) } @@ -99,9 +103,15 @@ internal class MangaWorld(context: MangaLoaderContext) : override suspend fun getDetails(manga: Manga): Manga { val doc = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() return manga.copy( - altTitle = doc.selectFirst(".meta-data .font-weight-bold:contains(Titoli alternativi:)")?.parent()?.ownText()?.substringAfter(": ")?.trim(), + altTitle = + doc.selectFirst(".meta-data .font-weight-bold:contains(Titoli alternativi:)") + ?.parent() + ?.ownText() + ?.substringAfter(": ") + ?.trim(), description = doc.getElementById("noidungm")?.text().orEmpty(), - chapters = doc.select(".chapters-wrapper .chapter a").mapChapters(reversed = true) { i, a -> + chapters = + doc.select(".chapters-wrapper .chapter a").mapChapters(reversed = true) { i, a -> val url = a.attrAsRelativeUrl("href").toAbsoluteUrl(domain) MangaChapter( id = generateUid(url), @@ -109,7 +119,10 @@ internal class MangaWorld(context: MangaLoaderContext) : number = i + 1, url = url, scanlator = null, - uploadDate = SimpleDateFormat("dd MMMM yyyy", Locale.ITALIAN).tryParse(a.selectFirst(".chap-date")?.text()), + uploadDate = + SimpleDateFormat("dd MMMM yyyy", Locale.ITALIAN).tryParse( + a.selectFirst(".chap-date")?.text(), + ), branch = null, source = source, ) @@ -130,4 +143,3 @@ internal class MangaWorld(context: MangaLoaderContext) : } } } -