Fixed chapter dates (#8829)
This commit is contained in:
parent
10ba7dfbe5
commit
f2d745d540
@ -5,7 +5,7 @@ ext {
|
||||
extName = 'MangaJar'
|
||||
pkgNameSuffix = 'en.mangajar'
|
||||
extClass = '.MangaJar'
|
||||
extVersionCode = 6
|
||||
extVersionCode = 7
|
||||
libVersion = '1.2'
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user