From 30ca25735b08006c712a027a04f838ff65fd7081 Mon Sep 17 00:00:00 2001 From: abubaca4 <55701175+abubaca4@users.noreply.github.com> Date: Wed, 19 Oct 2022 23:22:15 +0300 Subject: [PATCH] [RU]NudeMoon some fixes (#13926) * update site url * Parse mobile site version Fix a lot if error * Fix detail cover load * Add sort by chapter name(server return sorted by upload date) * fix warnings and date parse in some case * Another date fix * replace client.newCall to chapterListParse as @alessandrojean requested https://github.com/tachiyomiorg/tachiyomi-extensions/pull/13914#discussion_r999480012 * version code change --- src/ru/nudemoon/build.gradle | 2 +- .../extension/ru/nudemoon/Nudemoon.kt | 76 +++++++++---------- 2 files changed, 35 insertions(+), 43 deletions(-) diff --git a/src/ru/nudemoon/build.gradle b/src/ru/nudemoon/build.gradle index f2577f77e..e6be8fa25 100644 --- a/src/ru/nudemoon/build.gradle +++ b/src/ru/nudemoon/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'Nude-Moon' pkgNameSuffix = 'ru.nudemoon' extClass = '.Nudemoon' - extVersionCode = 9 + extVersionCode = 10 isNsfw = true } diff --git a/src/ru/nudemoon/src/eu/kanade/tachiyomi/extension/ru/nudemoon/Nudemoon.kt b/src/ru/nudemoon/src/eu/kanade/tachiyomi/extension/ru/nudemoon/Nudemoon.kt index 0bd2e730b..cd9b75731 100644 --- a/src/ru/nudemoon/src/eu/kanade/tachiyomi/extension/ru/nudemoon/Nudemoon.kt +++ b/src/ru/nudemoon/src/eu/kanade/tachiyomi/extension/ru/nudemoon/Nudemoon.kt @@ -48,7 +48,7 @@ class Nudemoon : ParsedHttpSource() { .build() chain.proceed(newReq) - }.build()!! + }.build() override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/all_manga?views&rowstart=${30 * (page - 1)}", headers) @@ -64,12 +64,10 @@ class Nudemoon : ParsedHttpSource() { var genres = "" var order = "" for (filter in if (filters.isEmpty()) getFilterList() else filters) { - when (filter) { - is GenreList -> { - filter.state.forEach { f -> - if (f.state) { - genres += f.id + '+' - } + if (filter is GenreList) { + filter.state.forEach { f -> + if (f.state) { + genres += f.id + '+' } } } @@ -77,21 +75,21 @@ class Nudemoon : ParsedHttpSource() { if (genres.isNotEmpty()) { for (filter in filters) { - when (filter) { - is OrderBy -> { - // The site has no ascending order - order = arrayOf("&date", "&views", "&like")[filter.state!!.index] - } + if (filter is OrderBy) { + // The site has no ascending order + order = arrayOf("&date", "&views", "&like")[filter.state!!.index] } } "$baseUrl/tags/${genres.dropLast(1)}$order&rowstart=${30 * (page - 1)}" } else { for (filter in filters) { - when (filter) { - is OrderBy -> { - // The site has no ascending order - order = arrayOf("all_manga?date", "all_manga?views", "all_manga?like")[filter.state!!.index] - } + if (filter is OrderBy) { + // The site has no ascending order + order = arrayOf( + "all_manga?date", + "all_manga?views", + "all_manga?like" + )[filter.state!!.index] } } "$baseUrl/$order&rowstart=${30 * (page - 1)}" @@ -135,41 +133,35 @@ class Nudemoon : ParsedHttpSource() { manga.author = document.select("table.news_pic2 a[href*=mangaka]").text() manga.genre = document.select("table.news_pic2 div.tag-links a").joinToString { it.text() } manga.description = document.select(".description").text() - manga.thumbnail_url = document.selectFirst("div.gallery-item img.textbox").attr("abs:data-src") + manga.thumbnail_url = document.selectFirst("meta[property=og:image]").attr("abs:content") return manga } override fun chapterListRequest(manga: SManga): Request { - val mangaDocument: Document - client.newCall( - GET(baseUrl + manga.url, headers) - ).execute().run { - if (!isSuccessful) { - close() - throw Exception("HTTP error $code") - } - mangaDocument = this.asJsoup() - } - - val chapterUrl = if (mangaDocument.select("td.button a:contains(Все главы)").isNotEmpty()) - mangaDocument.select("td.button a:contains(Все главы)").attr("href") - else - manga.url - - return GET(baseUrl + chapterUrl, headers) + return GET(baseUrl + manga.url, headers) } override fun chapterListSelector() = popularMangaSelector() override fun chapterListParse(response: Response): List = mutableListOf().apply { - val responseUrl = response.request.url.toString() val document = response.asJsoup() - if (!responseUrl.contains("/vse_glavy/")) { + if (document.select("td.button a:contains(Все главы)").isEmpty()) { add(chapterFromElement(document)) } else { - document.select("table.news_pic2").forEach { + var pageListDocument: Document + val pageListLink = document.select("td.button a:contains(Все главы)").attr("href") + client.newCall( + GET(baseUrl + pageListLink, headers) + ).execute().run { + if (!isSuccessful) { + close() + throw Exception("HTTP error $code") + } + pageListDocument = this.asJsoup() + } + pageListDocument.select("table.news_pic2").sortedByDescending { it.selectFirst("tr[valign=top] a:has(h2) h2").text() }.forEach { val chapter = SChapter.create() val nameAndUrl = it.select("tr[valign=top] a:has(h2)") chapter.name = nameAndUrl.select("h2").text() @@ -178,7 +170,7 @@ class Nudemoon : ParsedHttpSource() { chapter.date_upload = it.selectFirst("tr[valign=top] td[align=left] span.small2").text().let { textDate -> try { - SimpleDateFormat("dd MMMM yyyy", Locale("ru")).parse(textDate)?.time ?: 0L + SimpleDateFormat("d MMMM yyyy", Locale("ru")).parse(textDate.replace("Май", "Мая"))?.time ?: 0L } catch (e: Exception) { 0 } @@ -194,14 +186,14 @@ class Nudemoon : ParsedHttpSource() { val chapter = SChapter.create() val chapterName = element.select("table td.bg_style1 h1").text() - var chapterUrl = element.baseUri() + val chapterUrl = element.baseUri() chapter.setUrlWithoutDomain(chapterUrl) chapter.name = chapterName chapter.scanlator = element.select("table.news_pic2 a[href*=perevod]").text() chapter.date_upload = element.select("table.news_pic2 span.small2:contains(/)").text().let { try { - SimpleDateFormat("dd/MM/yyyy", Locale("ru")).parse(it)?.time ?: 0L + SimpleDateFormat("d/MM/yyyy", Locale("ru")).parse(it)?.time ?: 0L } catch (e: Exception) { 0 } @@ -220,7 +212,7 @@ class Nudemoon : ParsedHttpSource() { override fun pageListParse(document: Document): List = throw Exception("Not Used") - private class Genre(name: String, val id: String = name.replace(' ', '_')) : Filter.CheckBox(name.capitalize()) + private class Genre(name: String, val id: String = name.replace(' ', '_')) : Filter.CheckBox(name.replaceFirstChar { it.uppercaseChar() }) private class GenreList(genres: List) : Filter.Group("Тэги", genres) private class OrderBy : Filter.Sort( "Сортировка",