Skip to content

Commit

Permalink
casts integration
Browse files Browse the repository at this point in the history
  • Loading branch information
pramodbharti committed Oct 18, 2023
1 parent 7e4a4c4 commit 8734ea7
Show file tree
Hide file tree
Showing 15 changed files with 121 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.pramodbharti.filmo.data.network

import com.pramodbharti.filmo.data.DISCOVER_MOVIES
import com.pramodbharti.filmo.data.network.MoviesApiService.Companion.TRENDING_MOVIES
import com.pramodbharti.filmo.data.network.models.CreditsResponse
import com.pramodbharti.filmo.data.network.models.MovieResponse
import com.pramodbharti.filmo.data.network.models.MoviesResponse
import retrofit2.http.GET
Expand Down Expand Up @@ -38,16 +39,17 @@ interface MoviesApiService {

@GET(MOVIE_DETAILS)
suspend fun getMovieDetails(@Path("movie_id") movieId: Int): MovieResponse

@GET(CREDITS_CAST)
suspend fun getCredits(@Path("movie_id") movieId: Int): CreditsResponse
companion object {
const val TRENDING_MOVIES = "trending/movie/day"
const val NOW_PLAYING_MOVIES = "movie/now_playing"
const val POPULAR_MOVIES = "movie/popular"
const val TOP_RATED_MOVIES = "movie/top_rated"
const val UPCOMING_MOVIES = "movie/upcoming"
const val RECOMMENDED_MOVIES = ""
const val SIMILAR_MOVIES = ""

const val RECOMMENDED_MOVIES = "movie/{movie_id}/recommendations"
const val SIMILAR_MOVIES = "movie/{movie_id}/similar"
const val MOVIE_DETAILS = "movie/{movie_id}"
const val CREDITS_CAST = "movie/{movie_id}/credits"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ data class CastResponse(
val name: String,
val gender: Int,
@SerialName("profile_path")
val profilePath: String,
val profilePath: String? = null,
val character: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.pramodbharti.filmo.data.network.models

import kotlinx.serialization.Serializable

@Serializable
data class CreditsResponse(
val cast:List<CastResponse>
)
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ data class MovieResponse(
val id: Int,
val adult: Boolean,
@SerialName("backdrop_path")
val backdropPath: String,
val backdropPath: String? = null,
@SerialName("original_language")
val originalLanguage: String,
@SerialName("original_title")
val originalTitle: String,
val overview: String,
val popularity: String,
@SerialName("poster_path")
val posterPath: String,
val posterPath: String? = null,
@SerialName("release_date")
val releaseDate: String,
val title: String,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.pramodbharti.filmo.data.repositories

import com.pramodbharti.filmo.data.network.models.CreditsResponse
import com.pramodbharti.filmo.data.network.models.MovieResponse
import com.pramodbharti.filmo.data.network.models.MoviesResponse

Expand All @@ -12,4 +13,5 @@ interface MoviesRepository {
suspend fun getMovieDetails(movieId: Int): MovieResponse
suspend fun getRecommendedMovies(movieId: Int):MoviesResponse
suspend fun getSimilarMovies(movieId: Int):MoviesResponse
suspend fun getAllCast(movieId: Int):CreditsResponse
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.pramodbharti.filmo.data.repositories

import com.pramodbharti.filmo.data.network.MoviesApiService
import com.pramodbharti.filmo.data.network.models.CreditsResponse
import com.pramodbharti.filmo.data.network.models.MovieResponse
import com.pramodbharti.filmo.data.network.models.MoviesResponse
import kotlinx.coroutines.CoroutineDispatcher
Expand Down Expand Up @@ -56,4 +57,10 @@ class NetworkMoviesRepository(private val moviesApiService: MoviesApiService, pr
}
}

override suspend fun getAllCast(movieId: Int): CreditsResponse {
return withContext(dispatcher){
moviesApiService.getCredits(movieId)
}
}

}
16 changes: 13 additions & 3 deletions app/src/main/java/com/pramodbharti/filmo/domain/MoviesUseCase.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.pramodbharti.filmo.domain

import com.pramodbharti.filmo.R
import com.pramodbharti.filmo.data.network.models.CastResponse
import com.pramodbharti.filmo.data.network.models.MovieResponse
import com.pramodbharti.filmo.data.repositories.MoviesRepository
import com.pramodbharti.filmo.ui.models.Cast
import com.pramodbharti.filmo.ui.models.MediaItem
import com.pramodbharti.filmo.ui.models.MovieDetails
import com.pramodbharti.filmo.ui.models.Movies
Expand Down Expand Up @@ -37,12 +39,13 @@ class MoviesUseCase(private val moviesRepository: MoviesRepository) {
suspend fun getMovieDetails(movieId: Int): MovieDetails {
return coroutineScope {
val movie = async { moviesRepository.getMovieDetails(movieId).toMovieItem() }
val casts = async { moviesRepository.getAllCast(movieId).cast.map { it.toCast() } }
val similar =
async { moviesRepository.getSimilarMovies(movieId).results.map { it.toMovieItem() } }
val recommended =
async { moviesRepository.getRecommendedMovies(movieId).results.map { it.toMovieItem() } }

MovieDetails(movie.await(), emptyList(), similar.await(), recommended.await())
MovieDetails(movie.await(), casts.await(), similar.await(), recommended.await())
}
}
}
Expand All @@ -51,7 +54,14 @@ private fun MovieResponse.toMovieItem(): MediaItem =
MediaItem(
id = id,
title = title,
poster = posterPath,
backdrop = backdropPath,
poster = posterPath ?: "",
backdrop = backdropPath ?: "",
overview = overview,
releaseDate = releaseDate
)

private fun CastResponse.toCast(): Cast =
Cast(
name = name,
photo = profilePath?:""
)
23 changes: 12 additions & 11 deletions app/src/main/java/com/pramodbharti/filmo/dummydata/DummyData.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,38 +10,39 @@ val dummyMovies: List<MediaItem> = listOf(
"Testing one",
"",
"",
"",
""
), MediaItem(
133,
"Testing one",
"",
"",
""
"", ""
), MediaItem(
1230,
"Testing one",
"",
"",
""
"", ""
),
MediaItem(
123,
"Testing one",
"",
"",
""
"", ""
), MediaItem(
133,
"Testing one",
"",
"",
""
"", ""
), MediaItem(
1230,
"Testing one",
"",
"",
""
"", ""
)
)

Expand All @@ -57,10 +58,10 @@ val dummyGenreList = listOf(
)

val dummyCastData = listOf(
Cast("Pramod Bharti", R.drawable.dddd),
Cast("Konark Chakra", R.drawable.placeholder),
Cast("Unknown Profile", R.drawable.profile_picture),
Cast("Pramod Bharti", R.drawable.dddd),
Cast("Konark Chakra", R.drawable.placeholder),
Cast("Unknown Profile", R.drawable.profile_picture)
Cast("Pramod Bharti", ""),
Cast("Konark Chakra", ""),
Cast("Unknown Profile", ""),
Cast("Pramod Bharti", ""),
Cast("Konark Chakra", ""),
Cast("Unknown Profile", "")
)
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import coil.compose.AsyncImage
import coil.request.ImageRequest
import coil.size.Scale
import com.pramodbharti.filmo.R
import com.pramodbharti.filmo.ui.Constants
import com.pramodbharti.filmo.ui.models.Cast

@Composable
Expand All @@ -45,20 +48,20 @@ fun CastItem(cast: Cast, modifier: Modifier = Modifier) {
AsyncImage(
model = ImageRequest
.Builder(context = LocalContext.current)
.data(cast.photo)
.data("${Constants.IMAGE_URL_500}${cast.photo}")
.crossfade(true)
.build(),
placeholder = painterResource(id = cast.photo),
error = painterResource(id = cast.photo),
placeholder = painterResource(id = R.drawable.placeholder),
error = painterResource(id = R.drawable.placeholder),
contentScale = ContentScale.Crop,
contentDescription = null,
contentDescription = cast.name,
modifier = Modifier
.clip(CircleShape)
.height(80.dp)
)
Text(
text = cast.name,
style = MaterialTheme.typography.bodyMedium,
style = MaterialTheme.typography.bodySmall,
textAlign = TextAlign.Center
)
}
Expand Down
3 changes: 1 addition & 2 deletions app/src/main/java/com/pramodbharti/filmo/ui/models/Cast.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,5 @@ import androidx.annotation.DrawableRes

data class Cast(
val name: String,
@DrawableRes
val photo: Int
val photo: String
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ data class MediaItem(
val title: String,
val poster: String,
val backdrop: String,
val overview: String,
val releaseDate: String
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.KeyboardArrowLeft
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.navigation.NavType
import androidx.navigation.navArgument
import com.pramodbharti.filmo.ui.screens.details.DetailsScreen
import com.pramodbharti.filmo.ui.screens.favs.FavItemsScreen
import com.pramodbharti.filmo.ui.screens.movies.MoviesScreen
Expand Down Expand Up @@ -33,6 +35,11 @@ object Favs : FilmoDestination {
object Details : FilmoDestination {
override val icon = Icons.Filled.KeyboardArrowLeft
override val route = "details"
val movieId = "movie_id"
val routeWithArgs = "$route/{$movieId}"
val arguments = listOf(
navArgument(movieId) { type = NavType.IntType }
)
}

object SeeAll : FilmoDestination {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.pramodbharti.filmo.ui.navigation

import android.util.Log
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.navigation.NavGraph.Companion.findStartDestination
Expand All @@ -24,7 +25,10 @@ fun FilmoNavHost(
modifier = modifier
) {
composable(Movies.route) {
MoviesScreen()
MoviesScreen(onMediaItemClick = { item ->
Log.e("TAG", "FilmoNavHost: ${item.toString()}")
navController.navigateToDetailsScreen(item.id)
})
}

composable(TvShows.route) {
Expand All @@ -39,8 +43,12 @@ fun FilmoNavHost(
SeeAllScreen()
}

composable(Details.route) {
DetailsScreen()
composable(
route = Details.routeWithArgs,
arguments = Details.arguments
) { navBackStack ->
val movieId = navBackStack.arguments?.getInt(Details.movieId)
DetailsScreen(movieId = movieId)
}
}
}
Expand All @@ -50,4 +58,8 @@ fun NavHostController.navigateSingleTopTo(route: String) =
popUpTo(this@navigateSingleTopTo.graph.findStartDestination().id) { saveState = true }
launchSingleTop = true
restoreState = true
}
}

fun NavHostController.navigateToDetailsScreen(movieId: Int) {
this.navigateSingleTopTo("${Details.route}/$movieId")
}
Loading

0 comments on commit 8734ea7

Please sign in to comment.