|
@@ -9,8 +9,10 @@ import eu.kanade.tachiyomi.data.source.getLanguages
|
|
|
import eu.kanade.tachiyomi.data.source.model.MangasPage
|
|
|
import eu.kanade.tachiyomi.data.source.model.Page
|
|
|
import eu.kanade.tachiyomi.util.asJsoup
|
|
|
+import eu.kanade.tachiyomi.util.attrOrText
|
|
|
import okhttp3.Request
|
|
|
import okhttp3.Response
|
|
|
+import org.jsoup.Jsoup
|
|
|
import org.jsoup.nodes.Element
|
|
|
import java.text.SimpleDateFormat
|
|
|
import java.util.*
|
|
@@ -127,28 +129,59 @@ class YamlOnlineSource(context: Context, mappings: Map<*, *>) : OnlineSource(con
|
|
|
}
|
|
|
|
|
|
override fun pageListParse(response: Response, pages: MutableList<Page>) {
|
|
|
- val document = response.asJsoup()
|
|
|
+ val body = response.body().string()
|
|
|
+ val url = response.request().url().toString()
|
|
|
+
|
|
|
+ // TODO lazy initialization in Kotlin 1.1
|
|
|
+ val document = Jsoup.parse(body, url)
|
|
|
+
|
|
|
with(map.pages) {
|
|
|
- val url = response.request().url().toString()
|
|
|
- pages_css?.let {
|
|
|
- for (element in document.select(it)) {
|
|
|
- val value = element.attr(pages_attr)
|
|
|
- val pageUrl = replace?.let { url.replace(it.toRegex(), replacement!!.replace("\$value", value)) } ?: value
|
|
|
- pages.add(Page(pages.size, pageUrl))
|
|
|
- }
|
|
|
+ // Capture a list of values where page urls will be resolved.
|
|
|
+ val capturedPages = if (pages_regex != null)
|
|
|
+ pages_regex!!.toRegex().findAll(body).map { it.value }.toList()
|
|
|
+ else if (pages_css != null)
|
|
|
+ document.select(pages_css).map { it.attrOrText(pages_attr!!) }
|
|
|
+ else
|
|
|
+ null
|
|
|
+
|
|
|
+ // For each captured value, obtain the url and create a new page.
|
|
|
+ capturedPages?.forEach { value ->
|
|
|
+ // If the captured value isn't an url, we have to use replaces with the chapter url.
|
|
|
+ val pageUrl = if (replace != null && replacement != null)
|
|
|
+ url.replace(replace!!.toRegex(), replacement!!.replace("\$value", value))
|
|
|
+ else
|
|
|
+ value
|
|
|
+
|
|
|
+ pages.add(Page(pages.size, pageUrl))
|
|
|
}
|
|
|
|
|
|
- for ((i, element) in document.select(image_css).withIndex()) {
|
|
|
- pages.getOrNull(i)?.imageUrl = element.absUrl(image_attr)
|
|
|
+ // Capture a list of images.
|
|
|
+ val capturedImages = if (image_regex != null)
|
|
|
+ image_regex!!.toRegex().findAll(body).map { it.groups[1]?.value }.toList()
|
|
|
+ else if (image_css != null)
|
|
|
+ document.select(image_css).map { it.absUrl(image_attr) }
|
|
|
+ else
|
|
|
+ null
|
|
|
+
|
|
|
+ // Assign the image url to each page
|
|
|
+ capturedImages?.forEachIndexed { i, url ->
|
|
|
+ val page = pages.getOrElse(i) { Page(i, "").apply { pages.add(this) } }
|
|
|
+ page.imageUrl = url
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
override fun imageUrlParse(response: Response): String {
|
|
|
- val document = response.asJsoup()
|
|
|
- return with(map.pages) {
|
|
|
- document.select(image_css).first().absUrl(image_attr)
|
|
|
+ val body = response.body().string()
|
|
|
+ val url = response.request().url().toString()
|
|
|
+
|
|
|
+ with(map.pages) {
|
|
|
+ return if (image_regex != null)
|
|
|
+ image_regex!!.toRegex().find(body)!!.groups[1]!!.value
|
|
|
+ else if (image_css != null)
|
|
|
+ Jsoup.parse(body, url).select(image_css).first().absUrl(image_attr)
|
|
|
+ else
|
|
|
+ throw Exception("image_regex and image_css are null")
|
|
|
}
|
|
|
}
|
|
|
|