Ignore albums without inserted images when calculating the fingerprint.
[Sone.git] / src / main / java / net / pterodactylus / sone / data / Album.java
index cb7b4f3..c47d83f 100644 (file)
@@ -69,6 +69,15 @@ public class Album implements Fingerprintable {
                }
        };
 
+       /** Function that transforms an album into the images it contains. */
+       public static final Function<Album, List<Image>> IMAGES = new Function<Album, List<Image>>() {
+
+               @Override
+               public List<Image> apply(Album album) {
+                       return album.getImages();
+               }
+       };
+
        /**
         * Filter that removes all albums that do not have any images in any album
         * below it.
@@ -77,11 +86,19 @@ public class Album implements Fingerprintable {
 
                @Override
                public boolean apply(Album album) {
+                       /* so, we flatten all albums below the given one and check whether at least one album… */
                        return FluentIterable.from(asList(album)).transformAndConcat(FLATTENER).anyMatch(new Predicate<Album>() {
 
                                @Override
                                public boolean apply(Album album) {
-                                       return !album.getImages().isEmpty();
+                                       /* …contains any inserted images. */
+                                       return !album.getImages().isEmpty() && FluentIterable.from(album.getImages()).allMatch(new Predicate<Image>() {
+
+                                               @Override
+                                               public boolean apply(Image input) {
+                                                       return input.isInserted();
+                                               }
+                                       });
                                }
                        });
                }
@@ -186,7 +203,6 @@ public class Album implements Fingerprintable {
        public void addAlbum(Album album) {
                checkNotNull(album, "album must not be null");
                checkArgument(album.getSone().equals(sone), "album must belong to the same Sone as this album");
-               checkState((this.parent == null) || (this.parent.equals(album.parent)), "album must not already be set to some other Sone");
                album.setParent(this);
                if (!albums.contains(album)) {
                        albums.add(album);