♻️ Convert Movie to Kotlin data class
[rhynodge.git] / src / main / kotlin / net / pterodactylus / rhynodge / filters / webpages / savoy / SavoyMerger.kt
1 package net.pterodactylus.rhynodge.filters.webpages.savoy
2
3 import net.pterodactylus.rhynodge.Merger
4 import net.pterodactylus.rhynodge.State
5 import org.apache.log4j.Logger
6
7 class SavoyMerger : Merger {
8
9         override fun mergeStates(previousState: State, currentState: State): State {
10                 previousState as? MovieState ?: throw IllegalArgumentException("previousState is not a MovieState")
11                 currentState as? MovieState ?: throw IllegalArgumentException("currentState is not a MovieState")
12                 logger.debug("previousState: $previousState")
13                 logger.debug("currentState: $currentState")
14
15                 val newMovies = currentState.movies
16                         .filter { it.name !in previousState.movies.map(Movie::name) }
17                 logger.debug("newMovies: $newMovies")
18
19                 val hasChangedPerformances = newMovies.isNotEmpty() ||
20                                 previousState.movies.map { movie -> movie.name to movie.performances.map { performance -> performance.time.toLocalDate() }.distinct().sorted() }.sortedBy(Pair<String, *>::first) !=
21                                 currentState.movies.map { movie -> movie.name to movie.performances.map { performance -> performance.time.toLocalDate() }.distinct().sorted() }.sortedBy(Pair<String, *>::first)
22                 logger.debug("hasChangedPerformances: $hasChangedPerformances")
23
24                 return MovieState(currentState.movies, newMovies, hasChangedPerformances)
25         }
26
27 }
28
29 private val logger = Logger.getLogger(SavoyMerger::class.java)