1 package net.pterodactylus.rhynodge.filters.webpages.savoy
3 import net.pterodactylus.rhynodge.Merger
4 import net.pterodactylus.rhynodge.State
5 import org.apache.log4j.Logger
7 class SavoyMerger : Merger {
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")
15 val newMovies = currentState.movies
16 .filter { it.name !in previousState.movies.map(Movie::name) }
17 logger.debug("newMovies: $newMovies")
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")
24 return MovieState(currentState.movies, newMovies, hasChangedPerformances)
29 private val logger = Logger.getLogger(SavoyMerger::class.java)