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;
*/
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
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);
}
}
}