FMReader: Fallback to absolute date if relative date fails (#7980)
* use parseAbsoluteDate as fallback * bump * long
This commit is contained in:
parent
0f1cbebf96
commit
08c73abe63
@ -2,4 +2,4 @@ plugins {
|
|||||||
id("lib-multisrc")
|
id("lib-multisrc")
|
||||||
}
|
}
|
||||||
|
|
||||||
baseVersionCode = 9
|
baseVersionCode = 10
|
||||||
|
@ -19,6 +19,7 @@ import org.jsoup.nodes.Document
|
|||||||
import org.jsoup.nodes.Element
|
import org.jsoup.nodes.Element
|
||||||
import org.jsoup.select.Elements
|
import org.jsoup.select.Elements
|
||||||
import java.nio.charset.Charset
|
import java.nio.charset.Charset
|
||||||
|
import java.text.ParseException
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.Calendar
|
import java.util.Calendar
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
@ -246,7 +247,13 @@ abstract class FMReader(
|
|||||||
name = element.attr(chapterNameAttrSelector).substringAfter("$mangaTitle ")
|
name = element.attr(chapterNameAttrSelector).substringAfter("$mangaTitle ")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
date_upload = element.select(chapterTimeSelector).let { if (it.hasText()) parseRelativeDate(it.text()) else 0 }
|
date_upload = element.select(chapterTimeSelector).let { dateElement ->
|
||||||
|
if (dateElement.hasText()) {
|
||||||
|
parseRelativeDate(dateElement.text()).takeIf { it != 0L } ?: parseAbsoluteDate(dateElement.text())
|
||||||
|
} else {
|
||||||
|
0L
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,55 +264,63 @@ abstract class FMReader(
|
|||||||
open val dateWordIndex = 1
|
open val dateWordIndex = 1
|
||||||
|
|
||||||
open fun parseRelativeDate(date: String): Long {
|
open fun parseRelativeDate(date: String): Long {
|
||||||
val value = date.split(' ')[dateValueIndex].toInt()
|
try {
|
||||||
val dateWord = date.split(' ')[dateWordIndex].let {
|
val value = date.split(' ')[dateValueIndex].toInt()
|
||||||
if (it.contains("(")) {
|
val dateWord = date.split(' ')[dateWordIndex].let {
|
||||||
it.substringBefore("(")
|
if (it.contains("(")) {
|
||||||
} else {
|
it.substringBefore("(")
|
||||||
it.substringBefore("s")
|
} else {
|
||||||
|
it.substringBefore("s")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// languages: en, vi, es, tr
|
// languages: en, vi, es, tr
|
||||||
return when (dateWord) {
|
return when (dateWord) {
|
||||||
"min", "minute", "phút", "minuto", "dakika" -> Calendar.getInstance().apply {
|
"min", "minute", "phút", "minuto", "dakika" -> Calendar.getInstance().apply {
|
||||||
add(Calendar.MINUTE, -value)
|
add(Calendar.MINUTE, -value)
|
||||||
set(Calendar.SECOND, 0)
|
set(Calendar.SECOND, 0)
|
||||||
set(Calendar.MILLISECOND, 0)
|
set(Calendar.MILLISECOND, 0)
|
||||||
}.timeInMillis
|
}.timeInMillis
|
||||||
"hour", "giờ", "hora", "saat" -> Calendar.getInstance().apply {
|
"hour", "giờ", "hora", "saat" -> Calendar.getInstance().apply {
|
||||||
add(Calendar.HOUR_OF_DAY, -value)
|
add(Calendar.HOUR_OF_DAY, -value)
|
||||||
set(Calendar.SECOND, 0)
|
set(Calendar.SECOND, 0)
|
||||||
set(Calendar.MILLISECOND, 0)
|
set(Calendar.MILLISECOND, 0)
|
||||||
}.timeInMillis
|
}.timeInMillis
|
||||||
"day", "ngày", "día", "gün" -> Calendar.getInstance().apply {
|
"day", "ngày", "día", "gün" -> Calendar.getInstance().apply {
|
||||||
add(Calendar.DATE, -value)
|
add(Calendar.DATE, -value)
|
||||||
set(Calendar.SECOND, 0)
|
set(Calendar.SECOND, 0)
|
||||||
set(Calendar.MILLISECOND, 0)
|
set(Calendar.MILLISECOND, 0)
|
||||||
}.timeInMillis
|
}.timeInMillis
|
||||||
"week", "tuần", "semana", "hafta" -> Calendar.getInstance().apply {
|
"week", "tuần", "semana", "hafta" -> Calendar.getInstance().apply {
|
||||||
add(Calendar.DATE, -value * 7)
|
add(Calendar.DATE, -value * 7)
|
||||||
set(Calendar.SECOND, 0)
|
set(Calendar.SECOND, 0)
|
||||||
set(Calendar.MILLISECOND, 0)
|
set(Calendar.MILLISECOND, 0)
|
||||||
}.timeInMillis
|
}.timeInMillis
|
||||||
"month", "tháng", "mes", "ay" -> Calendar.getInstance().apply {
|
"month", "tháng", "mes", "ay" -> Calendar.getInstance().apply {
|
||||||
add(Calendar.MONTH, -value)
|
add(Calendar.MONTH, -value)
|
||||||
set(Calendar.SECOND, 0)
|
set(Calendar.SECOND, 0)
|
||||||
set(Calendar.MILLISECOND, 0)
|
set(Calendar.MILLISECOND, 0)
|
||||||
}.timeInMillis
|
}.timeInMillis
|
||||||
"year", "năm", "año", "yıl" -> Calendar.getInstance().apply {
|
"year", "năm", "año", "yıl" -> Calendar.getInstance().apply {
|
||||||
add(Calendar.YEAR, -value)
|
add(Calendar.YEAR, -value)
|
||||||
set(Calendar.SECOND, 0)
|
set(Calendar.SECOND, 0)
|
||||||
set(Calendar.MILLISECOND, 0)
|
set(Calendar.MILLISECOND, 0)
|
||||||
}.timeInMillis
|
}.timeInMillis
|
||||||
else -> {
|
else -> {
|
||||||
return 0
|
return 0L
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} catch (_: Exception) {
|
||||||
|
return 0L
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun parseAbsoluteDate(dateStr: String): Long {
|
open fun parseAbsoluteDate(dateStr: String): Long {
|
||||||
return runCatching { dateFormat.parse(dateStr)?.time }
|
return try {
|
||||||
.getOrNull() ?: 0L
|
dateFormat.parse(dateStr)?.time ?: 0L
|
||||||
|
} catch (_: ParseException) {
|
||||||
|
0L
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open val pageListImageSelector = "img.chapter-img"
|
open val pageListImageSelector = "img.chapter-img"
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
package eu.kanade.tachiyomi.extension.en.holymanga
|
package eu.kanade.tachiyomi.extension.en.holymanga
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.multisrc.fmreader.FMReader
|
import eu.kanade.tachiyomi.multisrc.fmreader.FMReader
|
||||||
import eu.kanade.tachiyomi.source.model.SChapter
|
|
||||||
import org.jsoup.nodes.Element
|
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
@ -15,10 +13,4 @@ class HolyManga : FMReader(
|
|||||||
override val versionId = 2
|
override val versionId = 2
|
||||||
|
|
||||||
override val chapterUrlSelector = ""
|
override val chapterUrlSelector = ""
|
||||||
|
|
||||||
override fun chapterFromElement(element: Element, mangaTitle: String): SChapter {
|
|
||||||
return super.chapterFromElement(element, mangaTitle).apply {
|
|
||||||
date_upload = element.select(chapterTimeSelector).text().let { parseAbsoluteDate(it) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user