Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert to sealed interface #128

Merged
merged 1 commit into from
Jan 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ import app.moviebase.tmdb.model.TmdbWatchProviderId

sealed interface DiscoverCategory {

object NowPlaying : DiscoverCategory
object Upcoming : DiscoverCategory
data object NowPlaying : DiscoverCategory
data object Upcoming : DiscoverCategory
data class Popular(val mediaType: TmdbMediaType) : DiscoverCategory
data class TopRated(val mediaType: TmdbMediaType) : DiscoverCategory
object AiringToday : DiscoverCategory
object OnTv : DiscoverCategory
data object AiringToday : DiscoverCategory
data object OnTv : DiscoverCategory
data class OnDvd(val mediaType: TmdbMediaType) : DiscoverCategory

data class Network(val network: Int) : DiscoverCategory {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,43 +31,43 @@ data class TmdbDiscoverFilter<T>(
}
}

sealed class TmdbDiscoverTimeRange {
sealed interface TmdbDiscoverTimeRange {

data class BetweenYears(
private val from: Int,
private val to: Int
) : TmdbDiscoverTimeRange() {
) : TmdbDiscoverTimeRange {
val firstDayOfYear: String get() = LocalDate(from, 1, 1).toString()
val lastDayOfYear: String get() = LocalDate(to, 12, 31).toString()
}

data class OneYear(
val year: Int
) : TmdbDiscoverTimeRange()
) : TmdbDiscoverTimeRange

data class Custom(
val firstDate: String? = null,
val lastDate: String? = null
) : TmdbDiscoverTimeRange()
) : TmdbDiscoverTimeRange
}

