1
1
package com.dicoding.moviecatalog.data.movie.source
2
2
3
+ import android.util.Log
3
4
import androidx.lifecycle.LiveData
4
5
import androidx.lifecycle.MutableLiveData
6
+ import com.dicoding.moviecatalog.api.ApiConfig
5
7
import com.dicoding.moviecatalog.data.movie.MovieCastEntity
6
8
import com.dicoding.moviecatalog.data.movie.MovieEntity
9
+ import com.dicoding.moviecatalog.data.movie.response.MovieListResponse
7
10
import com.dicoding.moviecatalog.data.movie.source.remote.RemoteDataSource
8
11
import com.dicoding.moviecatalog.data.movie.source.remote.response.CastMovieResponse
9
12
import com.dicoding.moviecatalog.data.movie.source.remote.response.CastTvShowResponse
10
13
import com.dicoding.moviecatalog.data.movie.source.remote.response.MovieResponse
11
14
import com.dicoding.moviecatalog.data.movie.source.remote.response.TvShowResponse
12
15
import com.dicoding.moviecatalog.data.tvshow.TvShowCastEntity
13
16
import com.dicoding.moviecatalog.data.tvshow.TvShowEntity
17
+ import com.dicoding.moviecatalog.utils.JsonHelper
18
+ import retrofit2.Call
19
+ import retrofit2.Callback
20
+ import retrofit2.Response
14
21
15
22
class Repository private constructor(private val remoteDataSource : RemoteDataSource ) :
16
23
DataSource {
@@ -22,6 +29,8 @@ class Repository private constructor(private val remoteDataSource: RemoteDataSou
22
29
instance ? : synchronized(this ) {
23
30
instance ? : Repository (remoteData).apply { instance = this }
24
31
}
32
+
33
+ private const val TAG = " Repository"
25
34
}
26
35
27
36
override fun getAllMovies (): LiveData <List <MovieEntity >> {
@@ -50,6 +59,48 @@ class Repository private constructor(private val remoteDataSource: RemoteDataSou
50
59
return movieResults
51
60
}
52
61
62
+ override fun getAllMoviesApi (listId : String ): LiveData <ArrayList <MovieListResponse >> {
63
+ val resultAllMoviesApi = MutableLiveData <ArrayList <MovieListResponse >>()
64
+ val client = ApiConfig .getApiService().getMovieList(listId)
65
+ remoteDataSource.getAllMoviesApi(object : RemoteDataSource .LoadMoviesApiCallback {
66
+ override fun onAllMoviesApiReceived (movieApiResponses : ArrayList <MovieListResponse >) {
67
+
68
+ client.enqueue(object :
69
+ Callback < com.dicoding.moviecatalog.data.movie.response.MovieResponse > {
70
+ override fun onResponse (
71
+ call : Call <com.dicoding.moviecatalog.data.movie.response.MovieResponse >,
72
+ response : Response <com.dicoding.moviecatalog.data.movie.response.MovieResponse >
73
+ ) {
74
+ if (response.isSuccessful) {
75
+ if (response.body()?.items?.isEmpty() == true ) {
76
+ Log .e(
77
+ " Repository" ,
78
+ " response size: ${response.body()!! .items.size} "
79
+ )
80
+ } else {
81
+ Log .e(
82
+ " Repository" ,
83
+ " response size: ${response.body()!! .items.size} "
84
+ )
85
+ }
86
+ resultAllMoviesApi.postValue(response.body()?.items)
87
+ } else {
88
+ Log .e(" Repository" , " onFailure: ${response.message()} " )
89
+ }
90
+ }
91
+
92
+ override fun onFailure (
93
+ call : Call <com.dicoding.moviecatalog.data.movie.response.MovieResponse >,
94
+ t : Throwable
95
+ ) {
96
+ Log .e(" Repository" , " onFailure: ${t.message} " )
97
+ }
98
+ })
99
+ }
100
+ })
101
+ return resultAllMoviesApi
102
+ }
103
+
53
104
override fun getCastMovies (movieId : String ): LiveData <List <MovieCastEntity >> {
54
105
val castMovieResults = MutableLiveData <List <MovieCastEntity >>()
55
106
remoteDataSource.getCastMovies(movieId, object : RemoteDataSource .LoadCastMoviesCallback {
0 commit comments