🚧 Change ticket filter to only return a MovieState
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sun, 25 Feb 2024 00:49:59 +0000 (01:49 +0100)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sun, 25 Feb 2024 00:49:59 +0000 (01:49 +0100)
src/main/java/net/pterodactylus/rhynodge/filters/webpages/savoy/SavoyTicketsFilter.java

index cf32c1c..5fa2fff 100644 (file)
@@ -1,32 +1,15 @@
 package net.pterodactylus.rhynodge.filters.webpages.savoy;
 
-import static com.google.common.base.Preconditions.checkArgument;
-import static java.time.format.DateTimeFormatter.ofPattern;
-import static java.util.Optional.empty;
-import static java.util.Optional.of;
-import static net.pterodactylus.rhynodge.filters.webpages.savoy.Movie.byName;
-import static net.pterodactylus.rhynodge.filters.webpages.savoy.Movie.withPerformances;
-import static net.pterodactylus.rhynodge.filters.webpages.savoy.Performance.byTime;
-import static org.jsoup.nodes.Document.createShell;
-import static org.jsoup.parser.Tag.valueOf;
-
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.util.Collection;
-import java.util.List;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
 import net.pterodactylus.rhynodge.Filter;
 import net.pterodactylus.rhynodge.State;
 import net.pterodactylus.rhynodge.states.HtmlState;
-import net.pterodactylus.rhynodge.states.OutputState;
-
 import org.apache.log4j.Logger;
 import org.jetbrains.annotations.NotNull;
-import org.jsoup.nodes.Document;
-import org.jsoup.nodes.Element;
-import org.jsoup.nodes.Node;
+
+import java.util.Collection;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static java.util.Collections.emptySet;
 
 /**
  * {@link Filter} implementation that creates a list of movies running at the
@@ -37,9 +20,6 @@ import org.jsoup.nodes.Node;
 public class SavoyTicketsFilter implements Filter {
 
        private static final MovieExtractor movieExtractor = new MovieExtractor();
-       private DateTimeFormatter dateFormatter = ofPattern("dd.MM.uuuu");
-       private DateTimeFormatter timeFormatter = ofPattern("HH:mm");
-       private DateTimeFormatter dateTimeFormatter = ofPattern("dd.MM.uuuu, HH:mm");
 
        @NotNull
        @Override
@@ -49,82 +29,7 @@ public class SavoyTicketsFilter implements Filter {
                HtmlState htmlState = (HtmlState) state;
                Collection<Movie> movies = movieExtractor.getMovies(htmlState.document());
                Logger.getLogger(SavoyTicketsFilter.class).debug("Parsed Movies: " + movies);
-               return new OutputState(getPlainTextOutput(movies), getHtmlOutput(movies));
-       }
-
-       private Optional<String> getHtmlOutput(Collection<Movie> movies) {
-               Document document = createShell("");
-               document.head().appendElement("style").attr("type", "text/css").text(generateStyleSheet());
-               document.body().appendElement("h1").text("Kinoprogramm: Savoy");
-               document.body().appendElement("h2").text("Filme");
-               movies.stream().filter(withPerformances).sorted(byName).forEach(movie -> {
-                       document.body().appendChild(createMovieNode(movie));
-               });
-               document.body().appendElement("h2").text("Zeiten");
-               movies.stream().flatMap(movie -> movie.getPerformances().stream().map(performance -> new Presentation(movie, performance))).sorted((leftPresentation, rightPresentation) -> leftPresentation.getTicketLink().getTime().compareTo(rightPresentation.getTicketLink().getTime())).collect(Collectors.<Presentation, LocalDate>groupingBy(presentation -> presentation.getTicketLink().getTime().toLocalDate())).entrySet().stream().sorted((leftEntry, rightEntry) -> leftEntry.getKey().compareTo(rightEntry.getKey())).forEach(dateEntry -> {
-                       document.body().appendChild(createDayNode(dateEntry.getKey(), dateEntry.getValue()));
-               });
-               document.body().appendElement("h2").text("Vorschau");
-               movies.stream().filter(withPerformances.negate()).sorted(byName).forEach(movie -> {
-                       document.body().appendElement("div").attr("class", "name").text(movie.getName());
-               });
-               return of(document.toString());
-       }
-
-       private String generateStyleSheet() {
-               StringBuilder styleSheet = new StringBuilder();
-               styleSheet.append(".movie .name { font-weight: bold; }\n");
-               styleSheet.append(".day:first-child { margin-top: 1em; }\n");
-               styleSheet.append(".date { display: table-cell; font-weight: bold; }\n");
-               styleSheet.append(".presentation { display: inline; }\n");
-               styleSheet.append(".time, .movie { display: inline; }\n");
-               return styleSheet.toString();
-       }
-
-       private Node createMovieNode(Movie movie) {
-               Element movieNode = new Element(valueOf("div"), "");
-               movieNode.attr("class", "movie");
-               movieNode.appendElement("div").attr("class", "name").text(movie.getName());
-               movie.getPerformances().stream().sorted(byTime).forEach(performance -> {
-                       Element presentationNode = movieNode.appendElement("div").attr("class", "presentation");
-                       presentationNode.appendElement("div").attr("class", "time").text("» ").appendElement("a").attr("href", performance.getLink()).text(performance.getTime().format(dateTimeFormatter));
-               });
-               return movieNode;
-       }
-
-       private Node createDayNode(LocalDate date, List<Presentation> presentations) {
-               Element dayNode = new Element(valueOf("div"), "").attr("class", "day");
-               dayNode.appendElement("div").attr("class", "date").text(date.format(dateFormatter));
-               presentations.stream().forEach(presentation -> {
-                       Element presentationNode = dayNode.appendElement("div").attr("class", "presentation");
-                       presentationNode.appendElement("div").attr("class", "time").text("» " + presentation.getTicketLink().getTime().format(timeFormatter));
-                       presentationNode.appendElement("div").attr("class", "movie").appendElement("a").attr("href", presentation.getTicketLink().getLink()).text(presentation.getMovie().getName());
-               });
-               return dayNode;
-       }
-
-       private Optional<String> getPlainTextOutput(Collection<Movie> movies) {
-               return empty();
-       }
-
-       private static class Presentation {
-
-               private final Movie movie;
-               private final Performance performance;
-
-               private Presentation(Movie movie, Performance performance) {
-                       this.movie = movie;
-                       this.performance = performance;
-               }
-
-               private Movie getMovie() {
-                       return movie;
-               }
-
-               private Performance getTicketLink() {
-                       return performance;
-               }
-
+               return new MovieState(movies, emptySet(), false);
        }
 
 }