From e6f8931c74a1c7012f36f8aed27332e019eba7e3 Mon Sep 17 00:00:00 2001 From: Owen LeJeune Date: Wed, 28 Jun 2023 13:31:58 -0400 Subject: [PATCH] replace tv credits with aggregate credits API --- .../api/tmdb/api/v3/model/BaseEpisode.kt | 3 +- .../api/tmdb/api/v3/model/BaseSeason.kt | 3 +- .../api/tmdb/api/v3/model/CreditResponse.kt | 6 +-- .../api/tmdb/api/v3/model/DetailedMovie.kt | 3 +- .../api/tmdb/api/v3/model/DetailedTv.kt | 5 ++- .../api/tmdb/api/v3/model/FavoriteMedia.kt | 3 +- .../api/tmdb/api/v3/model/FavoriteMovie.kt | 3 +- .../api/tmdb/api/v3/model/FavoriteTvSeries.kt | 3 +- .../tvtime/api/tmdb/api/v3/model/KnownFor.kt | 3 +- .../api/tmdb/api/v3/model/KnownForMovie.kt | 3 +- .../api/tmdb/api/v3/model/KnownForTv.kt | 3 +- .../tmdb/api/v3/model/MovieReleaseResults.kt | 3 +- .../tvtime/api/tmdb/api/v3/model/Review.kt | 5 ++- .../tmdb/api/v3/model/SearchResultMedia.kt | 3 +- .../tmdb/api/v3/model/SearchResultMovie.kt | 3 +- .../api/tmdb/api/v3/model/SearchResultTv.kt | 3 +- .../api/tmdb/api/v3/model/WatchlistMedia.kt | 3 +- .../api/tmdb/api/v3/model/WatchlistMovie.kt | 3 +- .../tmdb/api/v3/model/WatchlistTvSeries.kt | 3 +- .../api/tmdb/api/v4/model/AccountList.kt | 5 ++- .../tvtime/api/tmdb/api/v4/model/ListItem.kt | 3 +- .../tvtime/api/tmdb/api/v4/model/ListMovie.kt | 3 +- .../tvtime/api/tmdb/api/v4/model/ListTv.kt | 3 +- .../api/tmdb/api/v4/model/RatedMedia.kt | 5 ++- .../api/tmdb/api/v4/model/RatedMovie.kt | 3 +- .../tvtime/api/tmdb/api/v4/model/RatedTv.kt | 3 +- .../api/tmdb/api/v4/model/RecommendedMedia.kt | 3 +- .../api/tmdb/api/v4/model/RecommendedMovie.kt | 3 +- .../api/tmdb/api/v4/model/RecommendedTv.kt | 3 +- .../tvtime/ui/components/Posters.kt | 5 ++- .../tvtime/ui/screens/AccountScreen.kt | 10 ++++- .../tvtime/ui/screens/MediaDetailScreen.kt | 8 ++-- .../tvtime/ui/screens/SearchScreen.kt | 7 ++-- .../com/owenlejeune/tvtime/utils/TmdbUtils.kt | 38 ++++--------------- app/src/main/res/values/strings.xml | 3 ++ 35 files changed, 93 insertions(+), 76 deletions(-) diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/BaseEpisode.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/BaseEpisode.kt index 5814c22..4ede8d0 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/BaseEpisode.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/BaseEpisode.kt @@ -1,9 +1,10 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model import com.google.gson.annotations.SerializedName +import java.util.Date class BaseEpisode( - @SerializedName("air_date") val airDate: String, + @SerializedName("air_date") val airDate: Date?, @SerializedName("episode_number") val episodeNumber: Int, @SerializedName("id") val id: Int, @SerializedName("name") val name: String, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/BaseSeason.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/BaseSeason.kt index 3695afe..f20cadd 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/BaseSeason.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/BaseSeason.kt @@ -1,10 +1,11 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model import com.google.gson.annotations.SerializedName +import java.util.Date data class BaseSeason( @SerializedName("id") val id: Int, - @SerializedName("air_date") val airDate: String, + @SerializedName("air_date") val airDate: Date?, @SerializedName("episode_count") val episodeCount: Int, @SerializedName("name") val name: String, @SerializedName("overview") val overview: String, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/CreditResponse.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/CreditResponse.kt index ff21946..eb0cf53 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/CreditResponse.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/CreditResponse.kt @@ -26,7 +26,7 @@ abstract class CreditMedia( @SerializedName("media_type") val mediaType: MediaViewType, @SerializedName("genre_ids") val genreIds: List, @SerializedName("popularity") val popularity: Float, - @SerializedName("release_date", alternate = ["first_air_date"]) val releaseDate: Date, + @SerializedName("release_date", alternate = ["first_air_date"]) val releaseDate: Date?, @SerializedName("vote_average") val voteAverage: Float, @SerializedName("vote_count") val voteCount: Int, @SerializedName("character") val character: String @@ -73,7 +73,7 @@ class CreditTv( MediaViewType.TV, genreIds, popularity, releaseDate, voteAverage, voteCount, character) class CreditEpisode( - @SerializedName("air_date") val airDate: Date, + @SerializedName("air_date") val airDate: Date?, @SerializedName("episode_number") val episodeNumber: Int, @SerializedName("id") val id: Int, @SerializedName("name") val name: String, @@ -86,7 +86,7 @@ class CreditEpisode( ) class CreditSeason( - @SerializedName("air_date") val airDate: Date, + @SerializedName("air_date") val airDate: Date?, @SerializedName("episode_count") val episodeCount: Int, @SerializedName("id") val id: Int, @SerializedName("name") val name: String, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/DetailedMovie.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/DetailedMovie.kt index f05a309..1af8a68 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/DetailedMovie.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/DetailedMovie.kt @@ -1,6 +1,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model import com.google.gson.annotations.SerializedName +import java.util.Date class DetailedMovie( id: Int, @@ -21,7 +22,7 @@ class DetailedMovie( spokenLanguages: List, @SerializedName("adult") val isAdult: Boolean, @SerializedName("budget") val budget: Int, - @SerializedName("release_date") val releaseDate: String, + @SerializedName("release_date") val releaseDate: Date?, @SerializedName("revenue") val revenue: Long, @SerializedName("runtime") val runtime: Int?, @SerializedName("imdb_id") val imdbId: String?, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/DetailedTv.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/DetailedTv.kt index e0da07c..0f0ccf4 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/DetailedTv.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/DetailedTv.kt @@ -1,6 +1,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model import com.google.gson.annotations.SerializedName +import java.util.Date class DetailedTv( id: Int, @@ -20,8 +21,8 @@ class DetailedTv( popularity: Float, spokenLanguages: List, @SerializedName("created_by") val createdBy: List, - @SerializedName("first_air_date") val firstAirDate: String, - @SerializedName("last_air_date") val lastAirDate: String, + @SerializedName("first_air_date") val firstAirDate: Date?, + @SerializedName("last_air_date") val lastAirDate: Date?, @SerializedName("in_production") val inProduction: Boolean, @SerializedName("networks") val networks: List, @SerializedName("number_of_episodes") val numberOfEpisodes: Int, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/FavoriteMedia.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/FavoriteMedia.kt index 3ac2cd4..55593e9 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/FavoriteMedia.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/FavoriteMedia.kt @@ -1,6 +1,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model import com.google.gson.annotations.SerializedName +import java.util.Date abstract class FavoriteMedia( @SerializedName("poster_path") val posterPath: String?, @@ -9,7 +10,7 @@ abstract class FavoriteMedia( @SerializedName("backdrop_path") val backdropPath: String?, @SerializedName("vote_average") val voteAverage: Float, @SerializedName("overview") val overview: String, - @SerializedName("release_date", alternate = ["first_air_date"]) val releaseDate: String, + @SerializedName("release_date", alternate = ["first_air_date"]) val releaseDate: Date?, @SerializedName("genre_ids") val genreIds: List, @SerializedName("original_language") val originalLanguage: String, @SerializedName("vote_count") val voteCount: Int, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/FavoriteMovie.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/FavoriteMovie.kt index f50ec05..614913a 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/FavoriteMovie.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/FavoriteMovie.kt @@ -1,6 +1,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model import com.google.gson.annotations.SerializedName +import java.util.Date class FavoriteMovie( posterPath: String?, @@ -9,7 +10,7 @@ class FavoriteMovie( backdropPath: String?, voteAverage: Float, overview: String, - releaseDate: String, + releaseDate: Date?, genreIds: List, originalLanguage: String, voteCount: Int, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/FavoriteTvSeries.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/FavoriteTvSeries.kt index d98448f..265b54a 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/FavoriteTvSeries.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/FavoriteTvSeries.kt @@ -1,6 +1,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model import com.google.gson.annotations.SerializedName +import java.util.Date class FavoriteTvSeries( posterPath: String?, @@ -9,7 +10,7 @@ class FavoriteTvSeries( backdropPath: String?, voteAverage: Float, overview: String, - releaseDate: String, + releaseDate: Date?, genreIds: List, originalLanguage: String, voteCount: Int, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/KnownFor.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/KnownFor.kt index f12cfac..087a7e0 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/KnownFor.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/KnownFor.kt @@ -2,10 +2,11 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model import com.google.gson.annotations.SerializedName import com.owenlejeune.tvtime.utils.types.MediaViewType +import java.util.Date abstract class KnownFor( @SerializedName("backdrop_path") val backdropPath: String?, - @SerializedName("release_date", alternate = ["first_air_date"]) val releaseDate: String, + @SerializedName("release_date", alternate = ["first_air_date"]) val releaseDate: Date?, @SerializedName("genre_ids") val genreIds: List, @SerializedName("id") val id: Int, @SerializedName("media_type") val mediaType: MediaViewType, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/KnownForMovie.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/KnownForMovie.kt index 7bad1e1..7183d23 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/KnownForMovie.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/KnownForMovie.kt @@ -2,10 +2,11 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model import com.google.gson.annotations.SerializedName import com.owenlejeune.tvtime.utils.types.MediaViewType +import java.util.Date class KnownForMovie( backdropPath: String?, - releaseDate: String, + releaseDate: Date?, genreIds: List, id: Int, mediaType: MediaViewType, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/KnownForTv.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/KnownForTv.kt index e21469d..3322b9a 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/KnownForTv.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/KnownForTv.kt @@ -2,10 +2,11 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model import com.google.gson.annotations.SerializedName import com.owenlejeune.tvtime.utils.types.MediaViewType +import java.util.Date class KnownForTv( backdropPath: String?, - releaseDate: String, + releaseDate: Date?, genreIds: List, id: Int, mediaType: MediaViewType, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/MovieReleaseResults.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/MovieReleaseResults.kt index f02b440..aa4c7e4 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/MovieReleaseResults.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/MovieReleaseResults.kt @@ -1,6 +1,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model import com.google.gson.annotations.SerializedName +import java.util.Date data class MovieReleaseResults( @SerializedName("results") val releaseDates: List @@ -13,7 +14,7 @@ data class MovieReleaseResults( inner class ReleaseDate( @SerializedName("certification") val certification: String, - @SerializedName("release_date") val releaseDate: String + @SerializedName("release_date") val releaseDate: Date? ) } diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/Review.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/Review.kt index b6558e1..92c23ca 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/Review.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/Review.kt @@ -1,12 +1,13 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model import com.google.gson.annotations.SerializedName +import java.util.Date class Review( @SerializedName("id") val id: String, @SerializedName("author") val author: String, @SerializedName("author_details") val authorDetails: AuthorDetails, @SerializedName("content") val content: String, - @SerializedName("created_at") val createdAt: String, - @SerializedName("updated_at") val updatedAt: String + @SerializedName("created_at") val createdAt: Date?, + @SerializedName("updated_at") val updatedAt: Date? ) \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/SearchResultMedia.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/SearchResultMedia.kt index 0834751..b7eb4d3 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/SearchResultMedia.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/SearchResultMedia.kt @@ -2,12 +2,13 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model import com.google.gson.annotations.SerializedName import com.owenlejeune.tvtime.utils.types.MediaViewType +import java.util.Date abstract class SearchResultMedia( @SerializedName("overview") val overview: String, @SerializedName("vote_average") val voteAverage: Float, @SerializedName("vote_count") val voteCount: Int, - @SerializedName("release_date", alternate = ["first_air_date", "air_date"]) val releaseDate: String, + @SerializedName("release_date", alternate = ["first_air_date", "air_date"]) val releaseDate: Date?, @SerializedName("backdrop_path") val backdropPath: String?, @SerializedName("genre_ids") val genreIds: List, @SerializedName("original_language") val originalLanguage: String, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/SearchResultMovie.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/SearchResultMovie.kt index 59dd911..0b7219a 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/SearchResultMovie.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/SearchResultMovie.kt @@ -2,6 +2,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model import com.google.gson.annotations.SerializedName import com.owenlejeune.tvtime.utils.types.MediaViewType +import java.util.Date class SearchResultMovie( id: Int, @@ -15,7 +16,7 @@ class SearchResultMovie( originalName: String, posterPath: String?, popularity: Float, - releaseDate: String, + releaseDate: Date?, @SerializedName("adult") val isAdult: Boolean, @SerializedName("video") val video: Boolean, ): SearchResultMedia( diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/SearchResultTv.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/SearchResultTv.kt index 438a965..ca1d31f 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/SearchResultTv.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/SearchResultTv.kt @@ -2,6 +2,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model import com.google.gson.annotations.SerializedName import com.owenlejeune.tvtime.utils.types.MediaViewType +import java.util.Date class SearchResultTv( id: Int, @@ -15,7 +16,7 @@ class SearchResultTv( originalName: String, posterPath: String?, popularity: Float, - releaseDate: String, + releaseDate: Date?, @SerializedName("origin_country") val originCountry: List, ): SearchResultMedia( overview, voteAverage, voteCount, releaseDate, backdropPath, genreIds, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/WatchlistMedia.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/WatchlistMedia.kt index 4e8961c..26eb1ae 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/WatchlistMedia.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/WatchlistMedia.kt @@ -1,6 +1,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model import com.google.gson.annotations.SerializedName +import java.util.Date abstract class WatchlistMedia( @SerializedName("poster_path") val posterPath: String?, @@ -9,7 +10,7 @@ abstract class WatchlistMedia( @SerializedName("backdrop_path") val backdropPath: String?, @SerializedName("vote_average") val voteAverage: Float, @SerializedName("overview") val overview: String, - @SerializedName("release_date", alternate = ["first_air_date"]) val releaseDate: String, + @SerializedName("release_date", alternate = ["first_air_date"]) val releaseDate: Date?, @SerializedName("genre_ids") val genreIds: List, @SerializedName("original_language") val originalLanguage: String, @SerializedName("vote_count") val voteCount: Int, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/WatchlistMovie.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/WatchlistMovie.kt index b21d6b6..ef88771 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/WatchlistMovie.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/WatchlistMovie.kt @@ -1,6 +1,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model import com.google.gson.annotations.SerializedName +import java.util.Date class WatchlistMovie( posterPath: String?, @@ -9,7 +10,7 @@ class WatchlistMovie( backdropPath: String?, voteAverage: Float, overview: String, - releaseDate: String, + releaseDate: Date?, genreIds: List, originalLanguage: String, voteCount: Int, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/WatchlistTvSeries.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/WatchlistTvSeries.kt index 1c36f15..7c617b9 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/WatchlistTvSeries.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v3/model/WatchlistTvSeries.kt @@ -1,6 +1,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3.model import com.google.gson.annotations.SerializedName +import java.util.Date class WatchlistTvSeries( posterPath: String?, @@ -9,7 +10,7 @@ class WatchlistTvSeries( backdropPath: String?, voteAverage: Float, overview: String, - releaseDate: String, + releaseDate: Date?, genreIds: List, originalLanguage: String, voteCount: Int, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/AccountList.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/AccountList.kt index 9d54a59..a958bca 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/AccountList.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/AccountList.kt @@ -1,6 +1,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v4.model import com.google.gson.annotations.SerializedName +import java.util.Date class AccountList( @SerializedName("iso_639_1") val languageCode: String, @@ -10,8 +11,8 @@ class AccountList( @SerializedName("revenue") val revenue: String, @SerializedName("public") val public: Int, @SerializedName("name") val name: String, - @SerializedName("updated_at") val updatedAt: String, - @SerializedName("created_at") val createdAt: String, + @SerializedName("updated_at") val updatedAt: Date?, + @SerializedName("created_at") val createdAt: Date?, // @SerializedName("sort_by") @SerializedName("backdrop_path") val backdropPath: String, @SerializedName("runtime") val runtime: Int, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/ListItem.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/ListItem.kt index 9a1efff..a357d83 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/ListItem.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/ListItem.kt @@ -2,10 +2,11 @@ package com.owenlejeune.tvtime.api.tmdb.api.v4.model import com.google.gson.annotations.SerializedName import com.owenlejeune.tvtime.utils.types.MediaViewType +import java.util.Date abstract class ListItem( @SerializedName("backdrop_path") val backdropPath: String?, - @SerializedName("release_date", alternate = ["first_air_date"]) val releaseDate: String, + @SerializedName("release_date", alternate = ["first_air_date"]) val releaseDate: Date?, @SerializedName("genre_ids") val genreIds: List, @SerializedName("id") val id: Int, @SerializedName("media_type") val mediaType: MediaViewType, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/ListMovie.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/ListMovie.kt index 6fac55f..170060c 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/ListMovie.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/ListMovie.kt @@ -2,10 +2,11 @@ package com.owenlejeune.tvtime.api.tmdb.api.v4.model import com.google.gson.annotations.SerializedName import com.owenlejeune.tvtime.utils.types.MediaViewType +import java.util.Date class ListMovie( backdropPath: String?, - releaseDate: String, + releaseDate: Date?, genreIds: List, id: Int, mediaType: MediaViewType, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/ListTv.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/ListTv.kt index 26fe05b..e7326c1 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/ListTv.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/ListTv.kt @@ -2,10 +2,11 @@ package com.owenlejeune.tvtime.api.tmdb.api.v4.model import com.google.gson.annotations.SerializedName import com.owenlejeune.tvtime.utils.types.MediaViewType +import java.util.Date class ListTv( backdropPath: String?, - releaseDate: String, + releaseDate: Date?, genreIds: List, id: Int, mediaType: MediaViewType, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RatedMedia.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RatedMedia.kt index 5ddf373..3f9cb48 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RatedMedia.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RatedMedia.kt @@ -1,6 +1,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v4.model import com.google.gson.annotations.SerializedName +import java.util.Date abstract class RatedMedia( var type: RatedType, @@ -10,7 +11,7 @@ abstract class RatedMedia( @SerializedName("vote_average") val voteAverage: Float, @SerializedName("vote_count") val voteCount: Int, @SerializedName("account_rating") val rating: AccountRating, - @SerializedName("release_date", alternate = ["first_air_date", "air_date"]) val releaseDate: String, + @SerializedName("release_date", alternate = ["first_air_date", "air_date"]) val releaseDate: Date?, @SerializedName("backdrop_path") val backdropPath: String?, @SerializedName("genre_ids") val genreIds: List, @SerializedName("original_language") val originalLanguage: String, @@ -26,6 +27,6 @@ abstract class RatedMedia( inner class AccountRating( @SerializedName("value") val value: Float, - @SerializedName("created_at") val createdAt: String + @SerializedName("created_at") val createdAt: Date? ) } \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RatedMovie.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RatedMovie.kt index fbe2d8a..3ef08b0 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RatedMovie.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RatedMovie.kt @@ -1,6 +1,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v4.model import com.google.gson.annotations.SerializedName +import java.util.Date class RatedMovie( id: Int, @@ -15,7 +16,7 @@ class RatedMovie( originalName: String, posterPath: String?, popularity: Float, - releaseDate: String, + releaseDate: Date?, @SerializedName("adult") val isAdult: Boolean, @SerializedName("video") val video: Boolean ): RatedMedia( diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RatedTv.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RatedTv.kt index 82ee8e7..466665c 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RatedTv.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RatedTv.kt @@ -1,6 +1,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v4.model import com.google.gson.annotations.SerializedName +import java.util.Date class RatedTv( id: Int, @@ -15,7 +16,7 @@ class RatedTv( originalName: String, posterPath: String?, popularity: Float, - releaseDate: String, + releaseDate: Date?, @SerializedName("origin_country") val originCountry: List, ): RatedMedia( RatedType.SERIES, id, overview, name, voteAverage, voteCount, rating, releaseDate, diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RecommendedMedia.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RecommendedMedia.kt index 0831cbd..336a781 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RecommendedMedia.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RecommendedMedia.kt @@ -2,6 +2,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v4.model import com.google.gson.annotations.SerializedName import com.owenlejeune.tvtime.api.tmdb.api.v3.model.TmdbItem +import java.util.Date abstract class RecommendedMedia( id: Int, @@ -25,7 +26,7 @@ abstract class RecommendedMedia( @SerializedName("popularity") val popularity: Float, @SerializedName("release_date", alternate = ["first_air_date"]) - val releaseDate: String, + val releaseDate: Date?, @SerializedName("vote_average") val voteAverage: Float, @SerializedName("vote_count") diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RecommendedMovie.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RecommendedMovie.kt index 15e00be..f997611 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RecommendedMovie.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RecommendedMovie.kt @@ -1,6 +1,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v4.model import com.google.gson.annotations.SerializedName +import java.util.Date class RecommendedMovie ( id: Int, @@ -14,7 +15,7 @@ class RecommendedMovie ( mediaType: String, genreIds: List, popularity: Float, - releaseDate: String, + releaseDate: Date?, voteAverage: Float, voteCount: Int, @SerializedName("video") diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RecommendedTv.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RecommendedTv.kt index faab910..15e01e8 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RecommendedTv.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/api/v4/model/RecommendedTv.kt @@ -1,6 +1,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v4.model import com.google.gson.annotations.SerializedName +import java.util.Date class RecommendedTv( id: Int, @@ -14,7 +15,7 @@ class RecommendedTv( mediaType: String, genreIds: List, popularity: Float, - releaseDate: String, + releaseDate: Date?, voteAverage: Float, voteCount: Int, @SerializedName("origin_country") diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/components/Posters.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/components/Posters.kt index 1f0b361..bdd9301 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/components/Posters.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/components/Posters.kt @@ -145,12 +145,12 @@ fun PosterItem( ) } -@OptIn(ExperimentalMaterial3Api::class) @Composable fun PosterItem( url: String?, modifier: Modifier = Modifier, width: Dp = POSTER_WIDTH, + height: Dp = POSTER_HEIGHT, onClick: () -> Unit = {}, enabled: Boolean = true, placeholder: ImageVector = Icons.Filled.Movie, @@ -164,6 +164,7 @@ fun PosterItem( elevation = CardDefaults.elevatedCardElevation(defaultElevation = elevation), modifier = modifier .width(width = width) + .height(height = height) .wrapContentHeight() .clickable( enabled = enabled, @@ -176,7 +177,7 @@ fun PosterItem( val m = if (backgroundColor == Color.Transparent) { Modifier.wrapContentHeight() } else { - Modifier.height(POSTER_HEIGHT) + Modifier.height(height) } Box( modifier = m diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/AccountScreen.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/AccountScreen.kt index ce6778f..633557c 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/AccountScreen.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/AccountScreen.kt @@ -34,6 +34,7 @@ import com.owenlejeune.tvtime.api.tmdb.api.v4.model.AccountList import com.owenlejeune.tvtime.api.tmdb.api.v4.model.RatedMedia import com.owenlejeune.tvtime.api.tmdb.api.v4.model.RatedMovie import com.owenlejeune.tvtime.api.tmdb.api.v4.model.RatedTv +import com.owenlejeune.tvtime.extensions.getCalendarYear import com.owenlejeune.tvtime.extensions.lazyPagingItems import com.owenlejeune.tvtime.extensions.unlessEmpty import com.owenlejeune.tvtime.ui.components.AccountIcon @@ -47,6 +48,7 @@ import com.owenlejeune.tvtime.utils.SessionManager import com.owenlejeune.tvtime.utils.TmdbUtils import com.owenlejeune.tvtime.utils.types.MediaViewType import kotlinx.coroutines.launch +import java.util.Date import kotlin.reflect.KClass @OptIn(ExperimentalMaterial3Api::class) @@ -281,19 +283,23 @@ private fun MediaItemRow( mediaViewType: MediaViewType, id: Int, name: String, - date: String, + date: Date?, description: String, posterPath: String? = null, backdropPath: String? = null, rating: Float? = null ) { + var title = "$name •" + date?.let { + title += " (${date.getCalendarYear()})" + } MediaResultCard( appNavController = appNavController, mediaViewType = mediaViewType, id = id, backdropPath = backdropPath, posterPath = posterPath, - title = "$name (${date.split("-")[0]})", + title = title, additionalDetails = listOf(description), rating = rating ) 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 a1086da..58235c7 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 @@ -317,7 +317,7 @@ private fun MiscMovieDetails( .fillMaxWidth() .wrapContentHeight() .padding(horizontal = 16.dp), - year = TmdbUtils.getMovieReleaseYear(movie), + year = movie.releaseDate?.getCalendarYear()?.toString() ?: "", runtime = TmdbUtils.convertRuntimeToHoursMinutes(movie), genres = movie.genres, contentRating = contentRating @@ -673,7 +673,7 @@ private fun SeasonCard( lastSeason?.let { ContentCard( - title = "Latest Season" + title = stringResource(R.string.latest_season_title) ) { Row( horizontalArrangement = Arrangement.spacedBy(12.dp), @@ -696,7 +696,7 @@ private fun SeasonCard( style = MaterialTheme.typography.titleMedium ) Text( - text = "${it.airDate?.getCalendarYear()} | ${it.episodes.size} Episodes" + text = stringResource(id = R.string.season_ep_count, it.airDate?.getCalendarYear() ?: 0, it.episodes.size) ) Text( text = it.overview, @@ -715,7 +715,7 @@ private fun SeasonCard( } ) { Text( - text = "See all seasons", + text = stringResource(id = R.string.see_all_seasons_text), color = MaterialTheme.colorScheme.onSurfaceVariant, fontSize = 14.sp, modifier = Modifier.padding(4.dp) diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SearchScreen.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SearchScreen.kt index 925a57b..cc1d668 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SearchScreen.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SearchScreen.kt @@ -29,6 +29,7 @@ import com.owenlejeune.tvtime.R import com.owenlejeune.tvtime.api.tmdb.api.v3.MoviesService import com.owenlejeune.tvtime.api.tmdb.api.v3.TvService import com.owenlejeune.tvtime.api.tmdb.api.v3.model.* +import com.owenlejeune.tvtime.extensions.getCalendarYear import com.owenlejeune.tvtime.extensions.lazyPagingItems import com.owenlejeune.tvtime.ui.components.MediaResultCard import com.owenlejeune.tvtime.ui.components.SelectableTextChip @@ -400,7 +401,7 @@ private fun MovieSearchResultView( backdropModel = { TmdbUtils.getFullBackdropPath(result.backdropPath) }, additionalDetails = { listOf( - TmdbUtils.releaseYearFromData(result.releaseDate), + result.releaseDate?.getCalendarYear()?.toString() ?: "", cast?.joinToString(separator = ", ") { it.name } ?: "" ) } @@ -429,7 +430,7 @@ private fun TvSearchResultView( backdropModel = { TmdbUtils.getFullBackdropPath(result.backdropPath) }, additionalDetails = { listOf( - "${TmdbUtils.releaseYearFromData(result.releaseDate)} ${context.getString(R.string.search_result_tv_series)}", + "${result.releaseDate?.getCalendarYear() ?: ""} ${context.getString(R.string.search_result_tv_series)}", cast?.joinToString(separator = ", ") { it.name } ?: "" ) } @@ -445,7 +446,7 @@ private fun PeopleSearchResultView( val additional = mostKnownFor?.let { listOf( - "${mostKnownFor.title} (${TmdbUtils.releaseYearFromData(mostKnownFor.releaseDate)})" + "${mostKnownFor.title} (${mostKnownFor.releaseDate?.getCalendarYear()})" ) } ?: emptyList() diff --git a/app/src/main/java/com/owenlejeune/tvtime/utils/TmdbUtils.kt b/app/src/main/java/com/owenlejeune/tvtime/utils/TmdbUtils.kt index 42cbb08..b87d5f4 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/utils/TmdbUtils.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/utils/TmdbUtils.kt @@ -15,6 +15,7 @@ import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Status import com.owenlejeune.tvtime.api.tmdb.api.v3.model.TmdbItem import com.owenlejeune.tvtime.api.tmdb.api.v3.model.TvContentRatings import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Video +import com.owenlejeune.tvtime.extensions.getCalendarYear import com.owenlejeune.tvtime.ui.viewmodel.ConfigurationViewModel import java.text.SimpleDateFormat import java.util.Date @@ -93,32 +94,16 @@ object TmdbUtils { } } - fun getFullEpisodeStillPath(episode: Episode): String? { - return getFullEpisodeStillPath(episode.stillPath) - } - - fun getMovieReleaseYear(movie: DetailedMovie): String { - return movie.releaseDate.split("-")[0] - } - fun getSeriesRun(series: DetailedTv): String { - val startYear = getTvStartYear(series) + val startYear = series.firstAirDate?.getCalendarYear() ?: "" val endYear = if (series.status == Status.ACTIVE) { - getTvEndYear(series) + series.lastAirDate?.getCalendarYear() ?: "" } else { "" } return "${startYear}-${endYear}" } - fun getTvStartYear(series: DetailedTv): String { - return series.firstAirDate.split("-")[0] - } - - fun getTvEndYear(series: DetailedTv): String { - return series.lastAirDate.split("-")[0] - } - fun convertRuntimeToHoursMinutes(movie: DetailedMovie): String { movie.runtime?.let { runtime -> return convertRuntimeToHoursAndMinutes(runtime) @@ -197,12 +182,12 @@ object TmdbUtils { return "" } - fun formatDate(inDate: String): String { - val orig = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", java.util.Locale.US) + fun formatDate(inDate: Date?): String { + if (inDate == null) { + return "" + } val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm", java.util.Locale.US) - - val date = orig.parse(inDate)//.replace("Z", "+0000")) - return formatter.format(date) + return formatter.format(inDate) } fun getAccountGravatarUrl(accountDetails: AccountDetails): String { @@ -219,13 +204,6 @@ object TmdbUtils { return IMAGE_BASE.plus(LOGO_SIZE).plus(path) } - fun releaseYearFromData(releaseDate: String): String { - if (releaseDate.length >=4) { - return releaseDate.split("-").first { it.length == 4 } - } - return "" - } - fun formatRevenue(revenue: Long): String { val decFormat = "%.1f" val thousands = revenue.toFloat() / 1000f diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 59dbacb..e90249e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -238,4 +238,7 @@ as %1$s (%2$d eps.) … %1$s Images + Latest Season + %1$d | %2$d Episodes + See all seasons \ No newline at end of file