mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-29 16:30:31 +05:30
83 lines
2.6 KiB
Kotlin
83 lines
2.6 KiB
Kotlin
package com.github.libretube.api
|
|
|
|
import com.github.libretube.BuildConfig
|
|
import com.github.libretube.constants.PreferenceKeys
|
|
import com.github.libretube.helpers.PreferenceHelper
|
|
import com.google.net.cronet.okhttptransport.CronetInterceptor
|
|
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
|
|
import okhttp3.MediaType.Companion.toMediaType
|
|
import okhttp3.OkHttpClient
|
|
import okhttp3.logging.HttpLoggingInterceptor
|
|
import retrofit2.Retrofit
|
|
import retrofit2.create
|
|
|
|
object RetrofitInstance {
|
|
private const val PIPED_API_URL = "https://pipedapi.kavin.rocks"
|
|
val apiUrl get() = PreferenceHelper.getString(PreferenceKeys.FETCH_INSTANCE, PIPED_API_URL)
|
|
val authUrl
|
|
get() = when (
|
|
PreferenceHelper.getBoolean(
|
|
PreferenceKeys.AUTH_INSTANCE_TOGGLE,
|
|
false
|
|
)
|
|
) {
|
|
true -> PreferenceHelper.getString(
|
|
PreferenceKeys.AUTH_INSTANCE,
|
|
PIPED_API_URL
|
|
)
|
|
|
|
false -> apiUrl
|
|
}
|
|
|
|
val lazyMgr = resettableManager()
|
|
private val kotlinxConverterFactory = JsonHelper.json
|
|
.asConverterFactory("application/json".toMediaType())
|
|
|
|
private val httpClient by lazy { buildClient() }
|
|
|
|
val api by resettableLazy(lazyMgr) {
|
|
Retrofit.Builder()
|
|
.baseUrl(apiUrl)
|
|
.callFactory(CronetHelper.callFactory)
|
|
.client(httpClient)
|
|
.addConverterFactory(kotlinxConverterFactory)
|
|
.build()
|
|
.create<PipedApi>()
|
|
}
|
|
|
|
val authApi by resettableLazy(lazyMgr) {
|
|
Retrofit.Builder()
|
|
.baseUrl(authUrl)
|
|
.callFactory(CronetHelper.callFactory)
|
|
.client(httpClient)
|
|
.addConverterFactory(kotlinxConverterFactory)
|
|
.build()
|
|
.create<PipedApi>()
|
|
}
|
|
|
|
val externalApi by resettableLazy(lazyMgr) {
|
|
Retrofit.Builder()
|
|
.baseUrl(apiUrl)
|
|
.callFactory(CronetHelper.callFactory)
|
|
.client(httpClient)
|
|
.addConverterFactory(kotlinxConverterFactory)
|
|
.build()
|
|
.create<ExternalApi>()
|
|
}
|
|
|
|
private fun buildClient(): OkHttpClient {
|
|
val httpClient = OkHttpClient().newBuilder()
|
|
.addInterceptor(CronetInterceptor.newBuilder(CronetHelper.cronetEngine).build())
|
|
|
|
if (BuildConfig.DEBUG) {
|
|
val loggingInterceptor = HttpLoggingInterceptor().apply {
|
|
level = HttpLoggingInterceptor.Level.BASIC
|
|
}
|
|
|
|
httpClient.addInterceptor(loggingInterceptor)
|
|
}
|
|
|
|
return httpClient.build()
|
|
}
|
|
}
|