Comick.fun: Fix search result paging (#9570)

* Fix search result paging

* Refactor ratelimiting
This commit is contained in:
h-hyuuga 2021-10-21 06:44:42 -04:00 committed by GitHub
parent f7ef21ff03
commit 551cc08849
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 25 deletions

View File

@ -6,7 +6,7 @@ ext {
extName = 'Comick.fun'
pkgNameSuffix = 'all.comickfun'
extClass = '.ComickFunFactory'
extVersionCode = 7
extVersionCode = 8
isNsfw = true
}

View File

@ -1,6 +1,6 @@
package eu.kanade.tachiyomi.extension.all.comickfun
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.lib.ratelimit.SpecificHostRateLimitInterceptor
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.asObservableSuccess
import eu.kanade.tachiyomi.source.model.Filter
@ -12,10 +12,8 @@ import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.HttpSource
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.builtins.ListSerializer
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonArray
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.decodeFromJsonElement
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.polymorphic
import okhttp3.CacheControl
@ -59,7 +57,6 @@ abstract class ComickFun(override val lang: String, private val comickFunLang: S
final override val client: OkHttpClient
init {
val rateLimiter = RateLimitInterceptor(2)
val builder = super.client.newBuilder()
if (comickFunLang != "all")
// Add interceptor to enforce language
@ -85,17 +82,8 @@ abstract class ComickFun(override val lang: String, private val comickFunLang: S
}
}
)
/** Rate Limiter, shamelessly ~stolen from~ inspired by MangaDex
* Rate limits all requests that go to the baseurl
*/
builder.addNetworkInterceptor(
Interceptor { chain ->
return@Interceptor when (chain.request().url.toString().startsWith(baseUrl)) {
false -> chain.proceed(chain.request())
true -> rateLimiter.intercept(chain)
}
}
)
// Add interceptor to ratelimit api calls
builder.addNetworkInterceptor(SpecificHostRateLimitInterceptor(apiBase.toHttpUrl(), 2))
this.client = builder.build()
}
@ -170,14 +158,8 @@ abstract class ComickFun(override val lang: String, private val comickFunLang: S
}
@ExperimentalSerializationApi
override fun searchMangaParse(response: Response): MangasPage = json.parseToJsonElement(response.body!!.string()).let { parsed ->
when (parsed) {
is JsonObject -> json.decodeFromJsonElement<List<SManga>>(parsed["comics"]!!)
override fun searchMangaParse(response: Response) = json.decodeFromString<List<SManga>>(response.body!!.string())
.let { MangasPage(it, it.size == SEARCH_PAGE_LIMIT) }
is JsonArray -> MangasPage(json.decodeFromJsonElement(parsed), false)
else -> MangasPage(emptyList(), false)
}
}
/** Manga Details **/
@ -334,6 +316,7 @@ abstract class ComickFun(override val lang: String, private val comickFunLang: S
private fun SortFilter() = object : Select<LabeledValue>("Sort", getSorts()), QueryParam {
override val paramName = "sort"
}
private fun DemographicFilter() = object : MultiSelect<LabeledValue>("Demographic", getDemographics()), ArrayUrlParam {
override val paramName = "demographic"
}