From 0538ddd058d25b2ae63977941e18402d2a081bc6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Sun, 25 Feb 2024 01:49:59 +0100 Subject: [PATCH] =?utf8?q?=F0=9F=9A=A7=20Change=20ticket=20filter=20to=20o?= =?utf8?q?nly=20return=20a=20MovieState?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../filters/webpages/savoy/SavoyTicketsFilter.java | 107 ++------------------- 1 file changed, 6 insertions(+), 101 deletions(-) diff --git a/src/main/java/net/pterodactylus/rhynodge/filters/webpages/savoy/SavoyTicketsFilter.java b/src/main/java/net/pterodactylus/rhynodge/filters/webpages/savoy/SavoyTicketsFilter.java index cf32c1c..5fa2fff 100644 --- a/src/main/java/net/pterodactylus/rhynodge/filters/webpages/savoy/SavoyTicketsFilter.java +++ b/src/main/java/net/pterodactylus/rhynodge/filters/webpages/savoy/SavoyTicketsFilter.java @@ -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 movies = movieExtractor.getMovies(htmlState.document()); Logger.getLogger(SavoyTicketsFilter.class).debug("Parsed Movies: " + movies); - return new OutputState(getPlainTextOutput(movies), getHtmlOutput(movies)); - } - - private Optional getHtmlOutput(Collection 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.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 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 getPlainTextOutput(Collection 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); } } -- 2.7.4