diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/ExHentaiParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/ExHentaiParser.kt index e8025121..2e0bae3a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/ExHentaiParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/ExHentaiParser.kt @@ -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 diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/grouple/GroupleParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/grouple/GroupleParser.kt index 7660e495..c470c919 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/grouple/GroupleParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/grouple/GroupleParser.kt @@ -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() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/util/Parse.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/util/Parse.kt index e1466010..ac7b4f77 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/util/Parse.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/util/Parse.kt @@ -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() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/util/String.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/util/String.kt index f6237441..0d4d83ba 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/util/String.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/util/String.kt @@ -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", "
") +public fun String.nl2br(): String = replace("\n", "
") 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') {