Comick.fun: Fix search result paging (#9570)
* Fix search result paging * Refactor ratelimiting
This commit is contained in:
parent
f7ef21ff03
commit
551cc08849
|
@ -6,7 +6,7 @@ ext {
|
||||||
extName = 'Comick.fun'
|
extName = 'Comick.fun'
|
||||||
pkgNameSuffix = 'all.comickfun'
|
pkgNameSuffix = 'all.comickfun'
|
||||||
extClass = '.ComickFunFactory'
|
extClass = '.ComickFunFactory'
|
||||||
extVersionCode = 7
|
extVersionCode = 8
|
||||||
isNsfw = true
|
isNsfw = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package eu.kanade.tachiyomi.extension.all.comickfun
|
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.GET
|
||||||
import eu.kanade.tachiyomi.network.asObservableSuccess
|
import eu.kanade.tachiyomi.network.asObservableSuccess
|
||||||
import eu.kanade.tachiyomi.source.model.Filter
|
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 eu.kanade.tachiyomi.source.online.HttpSource
|
||||||
import kotlinx.serialization.ExperimentalSerializationApi
|
import kotlinx.serialization.ExperimentalSerializationApi
|
||||||
import kotlinx.serialization.builtins.ListSerializer
|
import kotlinx.serialization.builtins.ListSerializer
|
||||||
|
import kotlinx.serialization.decodeFromString
|
||||||
import kotlinx.serialization.json.Json
|
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.SerializersModule
|
||||||
import kotlinx.serialization.modules.polymorphic
|
import kotlinx.serialization.modules.polymorphic
|
||||||
import okhttp3.CacheControl
|
import okhttp3.CacheControl
|
||||||
|
@ -59,7 +57,6 @@ abstract class ComickFun(override val lang: String, private val comickFunLang: S
|
||||||
final override val client: OkHttpClient
|
final override val client: OkHttpClient
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val rateLimiter = RateLimitInterceptor(2)
|
|
||||||
val builder = super.client.newBuilder()
|
val builder = super.client.newBuilder()
|
||||||
if (comickFunLang != "all")
|
if (comickFunLang != "all")
|
||||||
// Add interceptor to enforce language
|
// 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
|
// Add interceptor to ratelimit api calls
|
||||||
* Rate limits all requests that go to the baseurl
|
builder.addNetworkInterceptor(SpecificHostRateLimitInterceptor(apiBase.toHttpUrl(), 2))
|
||||||
*/
|
|
||||||
builder.addNetworkInterceptor(
|
|
||||||
Interceptor { chain ->
|
|
||||||
return@Interceptor when (chain.request().url.toString().startsWith(baseUrl)) {
|
|
||||||
false -> chain.proceed(chain.request())
|
|
||||||
true -> rateLimiter.intercept(chain)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
this.client = builder.build()
|
this.client = builder.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,14 +158,8 @@ abstract class ComickFun(override val lang: String, private val comickFunLang: S
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExperimentalSerializationApi
|
@ExperimentalSerializationApi
|
||||||
override fun searchMangaParse(response: Response): MangasPage = json.parseToJsonElement(response.body!!.string()).let { parsed ->
|
override fun searchMangaParse(response: Response) = json.decodeFromString<List<SManga>>(response.body!!.string())
|
||||||
when (parsed) {
|
.let { MangasPage(it, it.size == SEARCH_PAGE_LIMIT) }
|
||||||
is JsonObject -> json.decodeFromJsonElement<List<SManga>>(parsed["comics"]!!)
|
|
||||||
.let { MangasPage(it, it.size == SEARCH_PAGE_LIMIT) }
|
|
||||||
is JsonArray -> MangasPage(json.decodeFromJsonElement(parsed), false)
|
|
||||||
else -> MangasPage(emptyList(), false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Manga Details **/
|
/** 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 {
|
private fun SortFilter() = object : Select<LabeledValue>("Sort", getSorts()), QueryParam {
|
||||||
override val paramName = "sort"
|
override val paramName = "sort"
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun DemographicFilter() = object : MultiSelect<LabeledValue>("Demographic", getDemographics()), ArrayUrlParam {
|
private fun DemographicFilter() = object : MultiSelect<LabeledValue>("Demographic", getDemographics()), ArrayUrlParam {
|
||||||
override val paramName = "demographic"
|
override val paramName = "demographic"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue