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())
if (response.headersContentLength() <= 256) {
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 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

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

@ -5,7 +5,6 @@ package org.koitharu.kotatsu.parsers.util
import okhttp3.Response
import okhttp3.ResponseBody
import okhttp3.internal.closeQuietly
import org.jetbrains.annotations.Blocking
import org.json.JSONArray
import org.json.JSONObject
import org.jsoup.Jsoup
@ -18,7 +17,7 @@ import java.text.DateFormat
* @see [parseJson]
* @see [parseJsonArray]
*/
@Blocking
// TODO suspend
public fun Response.parseHtml(): Document = try {
val body = requireBody()
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("\\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
} 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.nl2br() = replace("\n", "<br>")
public fun String.nl2br(): String = replace("\n", "<br>")
public fun ByteArray.byte2HexFormatted(): String {
val str = StringBuilder(size * 2)
@ -229,7 +229,7 @@ public fun String.almostEquals(other: String, @FloatRange(from = 0.0) 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() {
if (length > 2 && get(length - 1) == '0') {

Loading…
Cancel
Save