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' extName = 'Comick.fun'
pkgNameSuffix = 'all.comickfun' pkgNameSuffix = 'all.comickfun'
extClass = '.ComickFunFactory' extClass = '.ComickFunFactory'
extVersionCode = 7 extVersionCode = 8
isNsfw = true isNsfw = true
} }

View File

@ -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"
} }