Mention status code in failed state
[rhynodge.git] / src / main / java / net / pterodactylus / rhynodge / states / EpisodeState.java
index d7d90b2..78ca478 100644 (file)
@@ -29,6 +29,7 @@ import net.pterodactylus.rhynodge.states.EpisodeState.Episode;
 import net.pterodactylus.rhynodge.states.TorrentState.TorrentFile;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.base.Function;
 
 /**
  * {@link State} implementation that stores episodes of TV shows, parsed via
@@ -64,6 +65,11 @@ public class EpisodeState extends AbstractState implements Iterable<Episode> {
        // ACCESSORS
        //
 
+       @Override
+       public boolean isEmpty() {
+               return episodes.isEmpty();
+       }
+
        /**
         * Returns all episodes contained in this state.
         *
@@ -98,7 +104,16 @@ public class EpisodeState extends AbstractState implements Iterable<Episode> {
         *
         * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
         */
-       public static class Episode implements Iterable<TorrentFile> {
+       public static class Episode implements Comparable<Episode>, Iterable<TorrentFile> {
+
+               /** Function to extract the season of an episode. */
+               public static final Function<Episode, Integer> BY_SEASON = new Function<Episode, Integer>() {
+
+                       @Override
+                       public Integer apply(Episode episode) {
+                               return (episode != null ) ? episode.season() : -1;
+                       }
+               };
 
                /** The season of the episode. */
                @JsonProperty
@@ -184,7 +199,9 @@ public class EpisodeState extends AbstractState implements Iterable<Episode> {
                 *            The torrent file to add
                 */
                public void addTorrentFile(TorrentFile torrentFile) {
-                       torrentFiles.add(torrentFile);
+                       if (!torrentFiles.contains(torrentFile)) {
+                               torrentFiles.add(torrentFile);
+                       }
                }
 
                //
@@ -199,6 +216,26 @@ public class EpisodeState extends AbstractState implements Iterable<Episode> {
                        return torrentFiles.iterator();
                }
 
+               /**
+                * {@inheritDoc}
+                */
+               @Override
+               public int compareTo(Episode episode) {
+                       if (season() < episode.season()) {
+                               return -1;
+                       }
+                       if (season() > episode.season()) {
+                               return 1;
+                       }
+                       if (episode() < episode.episode()) {
+                               return -1;
+                       }
+                       if (episode() > episode.episode()) {
+                               return 1;
+                       }
+                       return 0;
+               }
+
                //
                // OBJECT METHODS
                //