mirror of
https://github.com/owenlejeune/TVTime.git
synced 2025-11-23 04:00:53 -05:00
replace retrofit calls with coroutines
This commit is contained in:
@@ -79,6 +79,9 @@ dependencies {
|
|||||||
|
|
||||||
implementation Dependencies.Coil.coil
|
implementation Dependencies.Coil.coil
|
||||||
|
|
||||||
|
//Coroutines
|
||||||
|
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0'
|
||||||
|
|
||||||
testImplementation Dependencies.Testing.junit
|
testImplementation Dependencies.Testing.junit
|
||||||
androidTestImplementation Dependencies.Testing.androidXJunit
|
androidTestImplementation Dependencies.Testing.androidXJunit
|
||||||
androidTestImplementation Dependencies.Testing.espressoCore
|
androidTestImplementation Dependencies.Testing.espressoCore
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
package com.owenlejeune.tvtime.api.tmdb
|
package com.owenlejeune.tvtime.api.tmdb
|
||||||
|
|
||||||
import com.owenlejeune.tvtime.api.tmdb.model.PopularMoviesResponse
|
import com.owenlejeune.tvtime.api.tmdb.model.PopularMoviesResponse
|
||||||
import retrofit2.Call
|
import retrofit2.Response
|
||||||
import retrofit2.http.GET
|
import retrofit2.http.GET
|
||||||
import retrofit2.http.Query
|
import retrofit2.http.Query
|
||||||
|
|
||||||
interface MoviesApi {
|
interface MoviesApi {
|
||||||
|
|
||||||
@GET("movie/popular")
|
@GET("movie/popular")
|
||||||
fun getPopularMovies(@Query("page") page: Int = 1): Call<PopularMoviesResponse>
|
suspend fun getPopularMovies(@Query("page") page: Int = 1): Response<PopularMoviesResponse>
|
||||||
// suspend fun getPopularMovies(@Query("page") page: Int = 1): PopularMoviesResponse
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,32 +1,11 @@
|
|||||||
package com.owenlejeune.tvtime.api.tmdb
|
package com.owenlejeune.tvtime.api.tmdb
|
||||||
|
|
||||||
import com.owenlejeune.tvtime.api.tmdb.model.PopularMoviesResponse
|
|
||||||
import org.koin.core.component.KoinComponent
|
import org.koin.core.component.KoinComponent
|
||||||
import retrofit2.Call
|
|
||||||
import retrofit2.Callback
|
|
||||||
import retrofit2.Response
|
|
||||||
|
|
||||||
class MoviesService: KoinComponent {
|
class MoviesService: KoinComponent {
|
||||||
|
|
||||||
private val service by lazy { TmdbClient().createMovieService() }
|
private val service by lazy { TmdbClient().createMovieService() }
|
||||||
|
|
||||||
fun getPopularMovies(page: Int = 1, callback: (isSuccessful: Boolean, response: PopularMoviesResponse?) -> Unit) {
|
suspend fun getPopularMovies(page: Int = 1) = service.getPopularMovies(page)
|
||||||
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)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
package com.owenlejeune.tvtime.api.tmdb
|
package com.owenlejeune.tvtime.api.tmdb
|
||||||
|
|
||||||
import com.owenlejeune.tvtime.api.tmdb.model.PopularTvResponse
|
import com.owenlejeune.tvtime.api.tmdb.model.PopularTvResponse
|
||||||
import retrofit2.Call
|
import retrofit2.Response
|
||||||
import retrofit2.http.GET
|
import retrofit2.http.GET
|
||||||
import retrofit2.http.Query
|
import retrofit2.http.Query
|
||||||
|
|
||||||
interface TvApi {
|
interface TvApi {
|
||||||
|
|
||||||
@GET("tv/popular")
|
@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
|
package com.owenlejeune.tvtime.api.tmdb
|
||||||
|
|
||||||
import com.owenlejeune.tvtime.api.tmdb.model.PopularTvResponse
|
|
||||||
import org.koin.core.component.KoinComponent
|
import org.koin.core.component.KoinComponent
|
||||||
import retrofit2.Call
|
|
||||||
import retrofit2.Callback
|
|
||||||
import retrofit2.Response
|
|
||||||
|
|
||||||
class TvService: KoinComponent {
|
class TvService: KoinComponent {
|
||||||
|
|
||||||
private val service by lazy { TmdbClient().createTvService() }
|
private val service by lazy { TmdbClient().createTvService() }
|
||||||
|
|
||||||
fun getPopularTv(page: Int = 1, callback: (isSuccessful: Boolean, response: PopularTvResponse?) -> Unit) {
|
suspend fun getPopularTv(page: Int = 1) = service.getPoplarTv(page)
|
||||||
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)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -5,6 +5,10 @@ import androidx.compose.runtime.Composable
|
|||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
import com.owenlejeune.tvtime.api.tmdb.MoviesService
|
import com.owenlejeune.tvtime.api.tmdb.MoviesService
|
||||||
import com.owenlejeune.tvtime.ui.components.PosterGrid
|
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)
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
@@ -14,9 +18,12 @@ fun MoviesTab(appNavController: NavController) {
|
|||||||
// val movieListItems: LazyPagingItems<PopularMovie> = moviesList.collectAsLazyPagingItems()
|
// val movieListItems: LazyPagingItems<PopularMovie> = moviesList.collectAsLazyPagingItems()
|
||||||
PosterGrid(appNavController = appNavController) { moviesList ->
|
PosterGrid(appNavController = appNavController) { moviesList ->
|
||||||
val service = MoviesService()
|
val service = MoviesService()
|
||||||
service.getPopularMovies { isSuccessful, response ->
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
if (isSuccessful) {
|
val response = service.getPopularMovies()
|
||||||
moviesList.value = response!!.movies
|
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 androidx.navigation.NavController
|
||||||
import com.owenlejeune.tvtime.api.tmdb.TvService
|
import com.owenlejeune.tvtime.api.tmdb.TvService
|
||||||
import com.owenlejeune.tvtime.ui.components.PosterGrid
|
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)
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun TvTab(appNavController: NavController) {
|
fun TvTab(appNavController: NavController) {
|
||||||
PosterGrid(appNavController = appNavController) { tvList ->
|
PosterGrid(appNavController = appNavController) { tvList ->
|
||||||
val service = TvService()
|
val service = TvService()
|
||||||
service.getPopularTv { isSuccessful, response ->
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
if (isSuccessful) {
|
val response = service.getPopularTv()
|
||||||
tvList.value = response!!.tv
|
if (response.isSuccessful) {
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
tvList.value = response.body()!!.tv
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user