mirror of
https://github.com/owenlejeune/TVTime.git
synced 2025-11-14 07:42:43 -05:00
add more info to rated media types
This commit is contained in:
@@ -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<RatedMediaResponse>
|
||||
suspend fun getRatedMovies(@Path("session_id") sessionId: String): Response<RatedMediaResponse<RatedMovie>>
|
||||
|
||||
@GET("guest_session/{session_id}/rated/tv")
|
||||
suspend fun getRatedTvShows(@Path("session_id") sessionId: String): Response<RatedMediaResponse>
|
||||
suspend fun getRatedTvShows(@Path("session_id") sessionId: String): Response<RatedMediaResponse<RatedTv>>
|
||||
|
||||
@GET("guest_session/{session_id}/rated/tv/episodes")
|
||||
suspend fun getRatedTvEpisodes(@Path("session_id") sessionId: String): Response<RatedMediaResponse>
|
||||
suspend fun getRatedTvEpisodes(@Path("session_id") sessionId: String): Response<RatedMediaResponse<RatedEpisode>>
|
||||
|
||||
}
|
||||
@@ -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<RatedMediaResponse> {
|
||||
return service.getRatedMovies(sessionId = sessionId).apply {
|
||||
body()?.results?.forEach { it.type = RatedMedia.Type.MOVIE }
|
||||
}
|
||||
suspend fun getRatedMovies(sessionId: String): Response<RatedMediaResponse<RatedMovie>> {
|
||||
return service.getRatedMovies(sessionId = sessionId)
|
||||
}
|
||||
|
||||
suspend fun getRatedTvShows(sessionId: String): Response<RatedMediaResponse> {
|
||||
return service.getRatedTvShows(sessionId = sessionId).apply {
|
||||
body()?.results?.forEach { it.type = RatedMedia.Type.SERIES }
|
||||
}
|
||||
suspend fun getRatedTvShows(sessionId: String): Response<RatedMediaResponse<RatedTv>> {
|
||||
return service.getRatedTvShows(sessionId = sessionId)
|
||||
}
|
||||
|
||||
suspend fun getRatedTvEpisodes(sessionId: String): Response<RatedMediaResponse> {
|
||||
return service.getRatedTvEpisodes(sessionId = sessionId).apply {
|
||||
body()?.results?.forEach { it.type = RatedMedia.Type.EPISODE }
|
||||
}
|
||||
suspend fun getRatedTvEpisodes(sessionId: String): Response<RatedMediaResponse<RatedEpisode>> {
|
||||
return service.getRatedTvEpisodes(sessionId = sessionId)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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)
|
||||
@@ -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<Int>,
|
||||
@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<String>?,
|
||||
|
||||
var type: Type
|
||||
@SerializedName("rating") val rating: Float
|
||||
) {
|
||||
|
||||
enum class Type {
|
||||
enum class RatedType {
|
||||
MOVIE,
|
||||
SERIES,
|
||||
EPISODE
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,9 +2,9 @@ package com.owenlejeune.tvtime.api.tmdb.model
|
||||
|
||||
import com.google.gson.annotations.SerializedName
|
||||
|
||||
class RatedMediaResponse(
|
||||
class RatedMediaResponse<T: RatedMedia>(
|
||||
@SerializedName("page") val page: Int,
|
||||
@SerializedName("results") val results: List<RatedMedia>,
|
||||
@SerializedName("results") val results: List<T>,
|
||||
@SerializedName("total_pages") val totalPages: Int,
|
||||
@SerializedName("total_results") val totalResults: Int
|
||||
)
|
||||
|
||||
@@ -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<Int>,
|
||||
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
|
||||
)
|
||||
@@ -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<Int>,
|
||||
@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)
|
||||
@@ -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<Int>,
|
||||
originalLanguage: String,
|
||||
originalName: String,
|
||||
posterPath: String?,
|
||||
popularity: Float,
|
||||
@SerializedName("first_air_date") val firstAirDate: String,
|
||||
@SerializedName("origin_country") val originCountry: List<String>,
|
||||
): RatedTopLevelMedia(
|
||||
RatedType.SERIES, id, overview, name, voteAverage, voteCount, rating,
|
||||
backdropPath, genreIds, originalLanguage, originalName, posterPath, popularity
|
||||
)
|
||||
@@ -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<RatedMedia>
|
||||
val ratedMovies: List<RatedMedia>
|
||||
protected abstract var _ratedMovies: List<RatedMovie>
|
||||
val ratedMovies: List<RatedMovie>
|
||||
get() = _ratedMovies
|
||||
|
||||
protected abstract var _ratedTvShows: List<RatedMedia>
|
||||
val ratedTvShows: List<RatedMedia>
|
||||
protected abstract var _ratedTvShows: List<RatedTv>
|
||||
val ratedTvShows: List<RatedTv>
|
||||
get() = _ratedTvShows
|
||||
|
||||
protected abstract var _ratedTvEpisodes: List<RatedMedia>
|
||||
val ratedTvEpisodes: List<RatedMedia>
|
||||
protected abstract var _ratedTvEpisodes: List<RatedEpisode>
|
||||
val ratedTvEpisodes: List<RatedEpisode>
|
||||
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<RatedMedia> = emptyList()
|
||||
override var _ratedTvEpisodes: List<RatedMedia> = emptyList()
|
||||
override var _ratedTvShows: List<RatedMedia> = emptyList()
|
||||
override var _ratedMovies: List<RatedMovie> = emptyList()
|
||||
override var _ratedTvShows: List<RatedTv> = emptyList()
|
||||
override var _ratedTvEpisodes: List<RatedEpisode> = emptyList()
|
||||
|
||||
private lateinit var service: GuestSessionApi
|
||||
|
||||
|
||||
Reference in New Issue
Block a user