Decouple from the data-client service factory, with some code cleanup in the process (#5496)

This commit is contained in:
Paul Hawke 2024-01-29 16:46:01 -06:00 committed by GitHub
parent 7ec2a22fce
commit ab9e57f5be
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 75 additions and 71 deletions

View file

@ -0,0 +1,25 @@
package fr.free.nrw.commons.wikidata
import okhttp3.OkHttpClient
import org.wikipedia.json.GsonUtil
import retrofit2.Retrofit
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory
class CommonsServiceFactory(private val okHttpClient: OkHttpClient) {
private val builder: Retrofit.Builder by lazy {
// All instances of retrofit share this configuration, but create it lazily
Retrofit.Builder().client(okHttpClient)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(GsonUtil.getDefaultGson()))
}
private val retrofitCache: MutableMap<String, Retrofit> = mutableMapOf()
fun <T : Any> create(baseUrl: String, service: Class<T>): T = retrofitCache.getOrPut(baseUrl) {
// Cache instances of retrofit based on API backend
builder.baseUrl(baseUrl).build()
}.create(service)
}