Turn static methods into instance methods.
[rhynodge.git] / src / main / java / net / pterodactylus / rhynodge / triggers / NewEpisodeTrigger.java
index 9d42572..5fc4537 100644 (file)
@@ -37,6 +37,7 @@ import org.apache.commons.lang3.StringEscapeUtils;
 import com.google.common.base.Function;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Ordering;
 import com.google.common.collect.Sets;
@@ -58,6 +59,8 @@ public class NewEpisodeTrigger implements Trigger {
        /** All changed episodes. */
        private final Collection<Episode> changedEpisodes = Sets.newHashSet();
 
+       /** All new torrent files. */
+       private final Collection<TorrentFile> newTorrentFiles = Sets.newHashSet();
 
        //
        // TRIGGER METHODS
@@ -73,6 +76,7 @@ public class NewEpisodeTrigger implements Trigger {
                newEpisodes.clear();
                changedEpisodes.clear();
                this.allEpisodes.clear();
+               newTorrentFiles.clear();
                Map<Episode, Episode> allEpisodes = Maps.newHashMap(FluentIterable.from(((EpisodeState) previousState).episodes()).toMap(new Function<Episode, Episode>() {
 
                        @Override
@@ -85,12 +89,16 @@ public class NewEpisodeTrigger implements Trigger {
                                allEpisodes.put(episode, episode);
                                newEpisodes.add(episode);
                        }
-                       for (TorrentFile torrentFile : episode.torrentFiles()) {
-                               int oldSize = allEpisodes.get(episode).torrentFiles().size();
-                               allEpisodes.get(episode).addTorrentFile(torrentFile);
-                               int newSize = allEpisodes.get(episode).torrentFiles().size();
-                               if (!newEpisodes.contains(episode) && (oldSize != newSize)) {
-                                       changedEpisodes.add(episode);
+                       Episode existingEpisode = allEpisodes.get(episode);
+                       for (TorrentFile torrentFile : Lists.newArrayList(episode.torrentFiles())) {
+                               int oldSize = existingEpisode.torrentFiles().size();
+                               existingEpisode.addTorrentFile(torrentFile);
+                               int newSize = existingEpisode.torrentFiles().size();
+                               if (oldSize != newSize) {
+                                       newTorrentFiles.add(torrentFile);
+                               }
+                               if (!newEpisodes.contains(existingEpisode) && (oldSize != newSize)) {
+                                       changedEpisodes.add(existingEpisode);
                                }
                        }
                }
@@ -122,8 +130,8 @@ public class NewEpisodeTrigger implements Trigger {
                        summary = String.format("%d changed Torrent(s) for “%s!”", changedEpisodes.size(), reaction.name());
                }
                DefaultOutput output = new DefaultOutput(summary);
-               output.addText("text/plain", generatePlainText(reaction, newEpisodes, changedEpisodes, allEpisodes));
-               output.addText("text/html", generateHtmlText(reaction, newEpisodes, changedEpisodes, allEpisodes));
+               output.addText("text/plain", generatePlainText(reaction));
+               output.addText("text/html", generateHtmlText(reaction));
                return output;
        }
 
@@ -136,15 +144,9 @@ public class NewEpisodeTrigger implements Trigger {
         *
         * @param reaction
         *            The reaction that was triggered
-        * @param newEpisodes
-        *            The new episodes
-        * @param changedEpisodes
-        *            The changed episodes
-        * @param allEpisodes
-        *            All episodes
         * @return The plain text output
         */
-       private static String generatePlainText(Reaction reaction, Collection<Episode> newEpisodes, Collection<Episode> changedEpisodes, Collection<Episode> allEpisodes) {
+       private String generatePlainText(Reaction reaction) {
                StringBuilder stringBuilder = new StringBuilder();
                if (!newEpisodes.isEmpty()) {
                        stringBuilder.append(reaction.name()).append(" - New Episodes\n\n");
@@ -205,15 +207,9 @@ public class NewEpisodeTrigger implements Trigger {
         *
         * @param reaction
         *            The reaction that was triggered
-        * @param newEpisodes
-        *            The new episodes
-        * @param changedEpisodes
-        *            The changed episodes
-        * @param allEpisodes
-        *            All episodes
         * @return The HTML output
         */
-       private static String generateHtmlText(Reaction reaction, Collection<Episode> newEpisodes, Collection<Episode> changedEpisodes, Collection<Episode> allEpisodes) {
+       private String generateHtmlText(Reaction reaction) {
                StringBuilder htmlBuilder = new StringBuilder();
                htmlBuilder.append("<html><body>\n");
                htmlBuilder.append("<h1>").append(StringEscapeUtils.escapeHtml4(reaction.name())).append("</h1>\n");