package net.pterodactylus.rhynodge.filters.webpages.savoy import net.pterodactylus.rhynodge.Merger import net.pterodactylus.rhynodge.State import org.apache.log4j.Logger class SavoyMerger : Merger { override fun mergeStates(previousState: State, currentState: State): State { previousState as? MovieState ?: throw IllegalArgumentException("previousState is not a MovieState") currentState as? MovieState ?: throw IllegalArgumentException("currentState is not a MovieState") logger.debug("previousState: $previousState") logger.debug("currentState: $currentState") val newMovies = currentState.movies .filter { it.name !in previousState.movies.map(Movie::getName) } logger.debug("newMovies: $newMovies") val hasChangedPerformances = newMovies.isNotEmpty() || previousState.movies.map { movie -> movie.name to movie.performances.map { performance -> performance.time.toLocalDate() }.distinct().sorted() }.sortedBy(Pair::first) != currentState.movies.map { movie -> movie.name to movie.performances.map { performance -> performance.time.toLocalDate() }.distinct().sorted() }.sortedBy(Pair::first) logger.debug("hasChangedPerformances: $hasChangedPerformances") return MovieState(currentState.movies, newMovies, hasChangedPerformances) } } private val logger = Logger.getLogger(SavoyMerger::class.java)