X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FSone.java;h=901d676bc9b55df1b5f3774f85da8bc0c1ffad85;hp=aad50e55032f5b21bdaffcbbf47f06b39da6c202;hb=90179865f79eae0c8cf5726c21dab488fcd5be45;hpb=bde1cf20c781b7c33934e58cb0beafd1cea5e43b diff --git a/src/main/java/net/pterodactylus/sone/data/Sone.java b/src/main/java/net/pterodactylus/sone/data/Sone.java index aad50e5..901d676 100644 --- a/src/main/java/net/pterodactylus/sone/data/Sone.java +++ b/src/main/java/net/pterodactylus/sone/data/Sone.java @@ -47,6 +47,30 @@ import freenet.keys.FreenetURI; */ public class Sone implements Fingerprintable, Comparable { + /** + * The possible values for the “show custom avatars” option. + * + * @author David ‘Bombe’ Roden + */ + public static enum ShowCustomAvatars { + + /** Never show custom avatars. */ + NEVER, + + /** Only show custom avatars of followed Sones. */ + FOLLOWED, + + /** Only show custom avatars of Sones you manually trust. */ + MANUALLY_TRUSTED, + + /** Only show custom avatars of automatically trusted Sones. */ + TRUSTED, + + /** Always show custom avatars. */ + ALWAYS, + + } + /** comparator that sorts Sones by their nice name. */ public static final Comparator NICE_NAME_COMPARATOR = new Comparator() { @@ -84,6 +108,18 @@ public class Sone implements Fingerprintable, Comparable { } }; + /** Comparator that sorts Sones by number of images (descending). */ + public static final Comparator IMAGE_COUNT_COMPARATOR = new Comparator() { + + /** + * {@inheritDoc} + */ + @Override + public int compare(Sone leftSone, Sone rightSone) { + return rightSone.getAllImages().size() - leftSone.getAllImages().size(); + } + }; + /** Filter to remove Sones that have not been downloaded. */ public static final Filter EMPTY_SONE_FILTER = new Filter() { @@ -103,6 +139,15 @@ public class Sone implements Fingerprintable, Comparable { }; + /** Filter that matches Sones that have at least one album. */ + public static final Filter HAS_ALBUM_FILTER = new Filter() { + + @Override + public boolean filterObject(Sone sone) { + return !sone.getAlbums().isEmpty(); + } + }; + /** The logger. */ private static final Logger logger = Logging.getLogger(Sone.class); @@ -126,7 +171,7 @@ public class Sone implements Fingerprintable, Comparable { private volatile long time; /** The profile of this Sone. */ - private volatile Profile profile = new Profile(); + private volatile Profile profile = new Profile(this); /** The client used by the Sone. */ private volatile Client client; @@ -138,7 +183,7 @@ public class Sone implements Fingerprintable, Comparable { private final Set posts = Collections.synchronizedSet(new HashSet()); /** All replies. */ - private final Set replies = Collections.synchronizedSet(new HashSet()); + private final Set replies = Collections.synchronizedSet(new HashSet()); /** The IDs of all liked posts. */ private final Set likedPostIds = Collections.synchronizedSet(new HashSet()); @@ -368,19 +413,6 @@ public class Sone implements Fingerprintable, Comparable { } /** - * Sets all friends of this Sone at once. - * - * @param friends - * The new (and only) friends of this Sone - * @return This Sone (for method chaining) - */ - public Sone setFriends(Collection friends) { - friendSones.clear(); - friendSones.addAll(friends); - return this; - } - - /** * Returns whether this Sone has the given Sone as a friend Sone. * * @param friendSoneId @@ -477,7 +509,7 @@ public class Sone implements Fingerprintable, Comparable { * * @return All replies this Sone made */ - public synchronized Set getReplies() { + public synchronized Set getReplies() { return Collections.unmodifiableSet(replies); } @@ -488,7 +520,7 @@ public class Sone implements Fingerprintable, Comparable { * The new (and only) replies of this Sone * @return This Sone (for method chaining) */ - public synchronized Sone setReplies(Collection replies) { + public synchronized Sone setReplies(Collection replies) { this.replies.clear(); this.replies.addAll(replies); return this; @@ -501,7 +533,7 @@ public class Sone implements Fingerprintable, Comparable { * @param reply * The reply to add */ - public synchronized void addReply(Reply reply) { + public synchronized void addReply(PostReply reply) { if (reply.getSone().equals(this)) { replies.add(reply); } @@ -513,7 +545,7 @@ public class Sone implements Fingerprintable, Comparable { * @param reply * The reply to remove */ - public synchronized void removeReply(Reply reply) { + public synchronized void removeReply(PostReply reply) { if (reply.getSone().equals(this)) { replies.remove(reply); } @@ -666,6 +698,20 @@ public class Sone implements Fingerprintable, Comparable { } /** + * Returns all images of a Sone. Images of a album are inserted into this + * list before images of all child albums. + * + * @return The list of all images + */ + public List getAllImages() { + List allImages = new ArrayList(); + for (Album album : getAllAlbums()) { + allImages.addAll(album.getImages()); + } + return allImages; + } + + /** * Adds an album to this Sone. * * @param album @@ -768,10 +814,10 @@ public class Sone implements Fingerprintable, Comparable { } fingerprint.append(")"); - List replies = new ArrayList(getReplies()); + List replies = new ArrayList(getReplies()); Collections.sort(replies, Reply.TIME_COMPARATOR); fingerprint.append("Replies("); - for (Reply reply : replies) { + for (PostReply reply : replies) { fingerprint.append("Reply(").append(reply.getId()).append(')'); } fingerprint.append(')');