From 1a86045f3b3ca2031534cea0e025664b3562f1d3 Mon Sep 17 00:00:00 2001 From: Mike <51273546+SnakeDoc83@users.noreply.github.com> Date: Mon, 24 Aug 2020 22:39:29 -0400 Subject: [PATCH] MMRCMS - refactor latest parsing, fix Mangas.pw (#4201) --- src/all/mmrcms/build.gradle | 2 +- .../all/mmrcms/MyMangaReaderCMSSource.kt | 35 ++++++++++++------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/all/mmrcms/build.gradle b/src/all/mmrcms/build.gradle index 9b75dfa52..b3e2cadfa 100644 --- a/src/all/mmrcms/build.gradle +++ b/src/all/mmrcms/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'My Manga Reader CMS (Many sources)' pkgNameSuffix = 'all.mmrcms' extClass = '.MyMangaReaderCMSSources' - extVersionCode = 50 + extVersionCode = 51 libVersion = '1.2' containsNsfw = true } diff --git a/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/MyMangaReaderCMSSource.kt b/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/MyMangaReaderCMSSource.kt index 8fcd5ca04..9d34344ad 100644 --- a/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/MyMangaReaderCMSSource.kt +++ b/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/MyMangaReaderCMSSource.kt @@ -139,26 +139,35 @@ open class MyMangaReaderCMSSource( val mangas = document.select(latestUpdatesSelector()) .let { elements -> - if (elements.select("a").firstOrNull()?.hasText() == true) { - elements.map { latestUpdatesFromElement(it) } - } else { - document.select(gridLatestUpdatesSelector()).map { gridLatestUpdatesFromElement(it) } + when { + // Mangas.pw + elements.select("a.fa-info-circle + a").firstOrNull()?.hasText() == true -> elements.map { latestUpdatesFromElement(it, "a.fa-info-circle + a") } + // List layout (most sources) + elements.select("a").firstOrNull()?.hasText() == true -> elements.map { latestUpdatesFromElement(it, "a") } + // Grid layout (e.g. MangaYu and MangaID) + else -> document.select(gridLatestUpdatesSelector()).map { gridLatestUpdatesFromElement(it) } } } - .distinctBy { manga -> manga.title } - .filterNot { manga -> manga.title in latestTitles } - .also { list -> latestTitles.addAll(list.map { it.title }) } + .filterNotNull() return MangasPage(mangas, document.select(latestUpdatesNextPageSelector()) != null) } private fun latestUpdatesSelector() = "div.mangalist div.manga-item" private fun latestUpdatesNextPageSelector() = "a[rel=next]" - private fun latestUpdatesFromElement(element: Element): SManga = SManga.create().apply { - url = element.select("a").first().attr("abs:href").substringAfter(baseUrl) // intentionally not using setUrlWithoutDomain - title = element.select("a").first().text().trim() - thumbnail_url = "$baseUrl/uploads/manga/${url.substringAfterLast('/')}/cover/cover_250x350.jpg" + private fun latestUpdatesFromElement(element: Element, urlSelector: String): SManga? { + return element.select(urlSelector).first().let { titleElement -> + if (titleElement.text() in latestTitles) { + null + } else { + latestTitles.add(titleElement.text()) + SManga.create().apply { + url = titleElement.attr("abs:href").substringAfter(baseUrl) // intentionally not using setUrlWithoutDomain + title = titleElement.text().trim() + thumbnail_url = "$baseUrl/uploads/manga/${url.substringAfterLast('/')}/cover/cover_250x350.jpg" + } + } + } } - // MangaYu and MangaID needs this private fun gridLatestUpdatesSelector() = "div.mangalist div.manga-item, div.grid-manga tr" private fun gridLatestUpdatesFromElement(element: Element): SManga = SManga.create().apply { element.select("a.chart-title").let { @@ -308,7 +317,7 @@ open class MyMangaReaderCMSSource( val chapter = SChapter.create() try { - val titleWrapper = if (name == "Mangas.pw") element.select("em a[alt]").first() else element.select("[class^=chapter-title-rtl]").first() + val titleWrapper = if (name == "Mangas.pw") element.select("i a").first() else element.select("[class^=chapter-title-rtl]").first() // Some websites add characters after "..-rtl" thus the need of checking classes that starts with that val url = titleWrapper.getElementsByTag("a") .first { it.attr("href").contains(urlRegex) }