From f2d745d54089f8f34ebc29afbef602d06044d15d Mon Sep 17 00:00:00 2001 From: Arraiment <76941874+Arraiment@users.noreply.github.com> Date: Wed, 25 Aug 2021 18:19:04 +0800 Subject: [PATCH] Fixed chapter dates (#8829) --- src/en/mangajar/build.gradle | 2 +- .../extension/en/mangajar/MangaJar.kt | 90 ++++++++++--------- 2 files changed, 48 insertions(+), 44 deletions(-) diff --git a/src/en/mangajar/build.gradle b/src/en/mangajar/build.gradle index c4e1742ee..f655aa758 100644 --- a/src/en/mangajar/build.gradle +++ b/src/en/mangajar/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'MangaJar' pkgNameSuffix = 'en.mangajar' extClass = '.MangaJar' - extVersionCode = 6 + extVersionCode = 7 libVersion = '1.2' } diff --git a/src/en/mangajar/src/eu/kanade/tachiyomi/extension/en/mangajar/MangaJar.kt b/src/en/mangajar/src/eu/kanade/tachiyomi/extension/en/mangajar/MangaJar.kt index e28ba9c67..b10c3b2d7 100644 --- a/src/en/mangajar/src/eu/kanade/tachiyomi/extension/en/mangajar/MangaJar.kt +++ b/src/en/mangajar/src/eu/kanade/tachiyomi/extension/en/mangajar/MangaJar.kt @@ -32,18 +32,12 @@ class MangaJar : ParsedHttpSource() { override val client: OkHttpClient = network.cloudflareClient + // Popular + + override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/manga?sortBy=popular&page=$page") + override fun popularMangaSelector() = "article[class*=flex-item]" - override fun popularMangaRequest(page: Int): Request { - return GET("$baseUrl/manga?sortBy=popular&page=$page") - } - - override fun latestUpdatesSelector() = popularMangaSelector() - - override fun latestUpdatesRequest(page: Int): Request { - return GET("$baseUrl/manga?sortBy=last_chapter_at&page=$page") - } - override fun popularMangaFromElement(element: Element) = SManga.create().apply { setUrlWithoutDomain(element.select("a").attr("href")) title = element.select("img").attr("title") @@ -53,15 +47,23 @@ class MangaJar : ParsedHttpSource() { } } - override fun latestUpdatesFromElement(element: Element): SManga = popularMangaFromElement(element) + override fun popularMangaNextPageSelector() = "a.page-link[rel=next]" - override fun popularMangaNextPageSelector() = "[rel=next]" + // Latest + + override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/manga?sortBy=last_chapter_at&page=$page") + + override fun latestUpdatesSelector() = popularMangaSelector() + + override fun latestUpdatesFromElement(element: Element): SManga = popularMangaFromElement(element) override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() + // Search + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val filters = if (filters.isEmpty()) getFilterList() else filters - val genreFilter = filters.findInstance() + val filterList = if (filters.isEmpty()) getFilterList() else filters + val genreFilter = filterList.findInstance() val genre = genreFilter?.let { f -> f.values[f.state] } val url = (if (genre!!.isEmpty()) "$baseUrl/search" else "$baseUrl/genre/$genre").toHttpUrlOrNull()!!.newBuilder() @@ -69,19 +71,16 @@ class MangaJar : ParsedHttpSource() { url.addQueryParameter("q", query) url.addQueryParameter("page", page.toString()) - ( - filters.forEach { filter -> - when (filter) { - is OrderBy -> { - url.addQueryParameter("sortBy", filter.toUriPart()) - } - is SortBy -> { - url.addQueryParameter("sortAscending", filter.toUriPart()) - } + for (filter in filterList) { + when (filter) { + is OrderBy -> { + url.addQueryParameter("sortBy", filter.toUriPart()) + } + is SortBy -> { + url.addQueryParameter("sortAscending", filter.toUriPart()) } } - ) - + } return GET(url.toString(), headers) } @@ -91,6 +90,8 @@ class MangaJar : ParsedHttpSource() { override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() + // Details + override fun mangaDetailsParse(document: Document) = SManga.create().apply { description = document.select("div.manga-description.entry").text() thumbnail_url = document.select("div.row > div > img").attr("src") @@ -104,6 +105,11 @@ class MangaJar : ParsedHttpSource() { else -> SManga.UNKNOWN } + // Chapters + + /** For the first page. Pagination is done in [findChapters] */ + override fun chapterListRequest(manga: SManga) = GET(baseUrl + manga.url + "/chaptersList") + override fun fetchChapterList(manga: SManga): Observable> { return findChapters(chapterListRequest(manga)).toObservable() } @@ -117,6 +123,7 @@ class MangaJar : ParsedHttpSource() { url = link.attr("href") name = link.text() chapter_number = 0f + date_upload = parseChapterDate(chapter.select("span.chapter-date").text().trim()) } } val nextPageLink = document.select("a.page-link[rel=\"next\"]").firstOrNull() @@ -130,33 +137,19 @@ class MangaJar : ParsedHttpSource() { } } - /** For the first page. Pagination is done in [findChapters] */ - override fun chapterListRequest(manga: SManga) = GET(baseUrl + manga.url + "/chaptersList") - override fun chapterListSelector() = "li.list-group-item.chapter-item" - override fun chapterFromElement(element: Element) = SChapter.create().apply { - setUrlWithoutDomain(element.select("a").attr("href")) - name = element.select("span.chapter-title").text().trim() - date_upload = parseChapterDate(element.select("span.chapter-date").text().trim()) ?: 0 - } + override fun chapterFromElement(element: Element) = throw Exception("Not Used") - // The following date related code is taken directly from Genkan.kt - companion object { - val dateFormat by lazy { - SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH) - } - } - - private fun parseChapterDate(string: String): Long? { + private fun parseChapterDate(string: String): Long { return if ("ago" in string) { - parseRelativeDate(string) ?: 0 + parseRelativeDate(string) } else { dateFormat.parse(string)?.time ?: 0L } } - private fun parseRelativeDate(date: String): Long? { + private fun parseRelativeDate(date: String): Long { val trimmedDate = date.substringBefore(" ago").removeSuffix("s").split(" ") val calendar = Calendar.getInstance() @@ -172,6 +165,8 @@ class MangaJar : ParsedHttpSource() { return calendar.timeInMillis } + // Page List + override fun pageListParse(document: Document): List { return document.select("img[data-page]").mapIndexed { i, element -> Page(i, "", if (element.hasAttr("data-src")) element.attr("abs:data-src") else element.attr("abs:src")) @@ -180,6 +175,8 @@ class MangaJar : ParsedHttpSource() { override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException("Not Used") + // Filters + override fun getFilterList() = FilterList( OrderBy(), SortBy(), @@ -265,4 +262,11 @@ class MangaJar : ParsedHttpSource() { Filter.Select(displayName, vals.map { it.first }.toTypedArray()) { fun toUriPart() = vals[state].second } + + // The following date related code is taken directly from Genkan.kt + companion object { + val dateFormat by lazy { + SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH) + } + } }