diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/GuestSessionApi.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/GuestSessionApi.kt index d79d6fe..dd3f42a 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/GuestSessionApi.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/GuestSessionApi.kt @@ -1,6 +1,9 @@ package com.owenlejeune.tvtime.api.tmdb +import com.owenlejeune.tvtime.api.tmdb.model.RatedEpisode import com.owenlejeune.tvtime.api.tmdb.model.RatedMediaResponse +import com.owenlejeune.tvtime.api.tmdb.model.RatedMovie +import com.owenlejeune.tvtime.api.tmdb.model.RatedTv import retrofit2.Response import retrofit2.http.GET import retrofit2.http.Path @@ -8,12 +11,12 @@ import retrofit2.http.Path interface GuestSessionApi { @GET("guest_session/{session_id}/rated/movies") - suspend fun getRatedMovies(@Path("session_id") sessionId: String): Response + suspend fun getRatedMovies(@Path("session_id") sessionId: String): Response> @GET("guest_session/{session_id}/rated/tv") - suspend fun getRatedTvShows(@Path("session_id") sessionId: String): Response + suspend fun getRatedTvShows(@Path("session_id") sessionId: String): Response> @GET("guest_session/{session_id}/rated/tv/episodes") - suspend fun getRatedTvEpisodes(@Path("session_id") sessionId: String): Response + suspend fun getRatedTvEpisodes(@Path("session_id") sessionId: String): Response> } \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/GuestSessionService.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/GuestSessionService.kt index f707542..e619d2a 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/GuestSessionService.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/GuestSessionService.kt @@ -1,29 +1,22 @@ package com.owenlejeune.tvtime.api.tmdb -import com.owenlejeune.tvtime.api.tmdb.model.RatedMedia -import com.owenlejeune.tvtime.api.tmdb.model.RatedMediaResponse +import com.owenlejeune.tvtime.api.tmdb.model.* import retrofit2.Response class GuestSessionService { private val service by lazy { TmdbClient().createGuestSessionService() } - suspend fun getRatedMovies(sessionId: String): Response { - return service.getRatedMovies(sessionId = sessionId).apply { - body()?.results?.forEach { it.type = RatedMedia.Type.MOVIE } - } + suspend fun getRatedMovies(sessionId: String): Response> { + return service.getRatedMovies(sessionId = sessionId) } - suspend fun getRatedTvShows(sessionId: String): Response { - return service.getRatedTvShows(sessionId = sessionId).apply { - body()?.results?.forEach { it.type = RatedMedia.Type.SERIES } - } + suspend fun getRatedTvShows(sessionId: String): Response> { + return service.getRatedTvShows(sessionId = sessionId) } - suspend fun getRatedTvEpisodes(sessionId: String): Response { - return service.getRatedTvEpisodes(sessionId = sessionId).apply { - body()?.results?.forEach { it.type = RatedMedia.Type.EPISODE } - } + suspend fun getRatedTvEpisodes(sessionId: String): Response> { + return service.getRatedTvEpisodes(sessionId = sessionId) } } \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedEpisode.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedEpisode.kt new file mode 100644 index 0000000..b4682aa --- /dev/null +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedEpisode.kt @@ -0,0 +1,19 @@ +package com.owenlejeune.tvtime.api.tmdb.model + +import com.google.gson.annotations.SerializedName + +class RatedEpisode( + type: RatedType, + id: Int, + overview: String, + name: String, + voteAverage: Float, + voteCount: Int, + rating: Float, + @SerializedName("air_date") val airDate: String, + @SerializedName("episode_number") val episodeNumber: Int, + @SerializedName("production_code") val productionCode: String?, + @SerializedName("season_number") val seasonNumber: Int, + @SerializedName("show_id") val showId: Int, + @SerializedName("still_path") val stillPath: String?, +): RatedMedia(RatedType.EPISODE, id, overview, name, voteAverage, voteCount, rating) \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedMedia.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedMedia.kt index 20bfb59..2b0769a 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedMedia.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedMedia.kt @@ -2,33 +2,18 @@ package com.owenlejeune.tvtime.api.tmdb.model import com.google.gson.annotations.SerializedName -class RatedMedia( - @SerializedName("name", alternate = ["title"]) val title: String, +abstract class RatedMedia( + var type: RatedType, @SerializedName("id") val id: Int, - @SerializedName("poster_path") val posterPath: String?, - @SerializedName("backdrop_path") val backdropPath: String?, - @SerializedName("release_date", alternate = ["first_air_date", "air_date"]) val releaseDate: String, - @SerializedName("rating") val rating: Float, - @SerializedName("genre_ids") val genreIds: List, - @SerializedName("original_language") val originalLanguage: String, - @SerializedName("original_title") val originalTitle: String, @SerializedName("overview") val overview: String, - @SerializedName("popularity") val popularity: Float, + @SerializedName("name", alternate = ["title"]) val name: String, @SerializedName("vote_average") val voteAverage: Float, @SerializedName("vote_count") val voteCount: Int, - // only for movies - @SerializedName("adult") val isAdult: Boolean?, - @SerializedName("video") val isVideo: Boolean?, - // only for tv - @SerializedName("origin_country") val originCountries: List?, - - var type: Type + @SerializedName("rating") val rating: Float ) { - - enum class Type { + enum class RatedType { MOVIE, SERIES, EPISODE } - } diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedMediaResponse.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedMediaResponse.kt index 04682a7..b3f74e8 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedMediaResponse.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedMediaResponse.kt @@ -2,9 +2,9 @@ package com.owenlejeune.tvtime.api.tmdb.model import com.google.gson.annotations.SerializedName -class RatedMediaResponse( +class RatedMediaResponse( @SerializedName("page") val page: Int, - @SerializedName("results") val results: List, + @SerializedName("results") val results: List, @SerializedName("total_pages") val totalPages: Int, @SerializedName("total_results") val totalResults: Int ) diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedMovie.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedMovie.kt new file mode 100644 index 0000000..3edcb16 --- /dev/null +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedMovie.kt @@ -0,0 +1,24 @@ +package com.owenlejeune.tvtime.api.tmdb.model + +import com.google.gson.annotations.SerializedName + +class RatedMovie( + id: Int, + overview: String, + name: String, + voteAverage: Float, + voteCount: Int, + rating: Float, + backdropPath: String?, + genreIds: List, + originalLanguage: String, + originalName: String, + posterPath: String?, + popularity: Float, + @SerializedName("adult") val isAdult: Boolean, + @SerializedName("release_date") val releaseDate: String, + @SerializedName("video") val video: Boolean, +): RatedTopLevelMedia( + RatedType.MOVIE, id, overview, name, voteAverage, voteCount, rating, + backdropPath, genreIds, originalLanguage, originalName, posterPath, popularity +) \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedTopLevelMedia.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedTopLevelMedia.kt new file mode 100644 index 0000000..a0c164d --- /dev/null +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedTopLevelMedia.kt @@ -0,0 +1,19 @@ +package com.owenlejeune.tvtime.api.tmdb.model + +import com.google.gson.annotations.SerializedName + +abstract class RatedTopLevelMedia( + type: RatedType, + id: Int, + overview: String, + name: String, + voteAverage: Float, + voteCount: Int, + rating: Float, + @SerializedName("backdrop_path") val backdropPath: String?, + @SerializedName("genre_ids") val genreIds: List, + @SerializedName("original_language") val originalLanguage: String, + @SerializedName("original_name", alternate = ["original_title"]) val originalName: String, + @SerializedName("poster_path") val posterPath: String?, + @SerializedName("popularity") val popularity: Float, +): RatedMedia(type, id, overview, name, voteAverage, voteCount, rating) \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedTv.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedTv.kt new file mode 100644 index 0000000..fe4cd82 --- /dev/null +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/RatedTv.kt @@ -0,0 +1,23 @@ +package com.owenlejeune.tvtime.api.tmdb.model + +import com.google.gson.annotations.SerializedName + +class RatedTv( + id: Int, + overview: String, + name: String, + voteAverage: Float, + voteCount: Int, + rating: Float, + backdropPath: String?, + genreIds: List, + originalLanguage: String, + originalName: String, + posterPath: String?, + popularity: Float, + @SerializedName("first_air_date") val firstAirDate: String, + @SerializedName("origin_country") val originCountry: List, +): RatedTopLevelMedia( + RatedType.SERIES, id, overview, name, voteAverage, voteCount, rating, + backdropPath, genreIds, originalLanguage, originalName, posterPath, popularity +) \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/utils/SessionManager.kt b/app/src/main/java/com/owenlejeune/tvtime/utils/SessionManager.kt index ed02ec5..aba056d 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/utils/SessionManager.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/utils/SessionManager.kt @@ -2,7 +2,10 @@ package com.owenlejeune.tvtime.utils import com.owenlejeune.tvtime.api.tmdb.GuestSessionApi import com.owenlejeune.tvtime.api.tmdb.TmdbClient +import com.owenlejeune.tvtime.api.tmdb.model.RatedEpisode import com.owenlejeune.tvtime.api.tmdb.model.RatedMedia +import com.owenlejeune.tvtime.api.tmdb.model.RatedMovie +import com.owenlejeune.tvtime.api.tmdb.model.RatedTv import com.owenlejeune.tvtime.preferences.AppPreferences import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -39,16 +42,16 @@ object SessionManager: KoinComponent { } abstract class Session(val sessionId: String, val isGuest: Boolean) { - protected abstract var _ratedMovies: List - val ratedMovies: List + protected abstract var _ratedMovies: List + val ratedMovies: List get() = _ratedMovies - protected abstract var _ratedTvShows: List - val ratedTvShows: List + protected abstract var _ratedTvShows: List + val ratedTvShows: List get() = _ratedTvShows - protected abstract var _ratedTvEpisodes: List - val ratedTvEpisodes: List + protected abstract var _ratedTvEpisodes: List + val ratedTvEpisodes: List get() = _ratedTvEpisodes fun hasRatedMovie(id: Int): Boolean { @@ -69,9 +72,9 @@ object SessionManager: KoinComponent { } private class GuestSession: Session(preferences.guestSessionId, true) { - override var _ratedMovies: List = emptyList() - override var _ratedTvEpisodes: List = emptyList() - override var _ratedTvShows: List = emptyList() + override var _ratedMovies: List = emptyList() + override var _ratedTvShows: List = emptyList() + override var _ratedTvEpisodes: List = emptyList() private lateinit var service: GuestSessionApi