sealed class TmdbDiscover {
sealed interface TmdbDiscover {

abstract val sortOrder: TmdbSortOrder
abstract val voteAverageGte: Float?
abstract val voteAverageLte: Float?
abstract val voteCountGte: Int?
abstract val voteCountLte: Int?
val sortOrder: TmdbSortOrder
val voteAverageGte: Float?
val voteAverageLte: Float?
val voteCountGte: Int?
val voteCountLte: Int?

abstract val withGenres: List<String>
abstract val withoutGenres: List<String>
abstract val withWatchProviders: TmdbDiscoverFilter<Int>?
abstract val watchRegion: String? // ISO 3166-1 code
abstract val withWatchMonetizationTypes: List<TmdbWatchMonetizationType>
val withGenres: List<String>
val withoutGenres: List<String>
val withWatchProviders: TmdbDiscoverFilter<Int>?
val watchRegion: String? // ISO 3166-1 code
val withWatchMonetizationTypes: List<TmdbWatchMonetizationType>

abstract fun buildParameters(): Map<String, String?>
fun buildParameters(): Map<String, String?>

protected fun newParameterMap(): HashMap<String, String?> {
fun newParameterMap(): HashMap<String, String?> {
val params = HashMap<String, String?>()
voteAverageGte?.let {
params[DiscoverParam.VOTE_AVERAGE_GTE] = it.toString()
Expand Down Expand Up @@ -122,7 +122,7 @@ sealed class TmdbDiscover {
override val withWatchProviders: TmdbDiscoverFilter<Int>? = null,
override val watchRegion: String? = null,
override val withWatchMonetizationTypes: List<TmdbWatchMonetizationType> = emptyList()
) : TmdbDiscover() {
) : TmdbDiscover {

override fun buildParameters(): Map<String, String?> {
val params = newParameterMap()
Expand Down Expand Up @@ -174,7 +174,7 @@ sealed class TmdbDiscover {
override val withWatchProviders: TmdbDiscoverFilter<Int>? = null,
override val watchRegion: String? = null,
override val withWatchMonetizationTypes: List<TmdbWatchMonetizationType> = emptyList()
) : TmdbDiscover() {
) : TmdbDiscover {

override fun buildParameters(): Map<String, String?> {
val params = newParameterMap()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,11 @@ interface TmdbRatingItem {
*/
@Polymorphic
@Serializable
sealed class TmdbMediaListItem : TmdbAnyMedia, TmdbBackdropMedia, TmdbPosterMedia, TmdbRatingItem {
abstract val overview: String
abstract val genresIds: List<Int>
abstract val popularity: Float
abstract val originalLanguage: String
sealed interface TmdbMediaListItem : TmdbAnyMedia, TmdbBackdropMedia, TmdbPosterMedia, TmdbRatingItem {
val overview: String
val genresIds: List<Int>
val popularity: Float
val originalLanguage: String
}

@Serializable
Expand All @@ -77,7 +77,7 @@ data class TmdbMovie(
@SerialName("vote_count") override val voteCount: Int,
@SerialName("video") val video: Boolean,
@SerialName("vote_average") override val voteAverage: Float
) : TmdbMediaListItem(), TmdbSearchable
) : TmdbMediaListItem, TmdbSearchable

@Serializable
data class TmdbMoviePageResult(
Expand Down Expand Up @@ -105,7 +105,7 @@ data class TmdbShow(
@SerialName("vote_count") override val voteCount: Int,
@SerialName("name") val name: String,
@SerialName("original_name") val originalName: String
) : TmdbMediaListItem(), TmdbSearchable
) : TmdbMediaListItem, TmdbSearchable

@Serializable
data class TmdbShowPageResult(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -224,22 +224,22 @@ data class TmdbPersonShowCredits(
@SerialName("crew") val crew: List<TmdbPersonCredit.Show.Crew>
)

sealed class TmdbPersonCredit : TmdbAnyMedia, TmdbBackdropMedia, TmdbPosterMedia {
sealed interface TmdbPersonCredit : TmdbAnyMedia, TmdbBackdropMedia, TmdbPosterMedia {

abstract val voteAverage: Float
abstract val voteCount: Int
abstract val overview: String
abstract val genresIds: List<Int>
abstract val popularity: Float
abstract val originalLanguage: String
val voteAverage: Float
val voteCount: Int
val overview: String
val genresIds: List<Int>
val popularity: Float
val originalLanguage: String

sealed class Movie : TmdbPersonCredit() {
sealed interface Movie : TmdbPersonCredit {

abstract val adult: Boolean
abstract val releaseDate: LocalDate?
abstract val originalTitle: String?
abstract val title: String?
abstract val video: Boolean
val adult: Boolean
val releaseDate: LocalDate?
val originalTitle: String?
val title: String?
val video: Boolean

@Serializable
data class Cast(
Expand All @@ -259,11 +259,10 @@ sealed class TmdbPersonCredit : TmdbAnyMedia, TmdbBackdropMedia, TmdbPosterMedia
@SerialName("video") override val video: Boolean = false,
@SerialName("vote_average") override val voteAverage: Float,
@SerialName("vote_count") override val voteCount: Int,

@SerialName("character") val character: String,
@SerialName("credit_id") val creditId: String,
@SerialName("order") val order: Int? = null
) : Movie()
) : Movie

@Serializable
data class Crew(
Expand All @@ -283,19 +282,18 @@ sealed class TmdbPersonCredit : TmdbAnyMedia, TmdbBackdropMedia, TmdbPosterMedia
@SerialName("video") override val video: Boolean = false,
@SerialName("vote_count") override val voteCount: Int,
@SerialName("vote_average") override val voteAverage: Float,

@SerialName("credit_id") val creditId: String,
@SerialName("department") val department: String,
@SerialName("job") val job: String
) : Movie()
) : Movie
}

sealed class Show : TmdbPersonCredit() {
sealed interface Show : TmdbPersonCredit {

abstract val firstAirDate: LocalDate?
abstract val originCountry: List<String>
abstract val name: String
abstract val originalName: String
val firstAirDate: LocalDate?
val originCountry: List<String>
val name: String
val originalName: String

@Serializable
data class Cast(
Expand All @@ -317,7 +315,7 @@ sealed class TmdbPersonCredit : TmdbAnyMedia, TmdbBackdropMedia, TmdbPosterMedia
@SerialName("character") val character: String,
@SerialName("credit_id") val creditId: String,
@SerialName("order") val order: Int? = null
) : TmdbPersonCredit.Show()
) : Show

@Serializable
data class Crew(
Expand All @@ -336,10 +334,9 @@ sealed class TmdbPersonCredit : TmdbAnyMedia, TmdbBackdropMedia, TmdbPosterMedia
@SerialName("vote_count") override val voteCount: Int,
@SerialName("name") override val name: String,
@SerialName("original_name") override val originalName: String,

@SerialName("credit_id") val creditId: String,
@SerialName("department") val department: String,
@SerialName("job") val job: String
) : TmdbPersonCredit.Show()
) : Show
}
}