Fixed chapter dates (#8829)

This commit is contained in:
Arraiment 2021-08-25 18:19:04 +08:00 committed by GitHub
parent 10ba7dfbe5
commit f2d745d540
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 48 additions and 44 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'MangaJar'
pkgNameSuffix = 'en.mangajar'
extClass = '.MangaJar'
extVersionCode = 6
extVersionCode = 7
libVersion = '1.2'
}

View File

@ -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<GenreList>()
val filterList = if (filters.isEmpty()) getFilterList() else filters
val genreFilter = filterList.findInstance<GenreList>()
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<List<SChapter>> {
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<Page> {
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<String>(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)
}
}
}