Get an reusa existing episode.
[rhynodge.git] / src / main / java / net / pterodactylus / rhynodge / triggers / NewEpisodeTrigger.java
index 421f6e1..5f09560 100644 (file)
@@ -37,6 +37,8 @@ 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;
 
@@ -48,14 +50,17 @@ import com.google.common.collect.Sets;
  */
 public class NewEpisodeTrigger implements Trigger {
 
+       /** All episodes. */
+       private final Collection<Episode> allEpisodes = Sets.newHashSet();
+
        /** All new episodes. */
        private final Collection<Episode> newEpisodes = Sets.newHashSet();
 
        /** All changed episodes. */
        private final Collection<Episode> changedEpisodes = Sets.newHashSet();
 
-       /** All episodes. */
-       private final Collection<Episode> allEpisodes = Sets.newHashSet();
+       /** All new torrent files. */
+       private final Collection<TorrentFile> newTorrentFiles = Sets.newHashSet();
 
        //
        // TRIGGER METHODS
@@ -71,24 +76,29 @@ public class NewEpisodeTrigger implements Trigger {
                newEpisodes.clear();
                changedEpisodes.clear();
                this.allEpisodes.clear();
-               Map<Episode, Episode> allEpisodes = FluentIterable.from(((EpisodeState) previousState).episodes()).toMap(new Function<Episode, Episode>() {
+               newTorrentFiles.clear();
+               Map<Episode, Episode> allEpisodes = Maps.newHashMap(FluentIterable.from(((EpisodeState) previousState).episodes()).toMap(new Function<Episode, Episode>() {
 
                        @Override
                        public Episode apply(Episode episode) {
                                return episode;
                        }
-               });
+               }));
                for (Episode episode : ((EpisodeState) currentState).episodes()) {
                        if (!allEpisodes.containsKey(episode)) {
                                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);
                                }
                        }
                }