migrate tv credits to aggregate credits

This commit is contained in:
Owen LeJeune
2023-06-27 23:33:34 -04:00
parent f9aa5357dc
commit fba63e33d4
11 changed files with 158 additions and 40 deletions

View File

@@ -119,7 +119,7 @@ class OnboardingActivity: MonetCompatActivity() {
.fillMaxWidth()
.padding(all = 12.dp)
) {
OnboardingPage[pagerState.currentPage].footer.invoke(this@Column)
OnboardingPage[pagerState.currentPage].footer.invoke(this)
Row(
horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier.fillMaxWidth()

View File

@@ -26,7 +26,7 @@ interface MoviesApi {
suspend fun getMovieImages(@Path("id") id: Int): Response<ImageCollection>
@GET("movie/{id}/credits")
suspend fun getCastAndCrew(@Path("id") id: Int): Response<CastAndCrew>
suspend fun getCastAndCrew(@Path("id") id: Int): Response<MovieCastAndCrew>
@GET("movie/{id}/release_dates")
suspend fun getReleaseDates(@Path("id") id: Int): Response<MovieReleaseResults>

View File

@@ -25,8 +25,8 @@ interface TvApi {
@GET("tv/{id}/images")
suspend fun getTvImages(@Path("id") id: Int): Response<ImageCollection>
@GET("tv/{id}/credits")
suspend fun getCastAndCrew(@Path("id") id: Int): Response<CastAndCrew>
@GET("tv/{id}/aggregate_credits")
suspend fun getCastAndCrew(@Path("id") id: Int): Response<TvCastAndCrew>
@GET("tv/{id}/content_ratings")
suspend fun getContentRatings(@Path("id") id: Int): Response<TvContentRatings>

View File

@@ -2,7 +2,11 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model
import com.google.gson.annotations.SerializedName
class CastAndCrew(
@SerializedName("cast") val cast: List<CastMember>,
@SerializedName("crew") val crew: List<CrewMember>
)
abstract class CastAndCrew<C, R>(
@SerializedName("cast") val cast: List<C>,
@SerializedName("crew") val crew: List<R>
)
class TvCastAndCrew(cast: List<TvCastMember>, crew: List<TvCrewMember>): CastAndCrew<TvCastMember, TvCrewMember>(cast, crew)
class MovieCastAndCrew(cast: List<MovieCastMember>, crew: List<MovieCrewMember>): CastAndCrew<MovieCastMember, MovieCrewMember>(cast, crew)

View File

@@ -0,0 +1,128 @@
package com.owenlejeune.tvtime.api.tmdb.api.v3.model
import com.google.gson.annotations.SerializedName
import com.owenlejeune.tvtime.utils.types.Gender
abstract class CastCrewMember(
id: Int,
name: String,
gender: Gender,
profilePath: String?,
@SerializedName("adult") val isAdult: Boolean,
@SerializedName("known_for_department") val knownForDepartment: String,
@SerializedName("original_name") val originalName: String,
@SerializedName("popularity") val popularity: Float
): Person(id, name, gender, profilePath)
abstract class CastMember(
id: Int,
name: String,
gender: Gender,
profilePath: String?,
isAdult: Boolean,
knownForDepartment: String,
originalName: String,
popularity: Float,
@SerializedName("order") val order: Int
): CastCrewMember(id, name, gender, profilePath, isAdult, knownForDepartment, originalName, popularity)
class EpisodeCastMember(
id: Int,
name: String,
gender: Gender,
profilePath: String?,
isAdult: Boolean,
knownForDepartment: String,
originalName: String,
popularity: Float,
order: Int,
@SerializedName("credit_id") val creditId: String
): CastMember(id, name, gender, profilePath, isAdult, knownForDepartment, originalName, popularity, order)
class TvCastMember(
id: Int,
name: String,
gender: Gender,
profilePath: String?,
isAdult: Boolean,
knownForDepartment: String,
originalName: String,
popularity: Float,
order: Int,
@SerializedName("roles") val roles: List<CastCrewRole>,
@SerializedName("total_episode_count") val totalEpisodeCount: Int
): CastMember(id, name, gender, profilePath, isAdult, knownForDepartment, originalName, popularity, order)
class MovieCastMember(
id: Int,
name: String,
gender: Gender,
profilePath: String?,
isAdult: Boolean,
knownForDepartment: String,
originalName: String,
popularity: Float,
order: Int,
@SerializedName("cast_id") val castId: Int,
@SerializedName("character") val character: String,
@SerializedName("credit_id") val creditId: String
): CastMember(id, name, gender, profilePath, isAdult, knownForDepartment, originalName, popularity, order)
abstract class CrewMember(
id: Int,
name: String,
gender: Gender,
profilePath: String?,
isAdult: Boolean,
knownForDepartment: String,
originalName: String,
popularity: Float,
@SerializedName("department") val department: String
): CastCrewMember(id, name, gender, profilePath, isAdult, knownForDepartment, originalName, popularity)
class EpisodeCrewMember(
id: Int,
name: String,
gender: Gender,
profilePath: String?,
isAdult: Boolean,
knownForDepartment: String,
originalName: String,
popularity: Float,
department: String,
@SerializedName("credit_id") val creditId: String
): CrewMember(id, name, gender, profilePath, isAdult, knownForDepartment, originalName, popularity, department)
class TvCrewMember(
id: Int,
name: String,
gender: Gender,
profilePath: String?,
isAdult: Boolean,
knownForDepartment: String,
originalName: String,
popularity: Float,
department: String,
@SerializedName("total_episode_counte") val totalEpisodeCount: Int,
@SerializedName("jobs") val jobs: List<CastCrewRole>
): CrewMember(id, name, gender, profilePath, isAdult, knownForDepartment, originalName, popularity, department)
class MovieCrewMember(
id: Int,
name: String,
gender: Gender,
profilePath: String?,
isAdult: Boolean,
knownForDepartment: String,
originalName: String,
popularity: Float,
department: String,
@SerializedName("job") val job: String,
@SerializedName("credit_id") val creditId: String
): CrewMember(id, name, gender, profilePath, isAdult, knownForDepartment, originalName, popularity, department)
class CastCrewRole(
@SerializedName("credit_id") val creditId: String,
@SerializedName("character", alternate = ["job"]) val role: String,
@SerializedName("episode_count") val episodeCount: Int
)

View File

@@ -1,13 +0,0 @@
package com.owenlejeune.tvtime.api.tmdb.api.v3.model
import com.google.gson.annotations.SerializedName
class CastMember(
@SerializedName("character") val character: String,
@SerializedName("order") val order: Int,
@SerializedName("credit_id") val creditId: String,
id: Int,
name: String,
gender: Int,
profilePath: String?
): Person(id, name, gender, profilePath)

View File

@@ -1,13 +0,0 @@
package com.owenlejeune.tvtime.api.tmdb.api.v3.model
import com.google.gson.annotations.SerializedName
class CrewMember(
@SerializedName("department") val department: String,
@SerializedName("job") val job: String,
@SerializedName("credit_id") val creditId: String,
id: Int,
name: String,
gender: Int,
profilePath: String?
): Person(id, name, gender, profilePath)

View File

@@ -1,6 +1,7 @@
package com.owenlejeune.tvtime.api.tmdb.api.v3.model
import com.google.gson.annotations.SerializedName
import com.owenlejeune.tvtime.utils.types.Gender
class DetailPerson(
@SerializedName("birthday") val birthday: String,
@@ -11,6 +12,6 @@ class DetailPerson(
@SerializedName("adult") val isAdult: Boolean,
id: Int,
name: String,
gender: Int,
gender: Gender,
profilePath: String?
): Person(id, name, gender, profilePath)

View File

@@ -16,6 +16,6 @@ data class Episode(
@SerializedName("still_path") val stillPath: String?,
@SerializedName("vote_average") val voteAverage: Float,
@SerializedName("vote_count") val voteCount: Int,
@SerializedName("crew") val crew: List<CrewMember>?,
@SerializedName("guest_starts") val guestStars: List<CastMember>?
@SerializedName("crew") val crew: List<EpisodeCrewMember>?,
@SerializedName("guest_starts") val guestStars: List<EpisodeCastMember>?
)

View File

@@ -1,10 +1,11 @@
package com.owenlejeune.tvtime.api.tmdb.api.v3.model
import com.google.gson.annotations.SerializedName
import com.owenlejeune.tvtime.utils.types.Gender
open class Person(
@SerializedName("id") val id: Int,
@SerializedName("name") val name: String,
@SerializedName("gender") val gender: Int,
@SerializedName("gender") val gender: Gender,
@SerializedName("profile_path") val profilePath: String?
)

View File

@@ -629,8 +629,18 @@ private fun CastCrewCard(appNavController: NavController, person: Person) {
.width(124.dp)
.wrapContentHeight(),
subtitle = when (person) {
is CastMember -> person.character
is CrewMember -> person.job
is MovieCastMember -> person.character
is MovieCrewMember -> person.job
is TvCastMember -> {
val roles = person.roles.joinToString(separator = "/") { it.role }
val epsCount = person.totalEpisodeCount
"$roles ($epsCount Eps.)"
}
is TvCrewMember -> {
val roles = person.jobs.joinToString(separator = "/") { it.role }
val epsCount = person.totalEpisodeCount
"$roles ($epsCount Eps.)"
}
else -> null
},
imageUrl = TmdbUtils.getFullPersonImagePath(person),