master
Koitharu 2 years ago
parent 47e1c0fa89
commit 79e1d59482
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

@ -289,7 +289,7 @@ internal class ExHentaiParser(
val response = chain.proceed(chain.request()) val response = chain.proceed(chain.request())
if (response.headersContentLength() <= 256) { if (response.headersContentLength() <= 256) {
val text = response.peekBody(256).string() val text = response.peekBody(256).string()
if (text.startsWith("Your IP address has been temporarily banned", ignoreCase = true)) { if (text.contains("IP address has been temporarily banned", ignoreCase = true)) {
val hours = Regex("([0-9]+) hours?").find(text)?.groupValues?.getOrNull(1)?.toLongOrNull() ?: 0 val hours = Regex("([0-9]+) hours?").find(text)?.groupValues?.getOrNull(1)?.toLongOrNull() ?: 0
val minutes = Regex("([0-9]+) minutes?").find(text)?.groupValues?.getOrNull(1)?.toLongOrNull() ?: 0 val minutes = Regex("([0-9]+) minutes?").find(text)?.groupValues?.getOrNull(1)?.toLongOrNull() ?: 0
val seconds = Regex("([0-9]+) seconds?").find(text)?.groupValues?.getOrNull(1)?.toLongOrNull() ?: 0 val seconds = Regex("([0-9]+) seconds?").find(text)?.groupValues?.getOrNull(1)?.toLongOrNull() ?: 0

@ -155,7 +155,7 @@ internal abstract class GroupleParser(
chapters = chaptersList?.select("a.chapter-link") chapters = chaptersList?.select("a.chapter-link")
?.flatMapChapters(reversed = true) { a -> ?.flatMapChapters(reversed = true) { a ->
val tr = a.selectFirstParent("tr") ?: return@flatMapChapters emptyList() val tr = a.selectFirstParent("tr") ?: return@flatMapChapters emptyList()
val href = a.attrAsRelativeUrl("href").setQueryParam("d", userHash) val href = a.attrAsRelativeUrl("href")
val number = tr.attr("data-num").toFloatOrNull()?.div(10f) ?: 0f val number = tr.attr("data-num").toFloatOrNull()?.div(10f) ?: 0f
val volume = tr.attr("data-vol").toIntOrNull() ?: 0 val volume = tr.attr("data-vol").toIntOrNull() ?: 0
if (translations.isNullOrEmpty() || a.attr("data-translations").isEmpty()) { if (translations.isNullOrEmpty() || a.attr("data-translations").isEmpty()) {
@ -170,7 +170,7 @@ internal abstract class GroupleParser(
name = a.text().removePrefix(manga.title).trim(), name = a.text().removePrefix(manga.title).trim(),
number = number, number = number,
volume = volume, volume = volume,
url = href, url = href.withQueryParam("d", userHash),
uploadDate = dateFormat.tryParse(tr.selectFirst("td.date")?.text()), uploadDate = dateFormat.tryParse(tr.selectFirst("td.date")?.text()),
scanlator = translators, scanlator = translators,
source = newSource, source = newSource,
@ -181,13 +181,13 @@ internal abstract class GroupleParser(
val translationData = JSONArray(a.attr("data-translations")) val translationData = JSONArray(a.attr("data-translations"))
translationData.mapJSON { jo -> translationData.mapJSON { jo ->
val personId = jo.getLong("personId") val personId = jo.getLong("personId")
val link = href.setQueryParam("tran", personId.toString()) val link = href.withQueryParam("tran", personId.toString())
MangaChapter( MangaChapter(
id = generateUid(link), id = generateUid(link),
name = a.text().removePrefix(manga.title).trim(), name = a.text().removePrefix(manga.title).trim(),
number = number, number = number,
volume = volume, volume = volume,
url = link, url = link.withQueryParam("d", userHash),
uploadDate = dateFormat.tryParse(jo.getStringOrNull("dateCreated")), uploadDate = dateFormat.tryParse(jo.getStringOrNull("dateCreated")),
scanlator = null, scanlator = null,
source = newSource, source = newSource,
@ -499,7 +499,7 @@ internal abstract class GroupleParser(
return result return result
} }
private fun String.setQueryParam(name: String, value: String?): String { private fun String.withQueryParam(name: String, value: String?): String {
if (value == null) return this if (value == null) return this
return toAbsoluteUrl(domain) return toAbsoluteUrl(domain)
.toHttpUrl() .toHttpUrl()

@ -5,7 +5,6 @@ package org.koitharu.kotatsu.parsers.util
import okhttp3.Response import okhttp3.Response
import okhttp3.ResponseBody import okhttp3.ResponseBody
import okhttp3.internal.closeQuietly import okhttp3.internal.closeQuietly
import org.jetbrains.annotations.Blocking
import org.json.JSONArray import org.json.JSONArray
import org.json.JSONObject import org.json.JSONObject
import org.jsoup.Jsoup import org.jsoup.Jsoup
@ -18,7 +17,7 @@ import java.text.DateFormat
* @see [parseJson] * @see [parseJson]
* @see [parseJsonArray] * @see [parseJsonArray]
*/ */
@Blocking // TODO suspend
public fun Response.parseHtml(): Document = try { public fun Response.parseHtml(): Document = try {
val body = requireBody() val body = requireBody()
val charset = body.contentType()?.charset()?.name() val charset = body.contentType()?.charset()?.name()

@ -76,11 +76,11 @@ public fun String.transliterate(skipMissing: Boolean): String {
} }
} }
public fun String.toFileNameSafe() = this.transliterate(false) public fun String.toFileNameSafe(): String = this.transliterate(false)
.replace(Regex("[^a-z0-9_\\-]", arraySetOf(RegexOption.IGNORE_CASE)), " ") .replace(Regex("[^a-z0-9_\\-]", arraySetOf(RegexOption.IGNORE_CASE)), " ")
.replace(Regex("\\s+"), "_") .replace(Regex("\\s+"), "_")
public fun String.ellipsize(maxLength: Int) = if (this.length > maxLength) { public fun String.ellipsize(maxLength: Int): String = if (this.length > maxLength) {
this.take(maxLength - 1) + Typography.ellipsis this.take(maxLength - 1) + Typography.ellipsis
} else this } else this
@ -102,7 +102,7 @@ public fun String.urlEncoded(): String = URLEncoder.encode(this, Charsets.UTF_8.
public fun String.urlDecode(): String = URLDecoder.decode(this, Charsets.UTF_8.name()) public fun String.urlDecode(): String = URLDecoder.decode(this, Charsets.UTF_8.name())
public fun String.nl2br() = replace("\n", "<br>") public fun String.nl2br(): String = replace("\n", "<br>")
public fun ByteArray.byte2HexFormatted(): String { public fun ByteArray.byte2HexFormatted(): String {
val str = StringBuilder(size * 2) val str = StringBuilder(size * 2)
@ -229,7 +229,7 @@ public fun String.almostEquals(other: String, @FloatRange(from = 0.0) threshold:
return diff < threshold return diff < threshold
} }
public fun String.isNumeric() = all { c -> c.isDigit() } public fun String.isNumeric(): Boolean = all { c -> c.isDigit() }
internal fun StringBuilder.removeTrailingZero() { internal fun StringBuilder.removeTrailingZero() {
if (length > 2 && get(length - 1) == '0') { if (length > 2 && get(length - 1) == '0') {

Loading…
Cancel
Save