mirror of
https://github.com/owenlejeune/TVTime.git
synced 2025-11-22 19:50:54 -05:00
replace retrofit calls with coroutines
This commit is contained in:
@@ -1,14 +1,13 @@
|
||||
package com.owenlejeune.tvtime.api.tmdb
|
||||
|
||||
import com.owenlejeune.tvtime.api.tmdb.model.PopularMoviesResponse
|
||||
import retrofit2.Call
|
||||
import retrofit2.Response
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.Query
|
||||
|
||||
interface MoviesApi {
|
||||
|
||||
@GET("movie/popular")
|
||||
fun getPopularMovies(@Query("page") page: Int = 1): Call<PopularMoviesResponse>
|
||||
// suspend fun getPopularMovies(@Query("page") page: Int = 1): PopularMoviesResponse
|
||||
suspend fun getPopularMovies(@Query("page") page: Int = 1): Response<PopularMoviesResponse>
|
||||
|
||||
}
|
||||
@@ -1,32 +1,11 @@
|
||||
package com.owenlejeune.tvtime.api.tmdb
|
||||
|
||||
import com.owenlejeune.tvtime.api.tmdb.model.PopularMoviesResponse
|
||||
import org.koin.core.component.KoinComponent
|
||||
import retrofit2.Call
|
||||
import retrofit2.Callback
|
||||
import retrofit2.Response
|
||||
|
||||
class MoviesService: KoinComponent {
|
||||
|
||||
private val service by lazy { TmdbClient().createMovieService() }
|
||||
|
||||
fun getPopularMovies(page: Int = 1, callback: (isSuccessful: Boolean, response: PopularMoviesResponse?) -> Unit) {
|
||||
service.getPopularMovies(page = page).enqueue(object : Callback<PopularMoviesResponse> {
|
||||
override fun onResponse(
|
||||
call: Call<PopularMoviesResponse>,
|
||||
response: Response<PopularMoviesResponse>
|
||||
) {
|
||||
response.body()?.let { body ->
|
||||
callback.invoke(true, body)
|
||||
} ?: run {
|
||||
callback.invoke(false, null)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFailure(call: Call<PopularMoviesResponse>, t: Throwable) {
|
||||
callback.invoke(false, null)
|
||||
}
|
||||
})
|
||||
}
|
||||
suspend fun getPopularMovies(page: Int = 1) = service.getPopularMovies(page)
|
||||
|
||||
}
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.owenlejeune.tvtime.api.tmdb
|
||||
|
||||
import com.owenlejeune.tvtime.api.tmdb.model.PopularTvResponse
|
||||
import retrofit2.Call
|
||||
import retrofit2.Response
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.Query
|
||||
|
||||
interface TvApi {
|
||||
|
||||
@GET("tv/popular")
|
||||
fun getPoplarTv(@Query("page") page: Int = 1): Call<PopularTvResponse>
|
||||
suspend fun getPoplarTv(@Query("page") page: Int = 1): Response<PopularTvResponse>
|
||||
|
||||
}
|
||||
@@ -1,28 +1,10 @@
|
||||
package com.owenlejeune.tvtime.api.tmdb
|
||||
|
||||
import com.owenlejeune.tvtime.api.tmdb.model.PopularTvResponse
|
||||
import org.koin.core.component.KoinComponent
|
||||
import retrofit2.Call
|
||||
import retrofit2.Callback
|
||||
import retrofit2.Response
|
||||
|
||||
class TvService: KoinComponent {
|
||||
|
||||
private val service by lazy { TmdbClient().createTvService() }
|
||||
|
||||
fun getPopularTv(page: Int = 1, callback: (isSuccessful: Boolean, response: PopularTvResponse?) -> Unit) {
|
||||
service.getPoplarTv(page = page).enqueue(object : Callback<PopularTvResponse> {
|
||||
override fun onResponse(call: Call<PopularTvResponse>, response: Response<PopularTvResponse>) {
|
||||
response.body()?.let { body ->
|
||||
callback.invoke(true, body)
|
||||
} ?: run {
|
||||
callback.invoke(false, null)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFailure(call: Call<PopularTvResponse>, t: Throwable) {
|
||||
callback.invoke(false, null)
|
||||
}
|
||||
})
|
||||
}
|
||||
suspend fun getPopularTv(page: Int = 1) = service.getPoplarTv(page)
|
||||
}
|
||||
@@ -5,6 +5,10 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.navigation.NavController
|
||||
import com.owenlejeune.tvtime.api.tmdb.MoviesService
|
||||
import com.owenlejeune.tvtime.ui.components.PosterGrid
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
@Composable
|
||||
@@ -14,9 +18,12 @@ fun MoviesTab(appNavController: NavController) {
|
||||
// val movieListItems: LazyPagingItems<PopularMovie> = moviesList.collectAsLazyPagingItems()
|
||||
PosterGrid(appNavController = appNavController) { moviesList ->
|
||||
val service = MoviesService()
|
||||
service.getPopularMovies { isSuccessful, response ->
|
||||
if (isSuccessful) {
|
||||
moviesList.value = response!!.movies
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
val response = service.getPopularMovies()
|
||||
if (response.isSuccessful) {
|
||||
withContext(Dispatchers.Main) {
|
||||
moviesList.value = response.body()!!.movies
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,15 +5,22 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.navigation.NavController
|
||||
import com.owenlejeune.tvtime.api.tmdb.TvService
|
||||
import com.owenlejeune.tvtime.ui.components.PosterGrid
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
@Composable
|
||||
fun TvTab(appNavController: NavController) {
|
||||
PosterGrid(appNavController = appNavController) { tvList ->
|
||||
val service = TvService()
|
||||
service.getPopularTv { isSuccessful, response ->
|
||||
if (isSuccessful) {
|
||||
tvList.value = response!!.tv
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
val response = service.getPopularTv()
|
||||
if (response.isSuccessful) {
|
||||
withContext(Dispatchers.Main) {
|
||||
tvList.value = response.body()!!.tv
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user