PlayerAndroid/app/src/main/java/code/name/monkey/retromusic/network/DeezerService.kt

70 lines
2.1 KiB
Kotlin
Raw Normal View History

2020-09-06 17:56:39 +00:00
package code.name.monkey.retromusic.network
2019-06-06 16:27:42 +00:00
import android.content.Context
2020-09-06 17:56:39 +00:00
import code.name.monkey.retromusic.model.DeezerResponse
2019-06-06 16:27:42 +00:00
import okhttp3.Cache
import okhttp3.Interceptor
import okhttp3.OkHttpClient
import retrofit2.Call
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.create
import retrofit2.http.GET
import retrofit2.http.Query
import java.io.File
import java.util.*
2019-06-06 16:27:42 +00:00
private const val BASE_QUERY_ARTIST = "search/artist"
private const val BASE_URL = "https://api.deezer.com/"
2020-09-06 11:03:24 +00:00
interface DeezerService {
2019-06-06 16:27:42 +00:00
@GET("$BASE_QUERY_ARTIST&limit=1")
fun getArtistImage(
2020-02-05 15:44:40 +00:00
@Query("q") artistName: String
2019-06-06 16:27:42 +00:00
): Call<DeezerResponse>
companion object {
2019-08-02 13:08:47 +00:00
operator fun invoke(
2020-02-05 15:44:40 +00:00
client: okhttp3.Call.Factory
2020-09-06 11:03:24 +00:00
): DeezerService {
2019-06-06 16:27:42 +00:00
return Retrofit.Builder()
2020-02-05 15:44:40 +00:00
.baseUrl(BASE_URL)
.callFactory(client)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create()
2019-06-06 16:27:42 +00:00
}
2019-08-02 13:08:47 +00:00
fun createDefaultOkHttpClient(
2020-02-05 15:44:40 +00:00
context: Context
2020-04-24 18:50:46 +00:00
): OkHttpClient.Builder = OkHttpClient.Builder()
.cache(createDefaultCache(context))
.addInterceptor(createCacheControlInterceptor())
2019-06-06 16:27:42 +00:00
2019-08-02 13:08:47 +00:00
private fun createDefaultCache(
2020-02-05 15:44:40 +00:00
context: Context
2019-08-02 13:08:47 +00:00
): Cache? {
2019-06-06 16:27:42 +00:00
val cacheDir = File(context.applicationContext.cacheDir.absolutePath, "/okhttp-deezer/")
if (cacheDir.mkdir() or cacheDir.isDirectory) {
return Cache(cacheDir, 1024 * 1024 * 10)
}
return null
}
private fun createCacheControlInterceptor(): Interceptor {
return Interceptor { chain ->
val modifiedRequest = chain.request().newBuilder()
2020-02-05 15:44:40 +00:00
.addHeader(
"Cache-Control",
String.format(
Locale.getDefault(),
"max-age=31536000, max-stale=31536000"
)
).build()
2019-06-06 16:27:42 +00:00
chain.proceed(modifiedRequest)
}
}
}
}