Skip to content

Instantly share code, notes, and snippets.

@kinisoftware
Created July 27, 2019 11:19
Show Gist options
  • Select an option

  • Save kinisoftware/f07ab14e83f153f9f1bb059da7df0af7 to your computer and use it in GitHub Desktop.

Select an option

Save kinisoftware/f07ab14e83f153f9f1bb059da7df0af7 to your computer and use it in GitHub Desktop.
class MoviesGetter(gson: Gson) {
private val theMovieDBService = TheMovieDBService(gson)
fun getUpcomings(locale: String, releaseDate: String) = theMovieDBService.getUpcomings(locale)
.filter { it.isReleasedOnDate(releaseDate) }
.map { it.getTitle() }
.getResponse()
fun getNowPlayingMovies(locale: String) = theMovieDBService.getNowPlayingMovies(locale)
.map { it.getTitle() }
.getResponse()
private fun Movie.getTitle() =
when {
originalTitle == title && originalLanguage != "es" -> {
val lang = ssmlLangByMovieOriginalLanguage[originalLanguage]
when {
lang != null && lang.isNotBlank() -> "<lang xml:lang=$lang>${originalTitle.sanitaze()}</lang>"
else -> {
println("Unhandled original language $originalLanguage")
title.sanitaze()
}
}
}
else -> title.sanitaze()
}
private fun String.sanitaze() = replace("&", "&amp;")
private fun List<String>.getResponse() =
when {
isNotEmpty() -> take(size - 1).joinToString(", ").plus(" y ${last()}.")
else -> ""
}
private fun Movie.isReleasedOnDate(dateValue: String) =
getWeekFormatStyle(releaseDate) == dateValue || getMonthFormatStyle(releaseDate) == dateValue
private fun getWeekFormatStyle(releaseDate: String): String {
val localDate = LocalDate.parse(releaseDate)
val weekFields = WeekFields.of(Locale.getDefault())
return localDate.year.toString() + "-W" + localDate.get(weekFields.weekOfWeekBasedYear())
}
private fun getMonthFormatStyle(releaseDate: String): String {
val localDate = LocalDate.parse(releaseDate)
return if (localDate.monthValue < 10)
localDate.year.toString() + "-0" + localDate.monthValue
else
localDate.year.toString() + "-" + localDate.monthValue
}
companion object {
private val ssmlLangByMovieOriginalLanguage = mapOf(
"en" to "\"en-US\"",
"fr" to "\"fr-FR\""
)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment