X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Frhynodge%2Ftriggers%2FNewComicTrigger.java;h=d2e068899db5ea53bb6300f29f60f37a908d6572;hb=bbd347904c5013824617462c8f55cc8c0469bfec;hp=45c290f926735b51be0f89aa83c72cc03959897e;hpb=e371f97ebb6eaa268326bfc678013dfc96378918;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 45c290f..d2e0688 100644 --- a/src/main/java/net/pterodactylus/rhynodge/triggers/NewComicTrigger.java +++ b/src/main/java/net/pterodactylus/rhynodge/triggers/NewComicTrigger.java @@ -19,6 +19,8 @@ package net.pterodactylus.rhynodge.triggers; import static com.google.common.base.Preconditions.*; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import net.pterodactylus.rhynodge.Reaction; @@ -45,6 +47,9 @@ public class NewComicTrigger implements Trigger { /** The new comics. */ private final List newComics = Lists.newArrayList(); + /** The latest comic state. */ + private ComicState mergedComicState; + @Override public State mergeStates(State previousState, State currentState) { checkArgument(previousState instanceof ComicState, "previous state must be a comic state"); @@ -54,7 +59,7 @@ public class NewComicTrigger implements Trigger { ComicState currentComicState = (ComicState) currentState; /* copy old state into new state. */ - ComicState mergedComicState = new ComicState(); + mergedComicState = new ComicState(); for (Comic comic : previousComicState) { mergedComicState.add(comic); } @@ -121,16 +126,42 @@ public class NewComicTrigger implements Trigger { html.append(""); for (Comic newComic : newComics) { - html.append("

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

\n"); - for (Strip strip : newComic) { - html.append("
\"").append(StringEscapeUtils.escapeHtml4(strip.comment()));
\n"); + 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"); + } + } + }