X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Frhynodge%2Fstates%2FComicState.java;h=0e661bc0e20afd6c4f7d5e55375a70fc1a667453;hb=8aeef90590095a455e2323d70ba8ccae032f4276;hp=1f600a3304816b1770e59e2f3e883ceebf7ac51b;hpb=5b5709eed3100f733837e588309c302b57dbaf37;p=rhynodge.git diff --git a/src/main/java/net/pterodactylus/rhynodge/states/ComicState.java b/src/main/java/net/pterodactylus/rhynodge/states/ComicState.java index 1f600a3..0e661bc 100644 --- a/src/main/java/net/pterodactylus/rhynodge/states/ComicState.java +++ b/src/main/java/net/pterodactylus/rhynodge/states/ComicState.java @@ -17,13 +17,25 @@ package net.pterodactylus.rhynodge.states; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Set; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import net.pterodactylus.rhynodge.Reaction; import net.pterodactylus.rhynodge.states.ComicState.Comic; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.Lists; +import org.apache.commons.lang3.StringEscapeUtils; +import org.apache.commons.lang3.StringUtils; + +import static java.lang.String.format; /** * {@link net.pterodactylus.rhynodge.State} that can store an arbitrary amout of @@ -35,14 +47,34 @@ public class ComicState extends AbstractState implements Iterable { @JsonProperty private final List comics = Lists.newArrayList(); + private final Set newComics = new HashSet<>(); - public List comics() { - return comics; + @SuppressWarnings("unused") + // used for deserialization + private ComicState() { + } + + public ComicState(Collection allComics) { + this.comics.addAll(allComics); } - public ComicState add(Comic comic) { - comics.add(comic); - return this; + public ComicState(Collection allComics, Collection newComics) { + this(allComics); + this.newComics.addAll(newComics); + } + + @Override + public boolean isEmpty() { + return comics.isEmpty(); + } + + @Override + public boolean triggered() { + return !newComics.isEmpty(); + } + + public List comics() { + return comics; } @Override @@ -52,7 +84,69 @@ public class ComicState extends AbstractState implements Iterable { @Override public String toString() { - return String.format("ComicState[comics=%s]", comics()); + return format("ComicState[comics=%s]", comics()); + } + + @Nonnull + @Override + protected String summary(Reaction reaction) { + return format("New Comic found for “%s!”", reaction.name()); + } + + @Nonnull + @Override + protected String plainText() { + 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(); + } + + @Nullable + @Override + protected String htmlText() { + StringBuilder html = new StringBuilder(); + html.append(""); + + for (Comic newComic : newComics) { + generateComicHtml(html, newComic); + } + + List latestComics = new ArrayList<>(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(); + } + + 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"); + } } /** @@ -106,7 +200,7 @@ public class ComicState extends AbstractState implements Iterable { @Override public String toString() { - return String.format("Comic[title=%s,strips=%s]", title(), strips()); + return format("Comic[title=%s,strips=%s]", title(), strips()); } } @@ -153,7 +247,7 @@ public class ComicState extends AbstractState implements Iterable { @Override public String toString() { - return String.format("Strip[imageUrl=%s,comment=%s]", imageUrl(), comment()); + return format("Strip[imageUrl=%s,comment=%s]", imageUrl(), comment()); } }