parent
ae147111a7
commit
3cfc7d73b4
@ -0,0 +1,18 @@
|
||||
package fr.iut.pm.movieapplication.api
|
||||
|
||||
import fr.iut.pm.movieapplication.network.dtos.PopularDTO
|
||||
import fr.iut.pm.movieapplication.utils.Constants
|
||||
import fr.iut.pm.movieapplication.utils.Constants.Companion.API_KEY
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import retrofit2.Call
|
||||
import retrofit2.Response
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.Header
|
||||
import retrofit2.http.Query
|
||||
|
||||
interface MovieApplicationAPI {
|
||||
|
||||
@GET("movie/popular")
|
||||
suspend fun getPopularMovies(@Query("api_key") apiKey : String) : Call<PopularDTO>
|
||||
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package fr.iut.pm.movieapplication.api
|
||||
|
||||
import com.squareup.moshi.Moshi
|
||||
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
|
||||
import fr.iut.pm.movieapplication.utils.Constants.Companion.BASE_URL
|
||||
import retrofit2.Retrofit
|
||||
import retrofit2.converter.moshi.MoshiConverterFactory
|
||||
|
||||
private val moshi = Moshi.Builder()
|
||||
.add(KotlinJsonAdapterFactory())
|
||||
.build()
|
||||
|
||||
|
||||
|
||||
object RetrofitInstance {
|
||||
|
||||
private val retrofit by lazy {
|
||||
Retrofit.Builder()
|
||||
.addConverterFactory(MoshiConverterFactory.create(moshi))
|
||||
.baseUrl(BASE_URL)
|
||||
.build()
|
||||
}
|
||||
|
||||
val api : MovieApplicationAPI by lazy {
|
||||
retrofit.create(MovieApplicationAPI::class.java)
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package fr.iut.pm.movieapplication.data.dao
|
||||
|
||||
import androidx.room.Entity
|
||||
|
||||
@Entity("movies_table")
|
||||
class MovieEntity {
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package fr.iut.pm.movieapplication.model
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Embedded
|
||||
|
||||
data class Popular(
|
||||
@ColumnInfo("page")
|
||||
val page : Int,
|
||||
@ColumnInfo("results")
|
||||
@Embedded
|
||||
val results : List<Movie>,
|
||||
val totalResults : Int,
|
||||
val totalPages : Int
|
||||
|
||||
){
|
||||
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package fr.iut.pm.movieapplication.network.dtos
|
||||
|
||||
data class GenreDTO(
|
||||
private val id : Int,
|
||||
private val name : String
|
||||
) {
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package fr.iut.pm.movieapplication.network.dtos
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
|
||||
data class MovieDTO(
|
||||
@Json(name = "poster_path")
|
||||
val posterPath : String?,
|
||||
val adult : Boolean,
|
||||
val overview : String?,
|
||||
@Json(name = "release_date")
|
||||
val releaseDate : 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
|
||||
|
||||
|
||||
) {
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package fr.iut.pm.movieapplication.network.dtos
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
|
||||
data class PopularDTO(
|
||||
val page : Int,
|
||||
val results : List<MovieDTO>,
|
||||
@Json(name = "total_pages")
|
||||
val totalPages : Int,
|
||||
@Json(name = "total_results")
|
||||
val totalResults : Int
|
||||
) {}
|
@ -0,0 +1,15 @@
|
||||
package fr.iut.pm.movieapplication.repository
|
||||
|
||||
import fr.iut.pm.movieapplication.data.dao.MovieDAO
|
||||
import fr.iut.pm.movieapplication.model.Movie
|
||||
import fr.iut.pm.movieapplication.network.dtos.MovieDTO
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.flow.transform
|
||||
|
||||
class MovieRepository() {
|
||||
|
||||
suspend fun getPopularMovies() : List<MovieDTO>{
|
||||
return PopularRepository().getPopular()!!.results
|
||||
}
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package fr.iut.pm.movieapplication.repository
|
||||
|
||||
import android.util.Log
|
||||
import fr.iut.pm.movieapplication.api.RetrofitInstance
|
||||
import fr.iut.pm.movieapplication.network.dtos.PopularDTO
|
||||
import fr.iut.pm.movieapplication.utils.Constants.Companion.API_KEY
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import retrofit2.Call
|
||||
import retrofit2.Callback
|
||||
import retrofit2.Response
|
||||
|
||||
class PopularRepository() {
|
||||
|
||||
suspend fun getPopular(): PopularDTO? {
|
||||
|
||||
lateinit var popularDTO : PopularDTO
|
||||
RetrofitInstance.api.getPopularMovies(API_KEY).enqueue(object : Callback<PopularDTO> {
|
||||
override fun onResponse(call: Call<PopularDTO>, response: Response<PopularDTO>) {
|
||||
if (response.isSuccessful) {
|
||||
Log.d("RESPONSE ::", response.body()?.page.toString())
|
||||
popularDTO = response.body()!!
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFailure(call: Call<PopularDTO>, t: Throwable) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
|
||||
})
|
||||
return popularDTO
|
||||
}
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
package fr.iut.pm.movieapplication.ui.viewmodel
|
||||
|
||||
class HomeSectionsVM {
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package fr.iut.pm.movieapplication.ui.viewmodel
|
||||
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import fr.iut.pm.movieapplication.network.dtos.MovieDTO
|
||||
import fr.iut.pm.movieapplication.repository.MovieRepository
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
class MoviesVM(private val repository: MovieRepository) : ViewModel() {
|
||||
|
||||
private val _popularMovies = MutableLiveData<List<MovieDTO>>()
|
||||
val popularMovies : MutableLiveData<List<MovieDTO>> = _popularMovies
|
||||
|
||||
init {
|
||||
getPopularMovies()
|
||||
}
|
||||
|
||||
|
||||
private fun getPopularMovies() {
|
||||
viewModelScope.launch {
|
||||
try {
|
||||
_popularMovies.value = repository.getPopularMovies()}
|
||||
catch (e : Exception) {
|
||||
e.stackTrace
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class MoviesVMFactory(
|
||||
private val repository: MovieRepository
|
||||
) : ViewModelProvider.Factory {
|
||||
override fun <T : ViewModel> create(modelClass: Class<T>): T {
|
||||
if (modelClass.isAssignableFrom(MoviesVM::class.java)) {
|
||||
return MoviesVM(repository) as T
|
||||
}
|
||||
throw java.lang.IllegalArgumentException("Unknown ViewModel class")
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package fr.iut.pm.movieapplication.utils
|
||||
|
||||
class Constants {
|
||||
|
||||
companion object {
|
||||
const val BASE_URL = "https://api.themoviedb.org/3/"
|
||||
const val API_KEY = "8f14a279249638d7f247d0d7298b21b4"
|
||||
}
|
||||
}
|
Loading…
Reference in new issue