X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Frhynodge%2Ftriggers%2FNewComicTrigger.java;h=416b9e266ff1fdcb4ef4854aece9b22f62dd2e2a;hb=5d962b76adef88663cfa4acc093836c71fe9dd82;hp=d2e068899db5ea53bb6300f29f60f37a908d6572;hpb=6d8a3475d8e56cea63d53d456baef434318223a7;p=rhynodge.git diff --git a/src/main/java/net/pterodactylus/rhynodge/triggers/NewComicTrigger.java b/src/main/java/net/pterodactylus/rhynodge/triggers/NewComicTrigger.java index d2e0688..416b9e2 100644 --- a/src/main/java/net/pterodactylus/rhynodge/triggers/NewComicTrigger.java +++ b/src/main/java/net/pterodactylus/rhynodge/triggers/NewComicTrigger.java @@ -17,24 +17,15 @@ package net.pterodactylus.rhynodge.triggers; -import static com.google.common.base.Preconditions.*; +import java.util.HashSet; +import java.util.Set; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import net.pterodactylus.rhynodge.Reaction; import net.pterodactylus.rhynodge.State; import net.pterodactylus.rhynodge.Trigger; -import net.pterodactylus.rhynodge.output.DefaultOutput; -import net.pterodactylus.rhynodge.output.Output; import net.pterodactylus.rhynodge.states.ComicState; import net.pterodactylus.rhynodge.states.ComicState.Comic; -import net.pterodactylus.rhynodge.states.ComicState.Strip; -import com.google.common.collect.Lists; -import org.apache.commons.lang3.StringEscapeUtils; -import org.apache.commons.lang3.StringUtils; +import static com.google.common.base.Preconditions.checkArgument; /** * {@link Trigger} implementation that detects the presence of new {@link @@ -44,11 +35,7 @@ import org.apache.commons.lang3.StringUtils; */ public class NewComicTrigger implements Trigger { - /** The new comics. */ - private final List newComics = Lists.newArrayList(); - - /** The latest comic state. */ - private ComicState mergedComicState; + private boolean triggered = false; @Override public State mergeStates(State previousState, State currentState) { @@ -58,110 +45,22 @@ public class NewComicTrigger implements Trigger { ComicState previousComicState = (ComicState) previousState; ComicState currentComicState = (ComicState) currentState; - /* copy old state into new state. */ - mergedComicState = new ComicState(); - for (Comic comic : previousComicState) { - mergedComicState.add(comic); - } + Set allComics = new HashSet<>(previousComicState.comics()); + Set newComics = new HashSet<>(); - newComics.clear(); for (Comic comic : currentComicState) { - if (!mergedComicState.comics().contains(comic)) { + if (allComics.add(comic)) { newComics.add(comic); - mergedComicState.add(comic); + triggered = true; } } - return mergedComicState; + return new ComicState(allComics, newComics); } @Override public boolean triggers() { - return !newComics.isEmpty(); - } - - @Override - public Output output(Reaction reaction) { - DefaultOutput output = new DefaultOutput(String.format("New Comic found for “%s!”", reaction.name())); - - output.addText("text/plain", generatePlainText()); - output.addText("text/html", generateHtmlText()); - - return output; - } - - // - // PRIVATE METHODS - // - - /** - * Generates a list of the new comics in plain text format. - * - * @return The list of new comics in plain text format - */ - private String generatePlainText() { - StringBuilder text = new StringBuilder(); - - for (Comic newComic : newComics) { - text.append("Comic Found: ").append(newComic.title()).append("\n\n"); - for (Strip strip : newComic) { - text.append("Image: ").append(strip.imageUrl()).append("\n"); - if (!StringUtils.isBlank(strip.comment())) { - text.append("Comment: ").append(strip.comment()).append("\n"); - } - } - text.append("\n\n"); - } - - return text.toString(); - } - - /** - * Generates a list of new comics in HTML format. - * - * @return The list of new comics in HTML format - */ - private String generateHtmlText() { - StringBuilder html = new StringBuilder(); - html.append(""); - - for (Comic newComic : newComics) { - generateComicHtml(html, newComic); - } - - List latestComics = new ArrayList(mergedComicState.comics()); - Collections.reverse(latestComics); - int comicCount = 0; - for (Comic comic : latestComics) { - if (newComics.contains(comic)) { - continue; - } - generateComicHtml(html, comic); - if (++comicCount == 7) { - break; - } - } - - return html.append("").toString(); - } - - /** - * Generates the HTML for a single comic. - * - * @param html - * The string builder to append the HTML to - * @param comic - * The comic to render - */ - private void generateComicHtml(StringBuilder html, Comic comic) { - html.append("

").append(StringEscapeUtils.escapeHtml4(comic.title())).append("

\n"); - for (Strip strip : comic) { - html.append("
\"").append(StringEscapeUtils.escapeHtml4(strip.comment()));
\n"); - html.append("
").append(StringEscapeUtils.escapeHtml4(strip.comment())).append("
\n"); - } + return triggered; } }