From 76130b935844d54ca3638a80d3e8f320846f6e37 Mon Sep 17 00:00:00 2001 From: Jordan Artzet Date: Mon, 6 Feb 2023 19:56:43 +0100 Subject: [PATCH] :construction: prepare class for the movie details request --- .../api/MovieApplicationAPI.kt | 15 +++-- .../pm/movieapplication/api/dtos/GenreDTO.kt | 8 +++ .../api/dtos/MediaResultDTO.kt | 24 +++---- .../api/dtos/MovieDetailsDTO.kt | 48 ++++++++++++++ .../{TvShowDTO.kt => TvShowDetailsDTO.kt} | 2 +- .../model/media/MediaResult.kt | 2 +- .../model/media/movie/Movie.kt | 12 ++-- .../model/media/movie/MovieDetails.kt | 8 +-- .../model/media/tvshow/TvShow.kt | 6 +- .../repository/TvShowRepository.kt | 64 ++++++++++++++++++- .../movieapplication/ui/viewmodel/TvShowVM.kt | 11 +++- .../utils/MediaResultMapper.kt | 14 ++-- Sources/app/src/main/res/values/arrays.xml | 2 + Sources/app/src/main/res/values/strings.xml | 4 +- 14 files changed, 177 insertions(+), 43 deletions(-) create mode 100644 Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/GenreDTO.kt create mode 100644 Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/MovieDetailsDTO.kt rename Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/{TvShowDTO.kt => TvShowDetailsDTO.kt} (96%) create mode 100644 Sources/app/src/main/res/values/arrays.xml diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/MovieApplicationAPI.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/MovieApplicationAPI.kt index 5b9350a..a8d2bd0 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/MovieApplicationAPI.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/MovieApplicationAPI.kt @@ -1,7 +1,7 @@ package fr.iut.pm.movieapplication.api import fr.iut.pm.movieapplication.api.dtos.MovieDTO -import fr.iut.pm.movieapplication.api.dtos.MovieResultDTO +import fr.iut.pm.movieapplication.api.dtos.MovieDetailsDTO import fr.iut.pm.movieapplication.api.dtos.PopularDTO import fr.iut.pm.movieapplication.utils.Constants.Companion.API_KEY import retrofit2.Call @@ -25,18 +25,25 @@ interface MovieApplicationAPI { @GET("movie/top_rated") suspend fun getTopRatedMovies(@Query("api_key") apiKey: String = API_KEY, @Query("page") page : Int = 1) : Response + // Movie details + @GET("movie/{movie_id}") + fun getMovieDetails(@Path("movie_id") movieId : Int, @Query("api_key") apiKey: String = API_KEY) : Response // TvShow @GET("tv/popular") - suspend fun getPopularTvShow(@Query("api_key") apiKey : String = API_KEY, @Query("page") page : Int = 1) : Response + suspend fun getPopularTvShows(@Query("api_key") apiKey : String = API_KEY, @Query("page") page : Int = 1) : Response + @GET("tv/airing_today") + suspend fun getAiringTodayTvShows(@Query("api_key") apiKey: String = API_KEY, @Query("page") page : Int = 1) : Response + @GET("tv/on_the_air") + suspend fun getTvOnTheAirTvShows(@Query("api_key") apiKey: String = API_KEY, @Query("page") page : Int = 1) : Response + @GET("tv/top_rated") + suspend fun getTopRatedTvShows(@Query("api_key") apiKey: String = API_KEY, @Query("page") page : Int = 1) : Response @GET("trending/{media_type}/{time_window}") fun getTrending(@Path("media_type") mediaType : String = "all", @Path("time_window") timeWindow : String = "day", @Query("api_key") apiKey: String = API_KEY ) : Call - @GET("movie/{movie_id") - fun getMovieDetails(@Path("movie_id") movieId : Int, @Query("api_key") apiKey: String = API_KEY) : Call @GET("tv/{tv_id}") fun getShowDetails(@Path("tv_id") tvId : Int, @Query("api_key") apiKey: String = API_KEY) diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/GenreDTO.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/GenreDTO.kt new file mode 100644 index 0000000..8bbdaa4 --- /dev/null +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/GenreDTO.kt @@ -0,0 +1,8 @@ +package fr.iut.pm.movieapplication.api.dtos + +data class GenreDTO( + val id : Int, + val name : String +) { + +} diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/MediaResultDTO.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/MediaResultDTO.kt index 2a979af..a56948c 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/MediaResultDTO.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/MediaResultDTO.kt @@ -4,23 +4,23 @@ import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @Json(name = "results") -data class MediaResultDTO( +open class MediaResultDTO( @Json(name = "poster_path") val posterPath : String?, val adult : Boolean?, - val overview : String, + val overview : String? = null, @Json(name = "first_air_date") - val firstAirDate : String?, + val firstAirDate : String? = null, @Json(name = "release_date") - val releaseDate : String?, + val releaseDate : String? = null, @Json(name = "origin_country") - val originCountry : List?, - @Json(name = "genre_ids") - val genreIds : List, + val originCountry : List? = null, +// @Json(name = "genre_ids") +// val genreIds : List, val id : Int, @Json(name = "original_title") - val originalTitle : String?, + val originalTitle : String? = null, @Json(name = "original_language") val originalLanguage : String, val title : String?, @@ -29,14 +29,14 @@ data class MediaResultDTO( val popularity : Double, @Json(name = "vote_count") val voteCount : Int, - val video : Boolean?, + //val video : Boolean?, @Json(name = "vote_average") val voteAverage : Double, - val name: String?, + val name: String? = null, @Json(name = "original_name") - val originalName : String?, + val originalName : String? = null, @Json(name = "media_type") - val mediaType : String? + val mediaType : String? = null ) { } \ No newline at end of file diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/MovieDetailsDTO.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/MovieDetailsDTO.kt new file mode 100644 index 0000000..4fc1dae --- /dev/null +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/MovieDetailsDTO.kt @@ -0,0 +1,48 @@ +package fr.iut.pm.movieapplication.api.dtos + +import fr.iut.pm.movieapplication.model.Genre + +class MovieDetailsDTO( + + adult : Boolean?, + backdropPath : String?, + val budget : Int, + val genres : List, + val homepage : String?, + id : Int, + originalLanguage : String, + originalTitle : String, + overview : String?, + popularity : Double, + posterPath : String?, + //prod companies + //prod countries + releaseDate : String?, + val revenue : Int, + //spoken language + val status : String, + title : String, + voteAverage : Double, + voteCount : Int + + + +) : MediaResultDTO( + adult = adult, + backdropPath = backdropPath, + id = id, + originalLanguage = originalLanguage, + originalTitle = originalTitle, + overview = overview, + popularity = popularity, + posterPath = posterPath, + releaseDate = releaseDate, + title = title, + voteAverage = voteAverage, + voteCount = voteCount, +) { + + + + +} \ No newline at end of file diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/TvShowDTO.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/TvShowDetailsDTO.kt similarity index 96% rename from Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/TvShowDTO.kt rename to Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/TvShowDetailsDTO.kt index be4247c..bdee72e 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/TvShowDTO.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/api/dtos/TvShowDetailsDTO.kt @@ -2,7 +2,7 @@ package fr.iut.pm.movieapplication.api.dtos import com.squareup.moshi.Json -open class TvShowDTO( +open class TvShowDetailsDTO( @Json(name = "poster_path") open val posterPath: String?, diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/model/media/MediaResult.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/model/media/MediaResult.kt index fbe2ce4..d9c8594 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/model/media/MediaResult.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/model/media/MediaResult.kt @@ -7,7 +7,7 @@ data class MediaResult( val overview: String, val releaseDate: String, val originCountry: List? = null, - val genreIds: List, +// val genreIds: List, val id: Int, val originalTitle: String, val originalLanguage: String, diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/model/media/movie/Movie.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/model/media/movie/Movie.kt index 32ac156..ad61088 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/model/media/movie/Movie.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/model/media/movie/Movie.kt @@ -5,7 +5,7 @@ open class Movie( open val adult: Boolean, open val overview: String, open val releaseDate: String, - open val genreIds: List, +// open val genreIds: List, open val id: Int, open val originalTitle: String, open val originalLanguage: String, @@ -13,8 +13,8 @@ open class Movie( open val backdropPath: String?, open val popularity: Double, open val voteCount: Int, - open val video: Boolean?, - open val voteAverage: Double, + //open val video: Boolean?, + open val voteAverage: Double ) { override fun equals(other: Any?): Boolean { @@ -27,7 +27,7 @@ open class Movie( if (adult != other.adult) return false if (overview != other.overview) return false if (releaseDate != other.releaseDate) return false - if (genreIds != other.genreIds) return false +// if (genreIds != other.genreIds) return false if (id != other.id) return false if (originalTitle != other.originalTitle) return false if (originalLanguage != other.originalLanguage) return false @@ -35,7 +35,6 @@ open class Movie( if (backdropPath != other.backdropPath) return false if (popularity != other.popularity) return false if (voteCount != other.voteCount) return false - if (video != other.video) return false if (voteAverage != other.voteAverage) return false return true @@ -46,7 +45,7 @@ open class Movie( result = 31 * result + adult.hashCode() result = 31 * result + overview.hashCode() result = 31 * result + releaseDate.hashCode() - result = 31 * result + genreIds.hashCode() +// result = 31 * result + genreIds.hashCode() result = 31 * result + id result = 31 * result + originalTitle.hashCode() result = 31 * result + originalLanguage.hashCode() @@ -54,7 +53,6 @@ open class Movie( result = 31 * result + (backdropPath?.hashCode() ?: 0) result = 31 * result + popularity.hashCode() result = 31 * result + voteCount - result = 31 * result + (video?.hashCode() ?: 0) result = 31 * result + voteAverage.hashCode() return result } diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/model/media/movie/MovieDetails.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/model/media/movie/MovieDetails.kt index c70e337..ab5a9e2 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/model/media/movie/MovieDetails.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/model/media/movie/MovieDetails.kt @@ -10,7 +10,7 @@ data class MovieDetails( override val adult: Boolean, override val overview: String, override val releaseDate: String, - override val genreIds : List, +// override val genreIds : List, override val id: Int, override val originalTitle: String, override val originalLanguage: String, @@ -18,7 +18,7 @@ data class MovieDetails( override val backdropPath: String?, override val popularity: Double, override val voteCount: Int, - override val video: Boolean?, +// override val video: Boolean?, override val voteAverage: Double, val mediaType: String, @@ -35,7 +35,7 @@ data class MovieDetails( adult, overview, releaseDate, - genreIds, +// genreIds, id, originalTitle, originalLanguage, @@ -43,7 +43,7 @@ data class MovieDetails( backdropPath, popularity, voteCount, - video, +// video, voteAverage) { diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/model/media/tvshow/TvShow.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/model/media/tvshow/TvShow.kt index 0b698dc..22a8bfd 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/model/media/tvshow/TvShow.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/model/media/tvshow/TvShow.kt @@ -9,7 +9,7 @@ open class TvShow( open val overview: String, open val firstAirDate: String?, open val originCountry: List, - open val genreIds: List, +// open val genreIds: List, open val originalLanguage: String, open val voteCount: Int, open val name: String, @@ -32,7 +32,7 @@ open class TvShow( if (overview != other.overview) return false if (firstAirDate != other.firstAirDate) return false if (originCountry != other.originCountry) return false - if (genreIds != other.genreIds) return false +// if (genreIds != other.genreIds) return false if (originalLanguage != other.originalLanguage) return false if (voteCount != other.voteCount) return false if (name != other.name) return false @@ -51,7 +51,7 @@ open class TvShow( result = 31 * result + overview.hashCode() result = 31 * result + (firstAirDate?.hashCode() ?: 0) result = 31 * result + originCountry.hashCode() - result = 31 * result + genreIds.hashCode() +// result = 31 * result + genreIds.hashCode() result = 31 * result + originalLanguage.hashCode() result = 31 * result + voteCount result = 31 * result + name.hashCode() diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/TvShowRepository.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/TvShowRepository.kt index 01e2e10..58ccf1d 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/TvShowRepository.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/repository/TvShowRepository.kt @@ -7,11 +7,71 @@ import fr.iut.pm.movieapplication.utils.MediaResultMapper class TvShowRepository { - suspend fun getPopularTvShow(page : Int = 1 ) : List { + suspend fun getPopularTvShows(page : Int = 1 ) : List { val listMovie : MutableList = mutableListOf() - val response = RetrofitInstance.api.getPopularTvShow(page = page) + val response = RetrofitInstance.api.getPopularTvShows(page = page) + if (response.isSuccessful) { + Log.d("List :", response.body().toString()) + val popularDTO = response.body() + val listMoviesDTO = popularDTO?.results + listMoviesDTO?.forEach { + val tvShow = MediaResultMapper.mapToTvShow(it) + listMovie.add(tvShow) + Log.d("Movie ", tvShow.name ) + } + } + else Log.d("Error failure", response.message()) + + return listMovie + } + + suspend fun getAiringTodayTvShows(page : Int = 1 ) : List { + + val listMovie : MutableList = mutableListOf() + + val response = RetrofitInstance.api.getAiringTodayTvShows(page = page) + if (response.isSuccessful) { + Log.d("List :", response.body().toString()) + val popularDTO = response.body() + val listMoviesDTO = popularDTO?.results + listMoviesDTO?.forEach { + val tvShow = MediaResultMapper.mapToTvShow(it) + listMovie.add(tvShow) + Log.d("Movie ", tvShow.name ) + } + } + else Log.d("Error failure", response.message()) + + return listMovie + } + + suspend fun getTvOnTheAirTvShows(page : Int = 1 ) : List { + + val listMovie : MutableList = mutableListOf() + + val response = RetrofitInstance.api.getTvOnTheAirTvShows(page = page) + if (response.isSuccessful) { + Log.d("List :", response.body().toString()) + val popularDTO = response.body() + val listMoviesDTO = popularDTO?.results + listMoviesDTO?.forEach { + val tvShow = MediaResultMapper.mapToTvShow(it) + listMovie.add(tvShow) + Log.d("Movie ", tvShow.name ) + } + } + else Log.d("Error failure", response.message()) + + return listMovie + } + + suspend fun getTopRatedTvShows(page : Int = 1 ) : List { + + val listMovie : MutableList = mutableListOf() + + val response = RetrofitInstance.api.getTopRatedTvShows(page = page) if (response.isSuccessful) { Log.d("List :", response.body().toString()) val popularDTO = response.body() diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/TvShowVM.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/TvShowVM.kt index 33b1c4b..383b73b 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/TvShowVM.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/ui/viewmodel/TvShowVM.kt @@ -27,7 +27,16 @@ class TvShowVM : ViewModel() { currentPage = 1 when(currentFilter) { "Populaires" -> viewModelScope.launch { - tvShowLiveData.postValue(tvShowRepository.getPopularTvShow()) + tvShowLiveData.postValue(tvShowRepository.getPopularTvShows()) + } + "Diffusées aujourd\'hui" -> viewModelScope.launch { + tvShowLiveData.postValue(tvShowRepository.getAiringTodayTvShows()) + } + "En cours de diffusion" -> viewModelScope.launch { + tvShowLiveData.postValue(tvShowRepository.getTvOnTheAirTvShows()) + } + "Les mieux notées" -> viewModelScope.launch { + tvShowLiveData.postValue(tvShowRepository.getTopRatedTvShows()) } } } diff --git a/Sources/app/src/main/java/fr/iut/pm/movieapplication/utils/MediaResultMapper.kt b/Sources/app/src/main/java/fr/iut/pm/movieapplication/utils/MediaResultMapper.kt index 0b58a33..0b8bd7f 100644 --- a/Sources/app/src/main/java/fr/iut/pm/movieapplication/utils/MediaResultMapper.kt +++ b/Sources/app/src/main/java/fr/iut/pm/movieapplication/utils/MediaResultMapper.kt @@ -14,10 +14,10 @@ object MediaResultMapper { id = mediaResultDTO.id, backdropPath = mediaResultDTO.backdropPath ?: "", voteAverage = mediaResultDTO.voteAverage, - overview = mediaResultDTO.overview, + overview = mediaResultDTO.overview ?: "", firstAirDate = mediaResultDTO.firstAirDate, originCountry = mediaResultDTO.originCountry!!, - genreIds = mediaResultDTO.genreIds, +// genreIds = mediaResultDTO.genreIds, originalLanguage = mediaResultDTO.originalLanguage, voteCount = mediaResultDTO.voteCount, name = mediaResultDTO.name!!, @@ -29,9 +29,9 @@ object MediaResultMapper { return Movie( posterPath = mediaResultDTO.posterPath, adult = mediaResultDTO.adult!!, - overview = mediaResultDTO.overview, + overview = mediaResultDTO.overview ?: "", releaseDate = mediaResultDTO.releaseDate ?: "", - genreIds = mediaResultDTO.genreIds, +// genreIds = mediaResultDTO.genreIds, id = mediaResultDTO.id, originalTitle = mediaResultDTO.originalTitle!!, originalLanguage = mediaResultDTO.originalLanguage, @@ -39,7 +39,7 @@ object MediaResultMapper { backdropPath = mediaResultDTO.backdropPath, popularity = mediaResultDTO.popularity, voteCount = mediaResultDTO.voteCount, - video = mediaResultDTO.video, + //video = mediaResultDTO.video, voteAverage = mediaResultDTO.voteAverage ) } @@ -48,10 +48,10 @@ object MediaResultMapper { return MediaResult( posterPath = mediaResultDTO.posterPath, adult = mediaResultDTO.adult!!, - overview = mediaResultDTO.overview, + overview = mediaResultDTO.overview ?: "", releaseDate = mediaResultDTO.releaseDate ?: mediaResultDTO.firstAirDate!! , originCountry = mediaResultDTO.originCountry, - genreIds = mediaResultDTO.genreIds, +// genreIds = mediaResultDTO.genreIds, id = mediaResultDTO.id, originalTitle = mediaResultDTO.originalTitle ?: mediaResultDTO.originalName!!, //if it's not a movie also it's a tvshow originalLanguage = mediaResultDTO.originalLanguage, diff --git a/Sources/app/src/main/res/values/arrays.xml b/Sources/app/src/main/res/values/arrays.xml new file mode 100644 index 0000000..a6b3dae --- /dev/null +++ b/Sources/app/src/main/res/values/arrays.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/Sources/app/src/main/res/values/strings.xml b/Sources/app/src/main/res/values/strings.xml index 79bb1d8..c8587f9 100644 --- a/Sources/app/src/main/res/values/strings.xml +++ b/Sources/app/src/main/res/values/strings.xml @@ -13,7 +13,9 @@ Populaires Gratuits section_nested_scroll_view - + + + Populaires