X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FCore.java;h=9ccaa799868f05189150c5162fab46c01dcd9d9f;hp=fa98bbb3126e90a6003221b96783ebf7a2c1681a;hb=10fa1478fef15624a873c0878ed017603742bcfe;hpb=8f02544d31f323ae9053dd9a11a99eacd8cf5bcd diff --git a/src/main/java/net/pterodactylus/sone/core/Core.java b/src/main/java/net/pterodactylus/sone/core/Core.java index fa98bbb..9ccaa79 100644 --- a/src/main/java/net/pterodactylus/sone/core/Core.java +++ b/src/main/java/net/pterodactylus/sone/core/Core.java @@ -347,12 +347,13 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, } /** - * Returns all Sones, remote and local. - * - * @return All Sones + * {@inheritDocs} */ - public Set getSones() { - return new HashSet(sones.values()); + @Override + public Collection getSones() { + synchronized (sones) { + return Collections.unmodifiableCollection(sones.values()); + } } /** @@ -365,31 +366,16 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, * Sone */ @Override - public Sone getSone(String id) { + public Optional getSone(String id) { synchronized (sones) { - return sones.get(id); + return Optional.fromNullable(sones.get(id)); } } /** - * Checks whether the core knows a Sone with the given ID. - * - * @param id - * The ID of the Sone - * @return {@code true} if there is a Sone with the given ID, {@code false} - * otherwise - */ - public boolean hasSone(String id) { - synchronized (sones) { - return sones.containsKey(id); - } - } - - /** - * Returns all local Sones. - * - * @return All local Sones + * {@inheritDocs} */ + @Override public Collection getLocalSones() { synchronized (sones) { return Collections2.filter(sones.values(), new Predicate() { @@ -428,10 +414,9 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, } /** - * Returns all remote Sones. - * - * @return All remote Sones + * {@inheritDocs} */ + @Override public Collection getRemoteSones() { synchronized (sones) { return Collections2.filter(sones.values(), new Predicate() { @@ -527,6 +512,14 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, } /** + * {@inheritDocs} + */ + @Override + public Collection getPosts(String soneId) { + return postDatabase.getPosts(soneId); + } + + /** * {@inheritDoc} */ @Override @@ -537,11 +530,12 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, @Override public boolean apply(Post post) { - return (post.getRecipient() != null) && (post.getRecipient().getId().equals(recipientId)); + return recipientId.equals(post.getRecipientId().orNull()); } }); } } + /** * Returns a post reply builder. * @@ -801,6 +795,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, sone.setClient(new Client("Sone", SonePlugin.VERSION.toString())); sone.setKnown(true); /* TODO - load posts ’n stuff */ + trustedIdentities.put(ownIdentity, Collections.synchronizedSet(new HashSet())); sones.put(ownIdentity.getId(), sone); final SoneInserter soneInserter = new SoneInserter(this, eventBus, freenetInterface, sone); soneInserters.put(sone, soneInserter); @@ -897,16 +892,16 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, if (!soneFollowingTimes.containsKey(soneId)) { long now = System.currentTimeMillis(); soneFollowingTimes.put(soneId, now); - Sone followedSone = getSone(soneId); - if (followedSone == null) { + Optional followedSone = getSone(soneId); + if (!followedSone.isPresent()) { return; } - for (Post post : followedSone.getPosts()) { + for (Post post : followedSone.get().getPosts()) { if (post.getTime() < now) { markPostKnown(post); } } - for (PostReply reply : followedSone.getReplies()) { + for (PostReply reply : followedSone.get().getReplies()) { if (reply.getTime() < now) { markReplyKnown(reply); } @@ -1031,22 +1026,22 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, * of the age of the given Sone */ public void updateSone(Sone sone, boolean soneRescueMode) { - if (hasSone(sone.getId())) { - Sone storedSone = getSone(sone.getId()); - if (!soneRescueMode && !(sone.getTime() > storedSone.getTime())) { + Optional storedSone = getSone(sone.getId()); + if (storedSone.isPresent()) { + if (!soneRescueMode && !(sone.getTime() > storedSone.get().getTime())) { logger.log(Level.FINE, String.format("Downloaded Sone %s is not newer than stored Sone %s.", sone, storedSone)); return; } synchronized (posts) { if (!soneRescueMode) { - for (Post post : storedSone.getPosts()) { + for (Post post : storedSone.get().getPosts()) { posts.remove(post.getId()); if (!sone.getPosts().contains(post)) { eventBus.post(new PostRemovedEvent(post)); } } } - List storedPosts = storedSone.getPosts(); + List storedPosts = storedSone.get().getPosts(); synchronized (knownPosts) { for (Post post : sone.getPosts()) { post.setKnown(knownPosts.contains(post.getId())); @@ -1064,14 +1059,14 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, } synchronized (replies) { if (!soneRescueMode) { - for (PostReply reply : storedSone.getReplies()) { + for (PostReply reply : storedSone.get().getReplies()) { replies.remove(reply.getId()); if (!sone.getReplies().contains(reply)) { eventBus.post(new PostReplyRemovedEvent(reply)); } } } - Set storedReplies = storedSone.getReplies(); + Set storedReplies = storedSone.get().getReplies(); synchronized (knownReplies) { for (PostReply reply : sone.getReplies()) { reply.setKnown(knownReplies.contains(reply.getId())); @@ -1089,7 +1084,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, } synchronized (albums) { synchronized (images) { - for (Album album : storedSone.getAlbums()) { + for (Album album : storedSone.get().getAlbums()) { albums.remove(album.getId()); for (Image image : album.getImages()) { images.remove(image.getId()); @@ -1104,6 +1099,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, } } synchronized (sones) { + sone.setOptions(storedSone.get().getOptions()); sones.put(sone.getId(), sone); } } @@ -1374,11 +1370,21 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, knownSones.add(friend); } } + synchronized (this.posts) { + for (Post post : posts) { + this.posts.put(post.getId(), post); + } + } synchronized (knownPosts) { for (Post post : posts) { knownPosts.add(post.getId()); } } + synchronized (this.replies) { + for (PostReply postReply : replies) { + this.replies.put(postReply.getId(), postReply); + } + } synchronized (knownReplies) { for (PostReply reply : replies) { knownReplies.add(reply.getId()); @@ -1426,7 +1432,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, * The text of the post * @return The created post */ - public Post createPost(Sone sone, Sone recipient, String text) { + public Post createPost(Sone sone, Optional recipient, String text) { return createPost(sone, recipient, System.currentTimeMillis(), text); } @@ -1444,7 +1450,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, * The text of the post * @return The created post */ - public Post createPost(Sone sone, Sone recipient, long time, String text) { + public Post createPost(Sone sone, Optional recipient, long time, String text) { checkNotNull(text, "text must not be null"); checkArgument(text.trim().length() > 0, "text must not be empty"); if (!sone.isLocal()) { @@ -1453,8 +1459,8 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, } PostBuilder postBuilder = postBuilderFactory.newPostBuilder(); postBuilder.from(sone.getId()).randomId().withTime(time).withText(text.trim()); - if (recipient != null) { - postBuilder.to(recipient.getId()); + if (recipient.isPresent()) { + postBuilder.to(recipient.get().getId()); } final Post post = postBuilder.build(); synchronized (posts) { @@ -1908,7 +1914,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, for (Post post : sone.getPosts()) { String postPrefix = sonePrefix + "/Posts/" + postCounter++; configuration.getStringValue(postPrefix + "/ID").setValue(post.getId()); - configuration.getStringValue(postPrefix + "/Recipient").setValue((post.getRecipient() != null) ? post.getRecipient().getId() : null); + configuration.getStringValue(postPrefix + "/Recipient").setValue(post.getRecipientId().orNull()); configuration.getLongValue(postPrefix + "/Time").setValue(post.getTime()); configuration.getStringValue(postPrefix + "/Text").setValue(post.getText()); } @@ -2087,7 +2093,6 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, /** * Loads the configuration. */ - @SuppressWarnings("unchecked") private void loadConfiguration() { /* create options. */ options.addIntegerOption("InsertionDelay", new DefaultOption(60, new IntegerRangePredicate(0, Integer.MAX_VALUE), new OptionWatcher() { @@ -2156,13 +2161,8 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, break; } long time = configuration.getLongValue("SoneFollowingTimes/" + soneCounter + "/Time").getValue(Long.MAX_VALUE); - Sone followedSone = getSone(soneId); - if (followedSone == null) { - logger.log(Level.WARNING, String.format("Ignoring Sone with invalid ID: %s", soneId)); - } else { - synchronized (soneFollowingTimes) { - soneFollowingTimes.put(soneId, time); - } + synchronized (soneFollowingTimes) { + soneFollowingTimes.put(soneId, time); } ++soneCounter; } @@ -2231,7 +2231,6 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, OwnIdentity ownIdentity = ownIdentityAddedEvent.ownIdentity(); logger.log(Level.FINEST, String.format("Adding OwnIdentity: %s", ownIdentity)); if (ownIdentity.hasContext("Sone")) { - trustedIdentities.put(ownIdentity, Collections.synchronizedSet(new HashSet())); addLocalSone(ownIdentity); } } @@ -2310,14 +2309,14 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, /* some local identity still trusts this identity, don’t remove. */ return; } - Sone sone = getSone(identity.getId()); - if (sone == null) { + Optional sone = getSone(identity.getId()); + if (!sone.isPresent()) { /* TODO - we don’t have the Sone anymore. should this happen? */ return; } synchronized (posts) { synchronized (knownPosts) { - for (Post post : sone.getPosts()) { + for (Post post : sone.get().getPosts()) { posts.remove(post.getId()); eventBus.post(new PostRemovedEvent(post)); } @@ -2325,7 +2324,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, } synchronized (replies) { synchronized (knownReplies) { - for (PostReply reply : sone.getReplies()) { + for (PostReply reply : sone.get().getReplies()) { replies.remove(reply.getId()); eventBus.post(new PostReplyRemovedEvent(reply)); } @@ -2334,7 +2333,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, synchronized (sones) { sones.remove(identity.getId()); } - eventBus.post(new SoneRemovedEvent(sone)); + eventBus.post(new SoneRemovedEvent(sone.get())); } /**