- return !newEpisodes.isEmpty() || !changedEpisodes.isEmpty();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Output output(Reaction reaction) {
- String summary;
- if (!newEpisodes.isEmpty()) {
- if (!changedEpisodes.isEmpty()) {
- summary = String.format("%d new and %d changed Torrent(s) for “%s!”", newEpisodes.size(), changedEpisodes.size(), reaction.name());
- } else {
- summary = String.format("%d new Torrent(s) for “%s!”", newEpisodes.size(), reaction.name());
- }
- } else {
- summary = String.format("%d changed Torrent(s) for “%s!”", changedEpisodes.size(), reaction.name());
- }
- DefaultOutput output = new DefaultOutput(summary);
- output.addText("text/plain", generatePlainText(reaction));
- output.addText("text/html", generateHtmlText(reaction));
- return output;
- }
-
- //
- // PRIVATE METHODS
- //
-
- /**
- * Generates the plain text trigger output.
- *
- * @param reaction
- * The reaction that was triggered
- * @return The plain text output
- */
- private String generatePlainText(Reaction reaction) {
- StringBuilder stringBuilder = new StringBuilder();
- if (!newEpisodes.isEmpty()) {
- stringBuilder.append(reaction.name()).append(" - New Episodes\n\n");
- for (Episode episode : newEpisodes) {
- stringBuilder.append("- ").append(episode.identifier()).append("\n");
- for (TorrentFile torrentFile : episode) {
- stringBuilder.append(" - ").append(torrentFile.name()).append(", ").append(torrentFile.size()).append("\n");
- if ((torrentFile.magnetUri() != null) && (torrentFile.magnetUri().length() > 0)) {
- stringBuilder.append(" Magnet: ").append(torrentFile.magnetUri()).append("\n");
- }
- if ((torrentFile.downloadUri() != null) && (torrentFile.downloadUri().length() > 0)) {
- stringBuilder.append(" Download: ").append(torrentFile.downloadUri()).append("\n");
- }
- }
- }
- }
- if (!changedEpisodes.isEmpty()) {
- stringBuilder.append(reaction.name()).append(" - Changed Episodes\n\n");
- for (Episode episode : changedEpisodes) {
- stringBuilder.append("- ").append(episode.identifier()).append("\n");
- for (TorrentFile torrentFile : episode) {
- stringBuilder.append(" - ").append(torrentFile.name()).append(", ").append(torrentFile.size()).append("\n");
- if ((torrentFile.magnetUri() != null) && (torrentFile.magnetUri().length() > 0)) {
- stringBuilder.append(" Magnet: ").append(torrentFile.magnetUri()).append("\n");
- }
- if ((torrentFile.downloadUri() != null) && (torrentFile.downloadUri().length() > 0)) {
- stringBuilder.append(" Download: ").append(torrentFile.downloadUri()).append("\n");
- }
- }
- }
- }
- /* list all known episodes. */
- stringBuilder.append(reaction.name()).append(" - All Known Episodes\n\n");
- ImmutableMap<Integer, Collection<Episode>> episodesBySeason = FluentIterable.from(allEpisodes).index(new Function<Episode, Integer>() {
-
- @Override
- public Integer apply(Episode episode) {
- return episode.season();
- }
- }).asMap();
- for (Entry<Integer, Collection<Episode>> seasonEntry : episodesBySeason.entrySet()) {
- stringBuilder.append(" Season ").append(seasonEntry.getKey()).append("\n\n");
- for (Episode episode : Ordering.natural().sortedCopy(seasonEntry.getValue())) {
- stringBuilder.append(" Episode ").append(episode.episode()).append("\n");
- for (TorrentFile torrentFile : episode) {
- stringBuilder.append(" Size: ").append(torrentFile.size());
- stringBuilder.append(" in ").append(torrentFile.fileCount()).append(" file(s): ");
- stringBuilder.append(torrentFile.magnetUri());
- }
- }
- }
-
- return stringBuilder.toString();
- }
-
- /**
- * Generates the HTML trigger output.
- *
- * @param reaction
- * The reaction that was triggered
- * @return The HTML output
- */
- private String generateHtmlText(Reaction reaction) {
- StringBuilder htmlBuilder = new StringBuilder();
- htmlBuilder.append("<html><body>\n");
- /* show all known episodes. */
- htmlBuilder.append("<table>\n<caption>All Known Episodes</caption>\n");
- htmlBuilder.append("<thead>\n");
- htmlBuilder.append("<tr>");
- htmlBuilder.append("<th>Season</th>");
- htmlBuilder.append("<th>Episode</th>");
- htmlBuilder.append("<th>Filename</th>");
- htmlBuilder.append("<th>Size</th>");
- htmlBuilder.append("<th>File(s)</th>");
- htmlBuilder.append("<th>Seeds</th>");
- htmlBuilder.append("<th>Leechers</th>");
- htmlBuilder.append("<th>Magnet</th>");
- htmlBuilder.append("<th>Download</th>");
- htmlBuilder.append("</tr>\n");
- htmlBuilder.append("</thead>\n");
- htmlBuilder.append("<tbody>\n");
- Episode lastEpisode = null;
- for (Entry<Integer, Collection<Episode>> seasonEntry : FluentIterable.from(Ordering.natural().reverse().sortedCopy(allEpisodes)).index(Episode.BY_SEASON).asMap().entrySet()) {
- for (Episode episode : seasonEntry.getValue()) {
- for (TorrentFile torrentFile : episode) {
- if (newEpisodes.contains(episode)) {
- htmlBuilder.append("<tr style=\"color: #008000; font-weight: bold;\">");
- } else if (newTorrentFiles.contains(torrentFile)) {
- htmlBuilder.append("<tr style=\"color: #008000;\">");
- } else {
- htmlBuilder.append("<tr>");
- }
- if ((lastEpisode == null) || !lastEpisode.equals(episode)) {
- htmlBuilder.append("<td>").append(episode.season()).append("</td><td>").append(episode.episode()).append("</td>");
- } else {
- htmlBuilder.append("<td colspan=\"2\"></td>");
- }
- htmlBuilder.append("<td>").append(StringEscapeUtils.escapeHtml4(torrentFile.name())).append("</td>");
- htmlBuilder.append("<td>").append(StringEscapeUtils.escapeHtml4(torrentFile.size())).append("</td>");
- htmlBuilder.append("<td>").append(torrentFile.fileCount()).append("</td>");
- htmlBuilder.append("<td>").append(torrentFile.seedCount()).append("</td>");
- htmlBuilder.append("<td>").append(torrentFile.leechCount()).append("</td>");
- htmlBuilder.append("<td><a href=\"").append(StringEscapeUtils.escapeHtml4(torrentFile.magnetUri())).append("\">Link</a></td>");
- htmlBuilder.append("<td><a href=\"").append(StringEscapeUtils.escapeHtml4(torrentFile.downloadUri())).append("\">Link</a></td>");
- htmlBuilder.append("</tr>\n");
- lastEpisode = episode;
- }
- }
- }
- htmlBuilder.append("</tbody>\n");
- htmlBuilder.append("</table>\n");
- htmlBuilder.append("</body></html>\n");
- return htmlBuilder.toString();