parent
ddc0f661e6
commit
5a6b157c4f
@ -0,0 +1,42 @@
|
|||||||
|
package fr.iut.pm.movieapplication.api.dtos
|
||||||
|
|
||||||
|
import com.squareup.moshi.Json
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
|
||||||
|
@Json(name = "results")
|
||||||
|
data class MediaResultDTO(
|
||||||
|
|
||||||
|
@Json(name = "poster_path")
|
||||||
|
val posterPath : String,
|
||||||
|
val adult : Boolean,
|
||||||
|
val overview : String,
|
||||||
|
@Json(name = "first_air_date")
|
||||||
|
val firstAirDate : String?,
|
||||||
|
@Json(name = "release_date")
|
||||||
|
val releaseDate : String?,
|
||||||
|
@Json(name = "origin_country")
|
||||||
|
val originCountry : List<String>?,
|
||||||
|
@Json(name = "genre_ids")
|
||||||
|
val genreIds : List<Int>,
|
||||||
|
val id : Int,
|
||||||
|
@Json(name = "original_title")
|
||||||
|
val originalTitle : String?,
|
||||||
|
@Json(name = "original_language")
|
||||||
|
val originalLanguage : String,
|
||||||
|
val title : String?,
|
||||||
|
@Json(name = "backdrop_path")
|
||||||
|
val backdropPath : String,
|
||||||
|
val popularity : Double,
|
||||||
|
@Json(name = "vote_count")
|
||||||
|
val voteCount : Int,
|
||||||
|
val video : Boolean?,
|
||||||
|
@Json(name = "vote_average")
|
||||||
|
val voteAverage : Double,
|
||||||
|
val name: String?,
|
||||||
|
@Json(name = "original_name")
|
||||||
|
val originalName : String?,
|
||||||
|
@Json(name = "media_type")
|
||||||
|
val mediaType : String
|
||||||
|
) {
|
||||||
|
|
||||||
|
}
|
@ -1,44 +1,32 @@
|
|||||||
package fr.iut.pm.movieapplication.api.dtos
|
package fr.iut.pm.movieapplication.api.dtos
|
||||||
|
|
||||||
import androidx.room.ColumnInfo
|
|
||||||
import androidx.room.Embedded
|
|
||||||
import androidx.room.PrimaryKey
|
|
||||||
import androidx.room.Relation
|
|
||||||
import com.squareup.moshi.Json
|
import com.squareup.moshi.Json
|
||||||
import fr.iut.pm.movieapplication.model.Genre
|
|
||||||
import fr.iut.pm.movieapplication.model.ProductionCompany
|
|
||||||
import fr.iut.pm.movieapplication.model.ProductionCountry
|
|
||||||
import fr.iut.pm.movieapplication.network.dtos.GenreDTO
|
|
||||||
|
|
||||||
class MovieDTO (
|
open class MovieDTO (
|
||||||
val adult: Boolean,
|
|
||||||
val budget: Int,
|
|
||||||
val genres: Array<GenreDTO>?,
|
|
||||||
val homepage: String?,
|
|
||||||
val id: Int,
|
|
||||||
@Json(name = "original_language")
|
|
||||||
val originalLanguage: String,
|
|
||||||
@Json(name = "original_title")
|
|
||||||
val originalTitle: String,
|
|
||||||
val overview: String?,
|
|
||||||
val popularity: Double,
|
|
||||||
@Json(name = "poster_path")
|
@Json(name = "poster_path")
|
||||||
val posterPath: String?,
|
open val posterPath: String?,
|
||||||
@Json(name = "production_countries")
|
open val adult: Boolean,
|
||||||
val productionCountries: Array<ProductionCountry>,
|
open val overview: String,
|
||||||
@Json(name = "release_date")
|
@Json(name = "release_date")
|
||||||
val releaseDate: String,
|
open val releaseDate: String,
|
||||||
val revenue: Int,
|
@Json(name = "genre_ids")
|
||||||
val runtime: Int?,
|
open val genreIds: List<Int>,
|
||||||
//var spokenLanguages : Array<SpokenLanguage>,
|
open val id: Int,
|
||||||
val status: String,
|
@Json(name = "original_title")
|
||||||
@Json(name = "tag_line")
|
open val originalTitle: String,
|
||||||
val tagLine: String?,
|
@Json(name = "original_language")
|
||||||
val title: String,
|
open val originalLanguage: String,
|
||||||
@Json(name = "vote_average")
|
open val title: String,
|
||||||
val voteAverage: Double,
|
@Json(name = "backdrop_path")
|
||||||
|
open val backdropPath: String?,
|
||||||
|
open val popularity: Double,
|
||||||
@Json(name = "vote_count")
|
@Json(name = "vote_count")
|
||||||
val voteCount: Int,
|
open val voteCount: Int,
|
||||||
val backdropPath: String?
|
open val video : Boolean,
|
||||||
|
@Json(name = "vote_average")
|
||||||
|
open val voteAverage: Double
|
||||||
|
|
||||||
|
|
||||||
){
|
){
|
||||||
|
|
||||||
}
|
}
|
@ -1,64 +0,0 @@
|
|||||||
package fr.iut.pm.movieapplication.model
|
|
||||||
|
|
||||||
import androidx.room.ColumnInfo
|
|
||||||
import androidx.room.Entity
|
|
||||||
import androidx.room.PrimaryKey
|
|
||||||
|
|
||||||
@Entity(tableName = "movies_table")
|
|
||||||
data class Movie(
|
|
||||||
@ColumnInfo(name = "adult")
|
|
||||||
val adult: Boolean,
|
|
||||||
@ColumnInfo(name = "budget")
|
|
||||||
val budget: Int?,
|
|
||||||
@ColumnInfo(name = "genres")
|
|
||||||
val genres: Array<Genre>?,
|
|
||||||
@ColumnInfo(name = "homepage")
|
|
||||||
val homePage: String?,
|
|
||||||
@PrimaryKey
|
|
||||||
@ColumnInfo(name = "id")
|
|
||||||
val movieId: Int,
|
|
||||||
@ColumnInfo(name = "original_language")
|
|
||||||
val originalLanguage: String?,
|
|
||||||
@ColumnInfo(name = "original_title")
|
|
||||||
val originalTitle: String?,
|
|
||||||
val overview: String?,
|
|
||||||
val popularity: Double?,
|
|
||||||
@ColumnInfo(name = "poster_path")
|
|
||||||
val posterPath: String?,
|
|
||||||
val productionCompanies: Array<ProductionCompany>?,
|
|
||||||
@ColumnInfo(name = "production_countries")
|
|
||||||
val productionCountries: Array<ProductionCountry>?,
|
|
||||||
@ColumnInfo(name = "release_date")
|
|
||||||
val releaseDate: String?,
|
|
||||||
val revenue: Int?,
|
|
||||||
val runtime: Int?,
|
|
||||||
//var spokenLanguages : Array<SpokenLanguage>,
|
|
||||||
val status: String?,
|
|
||||||
@ColumnInfo(name = "tag_line")
|
|
||||||
val tagLine: String?,
|
|
||||||
val title: String?,
|
|
||||||
@ColumnInfo(name = "vote_average")
|
|
||||||
val voteAverage: Double?,
|
|
||||||
@ColumnInfo(name = "vote_count")
|
|
||||||
val voteCount: Int?,
|
|
||||||
val backdropPath: String?
|
|
||||||
|
|
||||||
|
|
||||||
) {
|
|
||||||
|
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean {
|
|
||||||
if (this === other) return true
|
|
||||||
if (javaClass != other?.javaClass) return false
|
|
||||||
|
|
||||||
other as Movie
|
|
||||||
|
|
||||||
if (movieId != other.movieId) return false
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun hashCode(): Int {
|
|
||||||
return movieId
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,24 @@
|
|||||||
|
package fr.iut.pm.movieapplication.model.media
|
||||||
|
|
||||||
|
data class MediaResult(
|
||||||
|
|
||||||
|
val posterPath: String? = null,
|
||||||
|
val adult: Boolean,
|
||||||
|
val overview: String,
|
||||||
|
val firstAirDate: String? = null,
|
||||||
|
val releaseDate: String? = null,
|
||||||
|
val originCountry: List<String>? = null,
|
||||||
|
val genreIds: List<Int>,
|
||||||
|
val id: Int,
|
||||||
|
val originalTitle: String? = null,
|
||||||
|
val originalLanguage: String,
|
||||||
|
val title: String?,
|
||||||
|
val backdropPath: String? = null,
|
||||||
|
val popularity: Double,
|
||||||
|
val voteCount: Int,
|
||||||
|
val voteAverage: Double,
|
||||||
|
val name: String? = null,
|
||||||
|
val originalName: String? = null,
|
||||||
|
val mediaType : String
|
||||||
|
)
|
||||||
|
{}
|
@ -0,0 +1,22 @@
|
|||||||
|
package fr.iut.pm.movieapplication.model.media.movie
|
||||||
|
|
||||||
|
open class Movie(
|
||||||
|
open val posterPath: String?,
|
||||||
|
open val adult: Boolean,
|
||||||
|
open val overview: String,
|
||||||
|
open val releaseDate: String,
|
||||||
|
open val genreIds: List<Int>,
|
||||||
|
open val id: Int,
|
||||||
|
open val originalTitle: String,
|
||||||
|
open val originalLanguage: String,
|
||||||
|
open val title: String?,
|
||||||
|
open val backdropPath: String?,
|
||||||
|
open val popularity: Double,
|
||||||
|
open val voteCount: Int,
|
||||||
|
open val video: Boolean?,
|
||||||
|
open val voteAverage: Double,
|
||||||
|
)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
package fr.iut.pm.movieapplication.model.media.movie
|
||||||
|
|
||||||
|
import fr.iut.pm.movieapplication.model.ProductionCompany
|
||||||
|
import fr.iut.pm.movieapplication.model.ProductionCountry
|
||||||
|
|
||||||
|
|
||||||
|
data class MovieDetails(
|
||||||
|
|
||||||
|
override val posterPath: String,
|
||||||
|
override val adult: Boolean,
|
||||||
|
override val overview: String,
|
||||||
|
override val releaseDate: String,
|
||||||
|
override val genreIds : List<Int>,
|
||||||
|
override val id: Int,
|
||||||
|
override val originalTitle: String,
|
||||||
|
override val originalLanguage: String,
|
||||||
|
override val title: String?,
|
||||||
|
override val backdropPath: String?,
|
||||||
|
override val popularity: Double,
|
||||||
|
override val voteCount: Int,
|
||||||
|
override val video: Boolean?,
|
||||||
|
override val voteAverage: Double,
|
||||||
|
val mediaType: String,
|
||||||
|
|
||||||
|
val budget: Int?,
|
||||||
|
val homePage: String?,
|
||||||
|
val productionCompanies: Array<ProductionCompany>?,
|
||||||
|
val productionCountries: Array<ProductionCountry>?,
|
||||||
|
val revenue: Int?,
|
||||||
|
val runtime: Int?,
|
||||||
|
val status: String?,
|
||||||
|
val tagLine: String?
|
||||||
|
|
||||||
|
) : Movie(posterPath,
|
||||||
|
adult,
|
||||||
|
overview,
|
||||||
|
releaseDate,
|
||||||
|
genreIds,
|
||||||
|
id,
|
||||||
|
originalTitle,
|
||||||
|
originalLanguage,
|
||||||
|
title,
|
||||||
|
backdropPath,
|
||||||
|
popularity,
|
||||||
|
voteCount,
|
||||||
|
video,
|
||||||
|
voteAverage) {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package fr.iut.pm.movieapplication.model.media.tvshow
|
||||||
|
|
||||||
|
class TvShow(
|
||||||
|
val posterPath: String?,
|
||||||
|
val popularity: Double,
|
||||||
|
val id: Int,
|
||||||
|
val backdropPath: String,
|
||||||
|
val voteAverage: Double,
|
||||||
|
val overview: String,
|
||||||
|
val firstAirDate: String?,
|
||||||
|
val originCountry: List<String>,
|
||||||
|
val genreIds: List<Int>,
|
||||||
|
val originalLanguage: String,
|
||||||
|
val voteCount: Int,
|
||||||
|
val name: String,
|
||||||
|
val originalName: String,
|
||||||
|
val mediaType: String = "tv",
|
||||||
|
)
|
||||||
|
{
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
package fr.iut.pm.movieapplication.model.media.tvshow
|
||||||
|
|
||||||
|
class TvShowDetails {
|
||||||
|
}
|
@ -1,7 +0,0 @@
|
|||||||
package fr.iut.pm.movieapplication.network.dtos
|
|
||||||
|
|
||||||
data class GenreDTO(
|
|
||||||
private val id : Int,
|
|
||||||
private val name : String
|
|
||||||
) {
|
|
||||||
}
|
|
@ -0,0 +1,4 @@
|
|||||||
|
package fr.iut.pm.movieapplication.repository
|
||||||
|
|
||||||
|
class TVShowRepository {
|
||||||
|
}
|
@ -0,0 +1,59 @@
|
|||||||
|
package fr.iut.pm.movieapplication.ui.adapter
|
||||||
|
|
||||||
|
import android.util.Log
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.ImageView
|
||||||
|
import android.widget.TextView
|
||||||
|
import androidx.core.net.toUri
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import coil.load
|
||||||
|
import fr.iut.pm.movieapplication.R
|
||||||
|
import fr.iut.pm.movieapplication.api.config.GlobalImageConfig
|
||||||
|
import fr.iut.pm.movieapplication.model.media.movie.Movie
|
||||||
|
import fr.iut.pm.movieapplication.ui.activity.MainActivity
|
||||||
|
import fr.iut.pm.movieapplication.utils.Constants
|
||||||
|
|
||||||
|
class MovieAdapter(
|
||||||
|
private val context: MainActivity,
|
||||||
|
private val layoutId: Int,
|
||||||
|
private val list: List<Movie>
|
||||||
|
) : RecyclerView.Adapter<HomeItemAdapter.ViewHolder>(){
|
||||||
|
|
||||||
|
class ViewHolder(view : View) : RecyclerView.ViewHolder(view) {
|
||||||
|
val itemImage: ImageView = view.findViewById<ImageView>(R.id.item_image)
|
||||||
|
val itemName: TextView = view.findViewById<TextView>(R.id.item_name)
|
||||||
|
val itemDate: TextView = view.findViewById<TextView>(R.id.item_date)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HomeItemAdapter.ViewHolder {
|
||||||
|
val view = LayoutInflater
|
||||||
|
.from(parent.context)
|
||||||
|
.inflate(layoutId, parent, false)
|
||||||
|
return HomeItemAdapter.ViewHolder(view)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getItemCount(): Int = list.size
|
||||||
|
|
||||||
|
|
||||||
|
override fun onBindViewHolder(holder: HomeItemAdapter.ViewHolder, position: Int) {
|
||||||
|
val currentItem = list[position]
|
||||||
|
Log.d("SINGLETON", GlobalImageConfig.baseUrl)
|
||||||
|
val imgUri = currentItem.posterPath?.let {
|
||||||
|
(Constants.IMG_URL + it).toUri().buildUpon().scheme("https").build()
|
||||||
|
}
|
||||||
|
Log.d("SINGLETON", imgUri.toString() )
|
||||||
|
holder.itemImage.load(imgUri)
|
||||||
|
holder.itemName.text = currentItem.title
|
||||||
|
holder.itemDate.text = currentItem.releaseDate
|
||||||
|
holder.itemView.setOnClickListener {
|
||||||
|
onItemClick(currentItem)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun onItemClick(item : Movie) {
|
||||||
|
Log.d("item clicked", item.toString())
|
||||||
|
}
|
||||||
|
}
|
@ -1,36 +0,0 @@
|
|||||||
package fr.iut.pm.movieapplication.utils
|
|
||||||
|
|
||||||
import fr.iut.pm.movieapplication.api.dtos.MovieResultDTO
|
|
||||||
import fr.iut.pm.movieapplication.model.Movie
|
|
||||||
|
|
||||||
object Mapper {
|
|
||||||
|
|
||||||
fun MapToMovie( movieDTO : MovieResultDTO) : Movie {
|
|
||||||
return Movie(
|
|
||||||
adult = movieDTO.adult,
|
|
||||||
posterPath = movieDTO.posterPath,
|
|
||||||
overview = movieDTO.overview,
|
|
||||||
releaseDate = movieDTO.releaseDate,
|
|
||||||
movieId = movieDTO.id,
|
|
||||||
originalTitle = movieDTO.originalTitle,
|
|
||||||
originalLanguage = movieDTO.originalLanguage,
|
|
||||||
title = movieDTO.title,
|
|
||||||
backdropPath = movieDTO.backdropPath,
|
|
||||||
popularity = movieDTO.popularity,
|
|
||||||
voteCount = movieDTO.voteCount,
|
|
||||||
voteAverage = movieDTO.voteAverage,
|
|
||||||
budget = null,
|
|
||||||
genres = null,
|
|
||||||
homePage = null,
|
|
||||||
productionCompanies = null,
|
|
||||||
productionCountries = null,
|
|
||||||
revenue = null,
|
|
||||||
runtime = null,
|
|
||||||
status = null,
|
|
||||||
tagLine = null
|
|
||||||
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,71 @@
|
|||||||
|
package fr.iut.pm.movieapplication.utils
|
||||||
|
|
||||||
|
import fr.iut.pm.movieapplication.api.dtos.MediaResultDTO
|
||||||
|
import fr.iut.pm.movieapplication.model.media.MediaResult
|
||||||
|
import fr.iut.pm.movieapplication.model.media.movie.Movie
|
||||||
|
import fr.iut.pm.movieapplication.model.media.tvshow.TvShow
|
||||||
|
|
||||||
|
object MediaResultMapper {
|
||||||
|
|
||||||
|
fun mapToTvShow(mediaResultDTO: MediaResultDTO): TvShow {
|
||||||
|
return TvShow(
|
||||||
|
posterPath = mediaResultDTO.posterPath,
|
||||||
|
popularity = mediaResultDTO.popularity,
|
||||||
|
id = mediaResultDTO.id,
|
||||||
|
backdropPath = mediaResultDTO.backdropPath!!,
|
||||||
|
voteAverage = mediaResultDTO.voteAverage,
|
||||||
|
overview = mediaResultDTO.overview,
|
||||||
|
firstAirDate = mediaResultDTO.firstAirDate,
|
||||||
|
originCountry = mediaResultDTO.originCountry!!,
|
||||||
|
genreIds = mediaResultDTO.genreIds,
|
||||||
|
originalLanguage = mediaResultDTO.originalLanguage,
|
||||||
|
voteCount = mediaResultDTO.voteCount,
|
||||||
|
name = mediaResultDTO.name!!,
|
||||||
|
originalName = mediaResultDTO.originalName!!
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun mapToMovie(mediaResultDTO: MediaResultDTO): Movie {
|
||||||
|
return Movie(
|
||||||
|
posterPath = mediaResultDTO.posterPath,
|
||||||
|
adult = mediaResultDTO.adult == false,
|
||||||
|
overview = mediaResultDTO.overview,
|
||||||
|
releaseDate = mediaResultDTO.releaseDate!!,
|
||||||
|
genreIds = mediaResultDTO.genreIds,
|
||||||
|
id = mediaResultDTO.id,
|
||||||
|
originalTitle = mediaResultDTO.originalTitle!!,
|
||||||
|
originalLanguage = mediaResultDTO.originalLanguage,
|
||||||
|
title = mediaResultDTO.title,
|
||||||
|
backdropPath = mediaResultDTO.backdropPath,
|
||||||
|
popularity = mediaResultDTO.popularity,
|
||||||
|
voteCount = mediaResultDTO.voteCount,
|
||||||
|
video = mediaResultDTO.video,
|
||||||
|
voteAverage = mediaResultDTO.voteAverage
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun mapToMediaResult(mediaResultDTO: MediaResultDTO) : MediaResult {
|
||||||
|
return MediaResult(
|
||||||
|
posterPath = mediaResultDTO.posterPath,
|
||||||
|
adult = mediaResultDTO.adult == false,
|
||||||
|
overview = mediaResultDTO.overview,
|
||||||
|
firstAirDate = mediaResultDTO.firstAirDate,
|
||||||
|
releaseDate = mediaResultDTO.releaseDate,
|
||||||
|
originCountry = mediaResultDTO.originCountry,
|
||||||
|
genreIds = mediaResultDTO.genreIds,
|
||||||
|
id = mediaResultDTO.id,
|
||||||
|
originalTitle = mediaResultDTO.originalTitle,
|
||||||
|
originalLanguage = mediaResultDTO.originalLanguage,
|
||||||
|
title = mediaResultDTO.title,
|
||||||
|
backdropPath = mediaResultDTO.backdropPath,
|
||||||
|
popularity = mediaResultDTO.popularity,
|
||||||
|
voteCount = mediaResultDTO.voteCount,
|
||||||
|
voteAverage = mediaResultDTO.voteAverage,
|
||||||
|
name = mediaResultDTO.name,
|
||||||
|
originalName = mediaResultDTO.originalName,
|
||||||
|
mediaType = mediaResultDTO.mediaType
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in new issue