Skip to content

Commit

Permalink
add: trakt header interceptor
Browse files Browse the repository at this point in the history
  • Loading branch information
hadi-norouzi committed Dec 31, 2023
1 parent be7a7b3 commit 201972e
Show file tree
Hide file tree
Showing 5 changed files with 78 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,14 @@ import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import io.filmtime.data.network.adapter.NetworkCallAdapterFactory
import io.filmtime.data.network.interceptor.TraktHeadersInterceptor
import io.filmtime.data.network.trakt.TraktAuthService
import io.filmtime.data.network.trakt.TraktSearchService
import io.filmtime.data.network.trakt.TraktSyncService
import io.filmtime.data.network.annotation.TmdbApi
import io.filmtime.data.network.annotation.TraktHeaderInterceptor
import io.filmtime.data.network.annotation.TraktNetwork
import io.filmtime.data.network.annotation.TraktOkHttp
import io.filmtime.data.network.interceptor.TmdbApiKeyInterceptor
import kotlinx.serialization.json.Json
import okhttp3.Interceptor
Expand Down Expand Up @@ -37,6 +41,11 @@ object NetworkModule {
@Singleton
fun providesTmdbInterceptor(): Interceptor = TmdbApiKeyInterceptor()

@Provides
@Singleton
@TraktHeaderInterceptor
fun providesTraktHeadersInterceptor(): Interceptor = TraktHeadersInterceptor()

@Provides
@Singleton
fun providesTmdbOkHttpClient(@TmdbApi interceptor: Interceptor): OkHttpClient {
Expand Down Expand Up @@ -67,11 +76,24 @@ object NetworkModule {
fun providesTraktRetrofit(
json: Json,
networkCallAdapterFactory: CallAdapter.Factory,
@TraktOkHttp client: OkHttpClient,
): Retrofit {
return Retrofit.Builder()
.baseUrl("https://api.trakt.tv/")
.addConverterFactory(json.asConverterFactory(MediaType.get("application/json")))
.addCallAdapterFactory(networkCallAdapterFactory)
.client(client)
.build()
}

@Provides
@Singleton
@TraktOkHttp
fun providesTraktOkHttp(
@TraktHeaderInterceptor headerInterceptor: Interceptor,
): OkHttpClient {
return OkHttpClient.Builder()
.addInterceptor(headerInterceptor)
.build()
}

Expand Down Expand Up @@ -112,13 +134,4 @@ object NetworkModule {
}
}

@Qualifier
@Target(
AnnotationTarget.FUNCTION,
AnnotationTarget.PROPERTY_GETTER,
AnnotationTarget.PROPERTY_SETTER,
AnnotationTarget.FIELD,
AnnotationTarget.VALUE_PARAMETER,
)
@Retention(AnnotationRetention.BINARY)
annotation class TraktNetwork

Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package io.filmtime.data.network.annotation

import javax.inject.Qualifier

@Qualifier
@Target(
AnnotationTarget.FUNCTION,
AnnotationTarget.PROPERTY_GETTER,
AnnotationTarget.PROPERTY_SETTER,
AnnotationTarget.FIELD,
AnnotationTarget.VALUE_PARAMETER,
)
@Retention(AnnotationRetention.BINARY)
annotation class TraktNetwork


@Qualifier
@Target(
AnnotationTarget.FUNCTION,
AnnotationTarget.PROPERTY_GETTER,
AnnotationTarget.PROPERTY_SETTER,
AnnotationTarget.FIELD,
AnnotationTarget.VALUE_PARAMETER,
)
@Retention(AnnotationRetention.BINARY)
annotation class TraktOkHttp

@Qualifier
@Target(
AnnotationTarget.FUNCTION,
AnnotationTarget.PROPERTY_GETTER,
AnnotationTarget.PROPERTY_SETTER,
AnnotationTarget.FIELD,
AnnotationTarget.VALUE_PARAMETER,
)
@Retention(AnnotationRetention.BINARY)
annotation class TraktHeaderInterceptor
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.filmtime.data.network.interceptor

import io.filmtime.data.network.BuildConfig
import okhttp3.Interceptor
import okhttp3.Request
import okhttp3.Response

class TraktHeadersInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val original = chain.request()
val requestBuilder: Request.Builder = original.newBuilder()
.header("trakt-api-key", BuildConfig.TRAKT_CLIENT_ID)
.header("trakt-api-version", "2")

val request: Request = requestBuilder.build()
return chain.proceed(request)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,6 @@ import retrofit2.http.Path
interface TraktSearchService {

@GET("search/{id_type}/{id}?type=movie")
@Headers(
"trakt-api-key: ${BuildConfig.TRAKT_CLIENT_ID}",
"trakt-api-version: 2",
)
suspend fun movieIDLookup(
@Path("id_type") idType: String,
@Path("id") id: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,31 +12,19 @@ import retrofit2.http.Path
interface TraktSyncService {

@GET("sync/watched/{type}")
@Headers(
"trakt-api-key: ${BuildConfig.TRAKT_CLIENT_ID}",
"trakt-api-version: 2",
)
suspend fun getWatchedHistory(
@Path("type") type: String,
@Header("Authorization") accessToken: String,
): NetworkResponse<List<TraktWatched>, TraktErrorResponse>

@GET("sync/history/{type}/{id}")
@Headers(
"trakt-api-key: ${BuildConfig.TRAKT_CLIENT_ID}",
"trakt-api-version: 2",
)
suspend fun getHistoryById(
@Path("type") type: String,
@Path("id") id: String,
@Header("Authorization") accessToken: String,
): NetworkResponse<List<HistoryMovie>, TraktErrorResponse>

@POST("sync/history")
@Headers(
"trakt-api-key: ${BuildConfig.TRAKT_CLIENT_ID}",
"trakt-api-version: 2",
)
suspend fun addMovieToHistory(
@Header("Authorization") accessToken: String,
@Body body: AddHistoryRequest,
Expand Down

0 comments on commit 201972e

Please sign in to comment.