BatCave: add referer (#8440)

This commit is contained in:
AwkwardPeak7 2025-04-12 11:40:32 +05:00 committed by Draff
parent 1d2fc4493c
commit 17d6151584
No known key found for this signature in database
GPG Key ID: E8A89F3211677653
2 changed files with 11 additions and 23 deletions

View File

@ -1,7 +1,7 @@
ext { ext {
extName = 'BatCave' extName = 'BatCave'
extClass = '.BatCave' extClass = '.BatCave'
extVersionCode = 2 extVersionCode = 3
} }
apply from: "$rootDir/common.gradle" apply from: "$rootDir/common.gradle"

View File

@ -11,16 +11,15 @@ import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.source.online.HttpSource
import eu.kanade.tachiyomi.util.asJsoup import eu.kanade.tachiyomi.util.asJsoup
import keiyoushi.utils.firstInstanceOrNull
import keiyoushi.utils.parseAs
import keiyoushi.utils.tryParse
import kotlinx.serialization.SerializationException import kotlinx.serialization.SerializationException
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
import okhttp3.FormBody import okhttp3.FormBody
import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.Request import okhttp3.Request
import okhttp3.Response import okhttp3.Response
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
import uy.kohesive.injekt.injectLazy
import java.text.ParseException
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Locale import java.util.Locale
@ -31,7 +30,8 @@ class BatCave : HttpSource() {
override val supportsLatest = true override val supportsLatest = true
override val baseUrl = "https://batcave.biz" override val baseUrl = "https://batcave.biz"
private val json: Json by injectLazy() override fun headersBuilder() = super.headersBuilder()
.add("Referer", "$baseUrl/")
override fun popularMangaRequest(page: Int) = searchMangaRequest(page, "", SortFilter.POPULAR) override fun popularMangaRequest(page: Int) = searchMangaRequest(page, "", SortFilter.POPULAR)
override fun popularMangaParse(response: Response) = searchMangaParse(response) override fun popularMangaParse(response: Response) = searchMangaParse(response)
@ -54,11 +54,11 @@ class BatCave : HttpSource() {
var filtersApplied = false var filtersApplied = false
val url = "$baseUrl/comix/".toHttpUrl().newBuilder().apply { val url = "$baseUrl/comix/".toHttpUrl().newBuilder().apply {
filters.get<YearFilter>()?.addFilterToUrl(this) filters.firstInstanceOrNull<YearFilter>()?.addFilterToUrl(this)
?.also { filtersApplied = it } ?.also { filtersApplied = it }
filters.get<PublisherFilter>()?.addFilterToUrl(this) filters.firstInstanceOrNull<PublisherFilter>()?.addFilterToUrl(this)
?.also { filtersApplied = filtersApplied || it } ?.also { filtersApplied = filtersApplied || it }
filters.get<GenreFilter>()?.addFilterToUrl(this) filters.firstInstanceOrNull<GenreFilter>()?.addFilterToUrl(this)
?.also { filtersApplied = filtersApplied || it } ?.also { filtersApplied = filtersApplied || it }
if (filtersApplied) { if (filtersApplied) {
@ -69,7 +69,7 @@ class BatCave : HttpSource() {
} }
}.build().toString() }.build().toString()
val sort = filters.get<SortFilter>()!! val sort = filters.firstInstanceOrNull<SortFilter>()!!
return if (sort.getSort() == "") { return if (sort.getSort() == "") {
GET(url, headers) GET(url, headers)
@ -201,11 +201,7 @@ class BatCave : HttpSource() {
url = "/reader/${data.comicId}/${chap.id}${data.xhash}" url = "/reader/${data.comicId}/${chap.id}${data.xhash}"
name = chap.title name = chap.title
chapter_number = chap.number chapter_number = chap.number
date_upload = try { date_upload = dateFormat.tryParse(chap.date)
dateFormat.parse(chap.date)?.time ?: 0
} catch (_: ParseException) {
0
}
} }
} }
} }
@ -229,12 +225,4 @@ class BatCave : HttpSource() {
override fun imageUrlParse(response: Response): String { override fun imageUrlParse(response: Response): String {
throw UnsupportedOperationException() throw UnsupportedOperationException()
} }
private inline fun <reified T> FilterList.get(): T? {
return filterIsInstance<T>().firstOrNull()
}
private inline fun <reified T> String.parseAs(): T {
return json.decodeFromString(this)
}
} }