MangaPark - improved chapter parsing (#3499)

This commit is contained in:
Mike 2020-06-12 01:56:01 -04:00 committed by GitHub
parent e3143073ee
commit a0151d64ad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 13 deletions

View File

@ -5,7 +5,7 @@ ext {
appName = 'Tachiyomi: MangaPark'
pkgNameSuffix = 'en.mangapark'
extClass = '.MangaPark'
extVersionCode = 14
extVersionCode = 15
libVersion = '1.2'
}

View File

@ -18,7 +18,6 @@ import eu.kanade.tachiyomi.util.asJsoup
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
import kotlin.math.absoluteValue
import okhttp3.CacheControl
import okhttp3.Request
import okhttp3.Response
@ -138,9 +137,20 @@ class MangaPark : ConfigurableSource, ParsedHttpSource() {
}
}
val mangaBySource = response.asJsoup().select("div[id^=stream]").map { sourceElement ->
sourceElement.select(chapterListSelector()).map { chapterFromElement(it, sourceElement.select("i + span").text()) }
}
val mangaBySource = response.asJsoup().select("div[id^=stream]")
.map { sourceElement ->
var lastNum = 0F
val sourceName = sourceElement.select("i + span").text()
sourceElement.select(chapterListSelector())
.reversed() // so incrementing lastNum works
.map { chapterElement ->
chapterFromElement(chapterElement, sourceName, lastNum)
.also { lastNum = it.chapter_number }
}
.distinctBy { it.chapter_number } // there's even duplicate chapters within a source ( -.- )
}
return when (getSourcePref()) {
// source with most chapters along with chapters that source doesn't have
"most" -> {
@ -156,19 +166,33 @@ class MangaPark : ConfigurableSource, ParsedHttpSource() {
"fox" -> mangaBySource.flatten().filterOrAll("Fox")
"panda" -> mangaBySource.flatten().filterOrAll("Panda")
// all sources, all chapters
else -> mangaBySource.flatten()
else -> mangaBySource.flatMap { it.reversed() }
}
}
override fun chapterListSelector() = ".volume .chapter li"
private fun chapterFromElement(element: Element, source: String) = SChapter.create().apply {
url = element.select(".tit > a").first().attr("href").replaceAfterLast("/", "")
name = element.select(".tit > a").first().text()
// Get the chapter number or create a unique one if it's not available
chapter_number = Regex("""\b\d+\.?\d?\b""").find(name)?.value?.toFloatOrNull() ?: ".${name.hashCode().absoluteValue}".toFloat()
date_upload = parseDate(element.select(".time").first().text().trim())
scanlator = source
private fun chapterFromElement(element: Element, source: String, lastNum: Float): SChapter {
fun Float.incremented() = this + .00001F
fun Float?.orIncrementLastNum() = if (this == null || this < lastNum) lastNum.incremented() else this
return SChapter.create().apply {
url = element.select(".tit > a").first().attr("href").replaceAfterLast("/", "")
name = element.select(".tit > a").first().text()
// Get the chapter number or create a unique one if it's not available
chapter_number = Regex("""\b\d+\.?\d?\b""").findAll(name)
.toList()
.map { it.value.toFloatOrNull() }
.let { nums ->
when {
nums.count() == 1 -> nums[0].orIncrementLastNum()
nums.count() >= 2 -> nums[1].orIncrementLastNum()
else -> lastNum.incremented()
}
}
date_upload = parseDate(element.select(".time").first().text().trim())
scanlator = source
}
}
override fun chapterFromElement(element: Element): SChapter = throw UnsupportedOperationException("Not used")