From e25656c09003e63b060f78832abbd230cbb87430 Mon Sep 17 00:00:00 2001 From: devi Date: Sun, 17 Sep 2023 09:35:58 +0200 Subject: [PATCH] reformat --- .../kotatsu/parsers/site/fr/FmTeam.kt | 70 ++++---- .../parsers/site/heancmsalt/HeanCmsAlt.kt | 3 +- .../site/mangareader/MangaReaderParser.kt | 169 ++++++++---------- .../mangareader/pt/HentaiSsssscanlator.kt | 3 +- .../parsers/site/nepnep/NepnepParser.kt | 9 +- 5 files changed, 120 insertions(+), 134 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/FmTeam.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/FmTeam.kt index 200d15e3..cb66169c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/FmTeam.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/FmTeam.kt @@ -26,15 +26,15 @@ internal class FmTeam(context: MangaLoaderContext) : tags: Set?, sortOrder: SortOrder, ): List { - if (page > 1) { return emptyList() } + if (page > 1) { + return emptyList() + } - val jsonManga = if(!query.isNullOrEmpty()) - { + val jsonManga = if (!query.isNullOrEmpty()) { //3 letters minimum webClient.httpGet("https://$domain/api/search/${query.urlEncoded()}").parseJson().getJSONArray("comics") - }else - { + } else { webClient.httpGet("https://$domain/api/comics").parseJson().getJSONArray("comics") } @@ -53,14 +53,14 @@ internal class FmTeam(context: MangaLoaderContext) : } if (found) { manga.add( - addManga(href, j) + addManga(href, j), ) } } else -> { manga.add( - addManga(href, j) + addManga(href, j), ) } } @@ -68,34 +68,34 @@ internal class FmTeam(context: MangaLoaderContext) : return manga } - private fun addManga(href : String, j : JSONObject): Manga { + private fun addManga(href: String, j: JSONObject): Manga { return Manga( - id = generateUid(href), - url = href, - publicUrl = href.toAbsoluteUrl(domain), - coverUrl = j.getString("thumbnail"), - title = j.getString("title"), - description = j.getString("description"), - altTitle = j.getJSONArray("alt_titles").toString() - .replace("[\"", "") - .replace("\"]", "") - .replace("\",\"", " , "), - rating = j.getString("rating").toFloatOrNull()?.div(10f) - ?: RATING_UNKNOWN, - tags = emptySet(), - author = j.getString("author"), - state = when (j.getString("status").lowercase()) { - "en cours" -> MangaState.ONGOING - "terminé" -> MangaState.FINISHED - else -> null - }, - source = source, - isNsfw = when (j.getString("adult").toInt()) { - 0 -> false - 1 -> true - else -> true - }, - ) + id = generateUid(href), + url = href, + publicUrl = href.toAbsoluteUrl(domain), + coverUrl = j.getString("thumbnail"), + title = j.getString("title"), + description = j.getString("description"), + altTitle = j.getJSONArray("alt_titles").toString() + .replace("[\"", "") + .replace("\"]", "") + .replace("\",\"", " , "), + rating = j.getString("rating").toFloatOrNull()?.div(10f) + ?: RATING_UNKNOWN, + tags = emptySet(), + author = j.getString("author"), + state = when (j.getString("status").lowercase()) { + "en cours" -> MangaState.ONGOING + "terminé" -> MangaState.FINISHED + else -> null + }, + source = source, + isNsfw = when (j.getString("adult").toInt()) { + 0 -> false + 1 -> true + else -> true + }, + ) } @@ -115,7 +115,7 @@ internal class FmTeam(context: MangaLoaderContext) : source = source, ) }, - chapters = chapters.mapJSONIndexed { i,j -> + chapters = chapters.mapJSONIndexed { i, j -> val url = "/api" + j.getString("url").toRelativeUrl(domain) val name = j.getString("full_title") val date = j.getStringOrNull("updated_at") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancmsalt/HeanCmsAlt.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancmsalt/HeanCmsAlt.kt index 7fba394a..ba3250b9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancmsalt/HeanCmsAlt.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancmsalt/HeanCmsAlt.kt @@ -42,8 +42,7 @@ internal abstract class HeanCmsAlt( sortOrder: SortOrder, ): List { //No search or tag - if(!query.isNullOrEmpty()) - { + if (!query.isNullOrEmpty()) { return emptyList() } val url = buildString { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt index 27a68c08..24c70551 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt @@ -13,7 +13,6 @@ import org.koitharu.kotatsu.parsers.util.* import java.text.SimpleDateFormat import java.util.* - internal abstract class MangaReaderParser( context: MangaLoaderContext, source: MangaSource, @@ -34,6 +33,84 @@ internal abstract class MangaReaderParser( private val mutex = Mutex() protected open var lastSearchPage = 1 + override suspend fun getListPage( + page: Int, + query: String?, + tags: Set?, + sortOrder: SortOrder, + ): List { + if (!query.isNullOrEmpty()) { + if (page > lastSearchPage) { + return emptyList() + } + + val url = buildString { + append("https://") + append(domain) + append("/page/") + append(page) + append("/?s=") + append(query.urlEncoded()) + } + + val docs = webClient.httpGet(url).parseHtml() + lastSearchPage = docs.selectFirst(".pagination .next") + ?.previousElementSibling() + ?.text()?.toIntOrNull() ?: 1 + return parseMangaList(docs) + } + + val sortQuery = when (sortOrder) { + SortOrder.ALPHABETICAL -> "title" + SortOrder.NEWEST -> "latest" + SortOrder.POPULARITY -> "popular" + SortOrder.UPDATED -> "update" + else -> "" + } + val tagKey = "genre[]".urlEncoded() + val tagQuery = + if (tags.isNullOrEmpty()) "" else tags.joinToString(separator = "&", prefix = "&") { "$tagKey=${it.key}" } + val url = buildString { + append("https://") + append(domain) + append(listUrl) + append("/?order=") + append(sortQuery) + append(tagQuery) + append("&page=") + append(page) + } + return parseMangaList(webClient.httpGet(url).parseHtml()) + } + + protected open val selectMangalist = ".postbody .listupd .bs .bsx" + protected open val selectMangaListImg = "img.ts-post-image" + protected open val selectMangaListTitle = "div.tt" + + protected open fun parseMangaList(docs: Document): List { + return docs.select(selectMangalist).mapNotNull { + val a = it.selectFirst("a") ?: return@mapNotNull null + val relativeUrl = a.attrAsRelativeUrl("href") + val rating = it.selectFirst(".numscore")?.text() + ?.toFloatOrNull()?.div(10) ?: RATING_UNKNOWN + + Manga( + id = generateUid(relativeUrl), + url = relativeUrl, + title = it.selectFirst(selectMangaListTitle)?.text() ?: a.attr("title"), + altTitle = null, + publicUrl = a.attrAsAbsoluteUrl("href"), + rating = rating, + isNsfw = isNsfwSource, + coverUrl = it.selectFirst(selectMangaListImg)?.src().orEmpty(), + tags = emptySet(), + state = null, + author = null, + source = source, + ) + } + } + protected open val selectChapter = "#chapterlist > ul > li" override suspend fun getDetails(manga: Manga): Manga { val docs = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() @@ -61,7 +138,6 @@ internal abstract class MangaReaderParser( docs.selectFirst("div.seriestucontent > div.seriestucontentr") ?: docs.selectFirst("div.seriestucontentr") ?: docs.selectFirst("div.seriestucon") - val tagMap = getOrCreateTagMap() val selectTag = if (tablemode != null) { @@ -72,7 +148,6 @@ internal abstract class MangaReaderParser( val tags = selectTag.mapNotNullToSet { tagMap[it.text()] } - val stateSelect = if (tablemode != null) { tablemode.selectFirst(".infotable td:contains(Status)") ?: tablemode.selectFirst(".infotable td:contains(Statut)") @@ -141,86 +216,6 @@ internal abstract class MangaReaderParser( ) } - - override suspend fun getListPage( - page: Int, - query: String?, - tags: Set?, - sortOrder: SortOrder, - ): List { - if (!query.isNullOrEmpty()) { - if (page > lastSearchPage) { - return emptyList() - } - - val url = buildString { - append("https://") - append(domain) - append("/page/") - append(page) - append("/?s=") - append(query.urlEncoded()) - } - - val docs = webClient.httpGet(url).parseHtml() - lastSearchPage = docs.selectFirst(".pagination .next") - ?.previousElementSibling() - ?.text()?.toIntOrNull() ?: 1 - return parseMangaList(docs) - } - - val sortQuery = when (sortOrder) { - SortOrder.ALPHABETICAL -> "title" - SortOrder.NEWEST -> "latest" - SortOrder.POPULARITY -> "popular" - SortOrder.UPDATED -> "update" - else -> "" - } - val tagKey = "genre[]".urlEncoded() - val tagQuery = - if (tags.isNullOrEmpty()) "" else tags.joinToString(separator = "&", prefix = "&") { "$tagKey=${it.key}" } - val url = buildString { - append("https://") - append(domain) - append(listUrl) - append("/?order=") - append(sortQuery) - append(tagQuery) - append("&page=") - append(page) - } - - return parseMangaList(webClient.httpGet(url).parseHtml()) - } - - protected open val selectMangalist = ".postbody .listupd .bs .bsx" - protected open val selectMangaListImg = "img.ts-post-image" - protected open val selectMangaListTitle = "div.tt" - - protected open fun parseMangaList(docs: Document): List { - return docs.select(selectMangalist).mapNotNull { - val a = it.selectFirst("a") ?: return@mapNotNull null - val relativeUrl = a.attrAsRelativeUrl("href") - val rating = it.selectFirst(".numscore")?.text() - ?.toFloatOrNull()?.div(10) ?: RATING_UNKNOWN - - Manga( - id = generateUid(relativeUrl), - url = relativeUrl, - title = it.selectFirst(selectMangaListTitle)?.text() ?: a.attr("title"), - altTitle = null, - publicUrl = a.attrAsAbsoluteUrl("href"), - rating = rating, - isNsfw = isNsfwSource, - coverUrl = it.selectFirst(selectMangaListImg)?.src().orEmpty(), - tags = emptySet(), - state = null, - author = null, - source = source, - ) - } - } - protected open val encodedSrc = false protected open val selectScript = "div.wrapper script" protected open val selectPage = "div#readerarea img" @@ -280,10 +275,7 @@ internal abstract class MangaReaderParser( } return pages - } - - } override suspend fun getTags(): Set { @@ -293,22 +285,17 @@ internal abstract class MangaReaderParser( protected suspend fun getOrCreateTagMap(): Map = mutex.withLock { tagCache?.let { return@withLock it } val tagMap = ArrayMap() - val url = listUrl.toAbsoluteUrl(domain) val tagElements = webClient.httpGet(url).parseHtml().select("ul.genrez > li") for (el in tagElements) { if (el.text().isEmpty()) continue - tagMap[el.text()] = MangaTag( title = el.text(), key = el.selectFirst("input")?.attr("value") ?: continue, source = source, ) } - tagCache = tagMap return@withLock tagMap } - - } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/HentaiSsssscanlator.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/HentaiSsssscanlator.kt index 37bf3c74..089d8601 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/HentaiSsssscanlator.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/HentaiSsssscanlator.kt @@ -8,7 +8,6 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("HENTAISSSSSCANLATOR", "Sssscanlator Hentai", "pt", type = ContentType.HENTAI) internal class HentaiSsssscanlator(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.HENTAISSSSSCANLATOR, "hentais.sssscanlator.com", pageSize = 20, searchPageSize = 10) { - + MangaReaderParser(context, MangaSource.HENTAISSSSSCANLATOR, "hentais.sssscanlator.com", pageSize = 20, searchPageSize = 10,) { override val datePattern = "MMM d, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/nepnep/NepnepParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/nepnep/NepnepParser.kt index 9386392a..f8ee646b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/nepnep/NepnepParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/nepnep/NepnepParser.kt @@ -53,10 +53,11 @@ internal abstract class NepnepParser( !query.isNullOrEmpty() -> { if (m.getString("i").contains(query.urlEncoded(), ignoreCase = true)) { manga.add( - addManga(href, imgUrl, m) + addManga(href, imgUrl, m), ) } } + !tags.isNullOrEmpty() -> { val a = m.getJSONArray("g").toString() var found = true @@ -67,14 +68,14 @@ internal abstract class NepnepParser( } if (found) { manga.add( - addManga(href, imgUrl, m) + addManga(href, imgUrl, m), ) } } else -> { manga.add( - addManga(href, imgUrl, m) + addManga(href, imgUrl, m), ) } } @@ -84,7 +85,7 @@ internal abstract class NepnepParser( return manga } - private fun addManga(href : String, imgUrl : String, m : JSONObject): Manga { + private fun addManga(href: String, imgUrl: String, m: JSONObject): Manga { return Manga( id = generateUid(href), title = m.getString("i").replace('-', ' '),