X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FSone.java;h=2e23ed11118472950c26d77b8b93f4a8cfa1613f;hb=c8f518f638aa16cf37145561b709d28252de213a;hp=2efb90d9185be90a53c2ebeb674f3e01a6de46d7;hpb=7105c9338f9c7ec88da8044645482ecc09458cd0;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/data/Sone.java b/src/main/java/net/pterodactylus/sone/data/Sone.java index 2efb90d..2e23ed1 100644 --- a/src/main/java/net/pterodactylus/sone/data/Sone.java +++ b/src/main/java/net/pterodactylus/sone/data/Sone.java @@ -28,6 +28,7 @@ import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; +import net.pterodactylus.sone.template.SoneAccessor; import net.pterodactylus.util.logging.Logging; import freenet.keys.FreenetURI; @@ -67,11 +68,17 @@ public class Sone { private final Set friendSones = new HashSet(); /** All posts. */ - private final List posts = new ArrayList(); + private final Set posts = new HashSet(); /** All replies. */ private final Set replies = new HashSet(); + /** The IDs of all blocked Sones. */ + private final Set blockedSoneIds = new HashSet(); + + /** The IDs of all liked posts. */ + private final Set likedPostIds = new HashSet(); + /** Modification count. */ private volatile long modificationCounter = 0; @@ -211,8 +218,20 @@ public class Sone { * * @return The friend Sones of this Sone */ - public Set getFriends() { - return Collections.unmodifiableSet(friendSones); + public List getFriends() { + List friends = new ArrayList(friendSones); + Collections.sort(friends, new Comparator() { + + @Override + public int compare(Sone leftSone, Sone rightSone) { + int diff = SoneAccessor.getNiceName(leftSone).compareTo(SoneAccessor.getNiceName(rightSone)); + if (diff != 0) { + return diff; + } + return (int) Math.max(Integer.MIN_VALUE, Math.min(Integer.MAX_VALUE, rightSone.getTime() - leftSone.getTime())); + } + }); + return friends; } /** @@ -222,10 +241,9 @@ public class Sone { * The new (and only) friends of this Sone * @return This Sone (for method chaining) */ - public synchronized Sone setFriends(Collection friends) { + public Sone setFriends(Collection friends) { friendSones.clear(); friendSones.addAll(friends); - modificationCounter++; return this; } @@ -248,9 +266,9 @@ public class Sone { * The friend Sone to add * @return This Sone (for method chaining) */ - public synchronized Sone addFriend(Sone friendSone) { - if (!friendSone.equals(this) && friendSones.add(friendSone)) { - modificationCounter++; + public Sone addFriend(Sone friendSone) { + if (!friendSone.equals(this)) { + friendSones.add(friendSone); } return this; } @@ -262,10 +280,8 @@ public class Sone { * The friend Sone to remove * @return This Sone (for method chaining) */ - public synchronized Sone removeFriend(Sone friendSone) { - if (friendSones.remove(friendSone)) { - modificationCounter++; - } + public Sone removeFriend(Sone friendSone) { + friendSones.remove(friendSone); return this; } @@ -377,6 +393,115 @@ public class Sone { } /** + * Returns the IDs of all blocked Sones. These Sones will not propagated + * using the “known Sones” mechanism. + * + * @return The IDs of all blocked Sones + */ + public Set getBlockedSoneIds() { + return Collections.unmodifiableSet(blockedSoneIds); + } + + /** + * Returns whether the given Sone ID is blocked. + * + * @param soneId + * The Sone ID to check + * @return {@code true} if the given Sone ID is blocked, {@code false} + * otherwise + */ + public boolean isSoneBlocked(String soneId) { + return blockedSoneIds.contains(soneId); + } + + /** + * Adds the given ID to the list of blocked IDs. + * + * @param soneId + * The Sone ID to block + */ + public synchronized void addBlockedSoneId(String soneId) { + if (blockedSoneIds.add(soneId)) { + modificationCounter++; + } + } + + /** + * Removes the given ID from the list of blocked IDs. + * + * @param soneId + * The Sone ID to unblock + */ + public synchronized void removeBlockedSoneId(String soneId) { + if (blockedSoneIds.remove(soneId)) { + modificationCounter++; + } + } + + /** + * Returns the IDs of all liked posts. + * + * @return All liked posts’ IDs + */ + public Set getLikedPostIds() { + return Collections.unmodifiableSet(likedPostIds); + } + + /** + * Sets the IDs of all liked posts. + * + * @param likedPostIds + * All liked posts’ IDs + * @return This Sone (for method chaining) + */ + public synchronized Sone setLikePostIds(Set likedPostIds) { + this.likedPostIds.clear(); + this.likedPostIds.addAll(likedPostIds); + modificationCounter++; + return this; + } + + /** + * Checks whether the given post ID is liked by this Sone. + * + * @param postId + * The ID of the post + * @return {@code true} if this Sone likes the given post, {@code false} + * otherwise + */ + public boolean isLikedPostId(String postId) { + return likedPostIds.contains(postId); + } + + /** + * Adds the given post ID to the list of posts this Sone likes. + * + * @param postId + * The ID of the post + * @return This Sone (for method chaining) + */ + public synchronized Sone addLikedPostId(String postId) { + if (likedPostIds.add(postId)) { + modificationCounter++; + } + return this; + } + + /** + * Removes the given post ID from the list of posts this Sone likes. + * + * @param postId + * The ID of the post + * @return This Sone (for method chaining) + */ + public synchronized Sone removeLikedPostId(String postId) { + if (likedPostIds.remove(postId)) { + modificationCounter++; + } + return this; + } + + /** * Returns the modification counter. * * @return The modification counter