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
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Embedded
|
||||
import androidx.room.PrimaryKey
|
||||
import androidx.room.Relation
|
||||
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 (
|
||||
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,
|
||||
open class MovieDTO (
|
||||
@Json(name = "poster_path")
|
||||
val posterPath: String?,
|
||||
@Json(name = "production_countries")
|
||||
val productionCountries: Array<ProductionCountry>,
|
||||
open val posterPath: String?,
|
||||
open val adult: Boolean,
|
||||
open val overview: String,
|
||||
@Json(name = "release_date")
|
||||
val releaseDate: String,
|
||||
val revenue: Int,
|
||||
val runtime: Int?,
|
||||
//var spokenLanguages : Array<SpokenLanguage>,
|
||||
val status: String,
|
||||
@Json(name = "tag_line")
|
||||
val tagLine: String?,
|
||||
val title: String,
|
||||
@Json(name = "vote_average")
|
||||
val voteAverage: Double,
|
||||
open val releaseDate: String,
|
||||
@Json(name = "genre_ids")
|
||||
open val genreIds: List<Int>,
|
||||
open val id: Int,
|
||||
@Json(name = "original_title")
|
||||
open val originalTitle: String,
|
||||
@Json(name = "original_language")
|
||||
open val originalLanguage: String,
|
||||
open val title: String,
|
||||
@Json(name = "backdrop_path")
|
||||
open val backdropPath: String?,
|
||||
open val popularity: Double,
|
||||
@Json(name = "vote_count")
|
||||
val voteCount: Int,
|
||||
val backdropPath: String?
|
||||
open val voteCount: Int,
|
||||
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