diff --git a/app/src/main/java/com/owenlejeune/tvtime/OnboardingActivity.kt b/app/src/main/java/com/owenlejeune/tvtime/OnboardingActivity.kt index f0a0866..674a890 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/OnboardingActivity.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/OnboardingActivity.kt @@ -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() diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/MoviesApi.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/MoviesApi.kt index bac69a3..2dafa34 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/MoviesApi.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/MoviesApi.kt @@ -26,7 +26,7 @@ interface MoviesApi { suspend fun getMovieImages(@Path("id") id: Int): Response @GET("movie/{id}/credits") - suspend fun getCastAndCrew(@Path("id") id: Int): Response + suspend fun getCastAndCrew(@Path("id") id: Int): Response @GET("movie/{id}/release_dates") suspend fun getReleaseDates(@Path("id") id: Int): Response diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/TvApi.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/TvApi.kt index b9279df..3a75e6e 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/TvApi.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/TvApi.kt @@ -25,8 +25,8 @@ interface TvApi { @GET("tv/{id}/images") suspend fun getTvImages(@Path("id") id: Int): Response - @GET("tv/{id}/credits") - suspend fun getCastAndCrew(@Path("id") id: Int): Response + @GET("tv/{id}/aggregate_credits") + suspend fun getCastAndCrew(@Path("id") id: Int): Response @GET("tv/{id}/content_ratings") suspend fun getContentRatings(@Path("id") id: Int): Response diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/CastAndCrew.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/CastAndCrew.kt index 4c2facb..1929d52 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/CastAndCrew.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/CastAndCrew.kt @@ -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, - @SerializedName("crew") val crew: List -) \ No newline at end of file +abstract class CastAndCrew( + @SerializedName("cast") val cast: List, + @SerializedName("crew") val crew: List +) + +class TvCastAndCrew(cast: List, crew: List): CastAndCrew(cast, crew) + +class MovieCastAndCrew(cast: List, crew: List): CastAndCrew(cast, crew) \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/CastCrewMember.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/CastCrewMember.kt new file mode 100644 index 0000000..197c5ad --- /dev/null +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/CastCrewMember.kt @@ -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, + @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 +): 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 +) \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/CastMember.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/CastMember.kt deleted file mode 100644 index 0086a2e..0000000 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/CastMember.kt +++ /dev/null @@ -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) \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/CrewMember.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/CrewMember.kt deleted file mode 100644 index cfa3920..0000000 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/CrewMember.kt +++ /dev/null @@ -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) diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/DetailPerson.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/DetailPerson.kt index 7747a50..7996487 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/DetailPerson.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/DetailPerson.kt @@ -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) \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/Episode.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/Episode.kt index f974ff2..f61951e 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/Episode.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/Episode.kt @@ -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?, - @SerializedName("guest_starts") val guestStars: List? + @SerializedName("crew") val crew: List?, + @SerializedName("guest_starts") val guestStars: List? ) \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/Person.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/Person.kt index 6dc6a27..dd09cce 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/Person.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/Person.kt @@ -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? ) diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/MediaDetailScreen.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/MediaDetailScreen.kt index f3d56c5..a1086da 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/MediaDetailScreen.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/MediaDetailScreen.kt @@ -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),