Improve Reaper Scans metadata parsing (#13789)
* Add relative date parsing * Add series type parsing * Add detection for "cancelled" publication status * Bump version
This commit is contained in:
parent
cf1fb942ca
commit
5ca1e90b6d
|
@ -30,6 +30,7 @@ import org.jsoup.nodes.Document
|
||||||
import org.jsoup.nodes.Element
|
import org.jsoup.nodes.Element
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.Calendar
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
class ReaperScansFactory : SourceFactory {
|
class ReaperScansFactory : SourceFactory {
|
||||||
|
@ -115,8 +116,21 @@ class ReaperScansEn : ParsedHttpSource() {
|
||||||
"On hold" -> SManga.ON_HIATUS
|
"On hold" -> SManga.ON_HIATUS
|
||||||
"Complete" -> SManga.COMPLETED
|
"Complete" -> SManga.COMPLETED
|
||||||
"Ongoing" -> SManga.ONGOING
|
"Ongoing" -> SManga.ONGOING
|
||||||
|
"Dropped" -> SManga.CANCELLED
|
||||||
else -> SManga.UNKNOWN
|
else -> SManga.UNKNOWN
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val genreList = mutableListOf<String>()
|
||||||
|
val seriesType = when (document.select("dt:contains(Source Language)").next().text()) {
|
||||||
|
"Korean" -> "Manhwa"
|
||||||
|
"Chinese" -> "Manhua"
|
||||||
|
"Japanese" -> "Manga"
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
|
||||||
|
seriesType?.let { genreList.add(it) }
|
||||||
|
|
||||||
|
genre = genreList.takeIf { genreList.isNotEmpty() }?.joinToString(",")
|
||||||
description = document.select("section > div:nth-child(1) > div > p").first().text()
|
description = document.select("section > div:nth-child(1) > div > p").first().text()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,6 +216,7 @@ class ReaperScansEn : ParsedHttpSource() {
|
||||||
select("a").first()?.let { urlElement ->
|
select("a").first()?.let { urlElement ->
|
||||||
chapter.setUrlWithoutDomain(urlElement.attr("abs:href"))
|
chapter.setUrlWithoutDomain(urlElement.attr("abs:href"))
|
||||||
chapter.name = urlElement.select("p").first().text()
|
chapter.name = urlElement.select("p").first().text()
|
||||||
|
urlElement.select("p").takeIf { it.size > 1 }?.let { chapter.date_upload = parseRelativeDate(it[1].text()) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -285,6 +300,25 @@ class ReaperScansEn : ParsedHttpSource() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException("Not Used")
|
override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException("Not Used")
|
||||||
|
|
||||||
|
// Parses dates in this form:
|
||||||
|
// 21 horas ago
|
||||||
|
// Taken from multisrc/madara/Madara.kt
|
||||||
|
private fun parseRelativeDate(date: String): Long {
|
||||||
|
val number = Regex("""(\d+)""").find(date)?.value?.toIntOrNull() ?: return 0
|
||||||
|
val cal = Calendar.getInstance()
|
||||||
|
|
||||||
|
return when {
|
||||||
|
date.contains("day") -> cal.apply { add(Calendar.DAY_OF_MONTH, -number) }.timeInMillis
|
||||||
|
date.contains("hour") -> cal.apply { add(Calendar.HOUR, -number) }.timeInMillis
|
||||||
|
date.contains("minute") -> cal.apply { add(Calendar.MINUTE, -number) }.timeInMillis
|
||||||
|
date.contains("second") -> cal.apply { add(Calendar.SECOND, -number) }.timeInMillis
|
||||||
|
date.contains("week") -> cal.apply { add(Calendar.DAY_OF_MONTH, -number * 7) }.timeInMillis
|
||||||
|
date.contains("month") -> cal.apply { add(Calendar.MONTH, -number) }.timeInMillis
|
||||||
|
date.contains("year") -> cal.apply { add(Calendar.YEAR, -number) }.timeInMillis
|
||||||
|
else -> 0
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ReaperScansTr : ReaperScans(
|
class ReaperScansTr : ReaperScans(
|
||||||
|
|
Loading…
Reference in New Issue