X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FCore.java;h=c85d0e729017f61975956647258975d3500db3d6;hb=94088d808dfca4bf5464ee4f3b099175fb4c058a;hp=0b9b08f8a47d0297b37e5a6f5cc577e6c31afb5c;hpb=9d32a0f70e14a764946ae29edcf07304f9e5f75e;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/core/Core.java b/src/main/java/net/pterodactylus/sone/core/Core.java index 0b9b08f..c85d0e7 100644 --- a/src/main/java/net/pterodactylus/sone/core/Core.java +++ b/src/main/java/net/pterodactylus/sone/core/Core.java @@ -19,6 +19,8 @@ package net.pterodactylus.sone.core; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Predicates.not; +import static net.pterodactylus.sone.data.Sone.LOCAL_SONE_FILTER; import java.net.MalformedURLException; import java.util.ArrayList; @@ -37,8 +39,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import net.pterodactylus.sone.core.Options.DefaultOption; -import net.pterodactylus.sone.core.Options.Option; -import net.pterodactylus.sone.core.Options.OptionWatcher; +import net.pterodactylus.sone.core.SoneInserter.SetInsertionDelay; import net.pterodactylus.sone.core.event.ImageInsertFinishedEvent; import net.pterodactylus.sone.core.event.MarkPostKnownEvent; import net.pterodactylus.sone.core.event.MarkPostReplyKnownEvent; @@ -62,6 +63,7 @@ import net.pterodactylus.sone.data.Reply; import net.pterodactylus.sone.data.Sone; import net.pterodactylus.sone.data.Sone.ShowCustomAvatars; import net.pterodactylus.sone.data.Sone.SoneStatus; +import net.pterodactylus.sone.data.SoneImpl; import net.pterodactylus.sone.data.TemporaryImage; import net.pterodactylus.sone.database.Database; import net.pterodactylus.sone.database.DatabaseException; @@ -71,7 +73,6 @@ import net.pterodactylus.sone.database.PostReplyBuilder; import net.pterodactylus.sone.database.PostReplyProvider; import net.pterodactylus.sone.database.SoneProvider; import net.pterodactylus.sone.fcp.FcpInterface; -import net.pterodactylus.sone.fcp.FcpInterface.FullAccessRequired; import net.pterodactylus.sone.freenet.wot.Identity; import net.pterodactylus.sone.freenet.wot.IdentityManager; import net.pterodactylus.sone.freenet.wot.OwnIdentity; @@ -90,7 +91,6 @@ import net.pterodactylus.util.service.AbstractService; import net.pterodactylus.util.thread.NamedThreadFactory; import com.google.common.base.Optional; -import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.FluentIterable; import com.google.common.collect.HashMultimap; @@ -126,7 +126,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, private final EventBus eventBus; /** The configuration. */ - private Configuration configuration; + private final Configuration configuration; /** Whether we’re currently saving the configuration. */ private boolean storingConfiguration = false; @@ -240,18 +240,6 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, } /** - * Sets the configuration to use. This will automatically save the current - * configuration to the given configuration. - * - * @param configuration - * The new configuration to use - */ - public void setConfiguration(Configuration configuration) { - this.configuration = configuration; - touchConfiguration(); - } - - /** * Returns the options used by the core. * * @return The options of the core @@ -354,13 +342,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, @Override public Collection getLocalSones() { synchronized (sones) { - return FluentIterable.from(sones.values()).filter(new Predicate() { - - @Override - public boolean apply(Sone sone) { - return sone.isLocal(); - } - }).toSet(); + return FluentIterable.from(sones.values()).filter(LOCAL_SONE_FILTER).toSet(); } } @@ -378,11 +360,11 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, synchronized (sones) { Sone sone = sones.get(id); if ((sone == null) && create) { - sone = new Sone(id, true); + sone = new SoneImpl(id, true); sones.put(id, sone); } if ((sone != null) && !sone.isLocal()) { - sone = new Sone(id, true); + sone = new SoneImpl(id, true); sones.put(id, sone); } return sone; @@ -395,13 +377,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, @Override public Collection getRemoteSones() { synchronized (sones) { - return FluentIterable.from(sones.values()).filter(new Predicate() { - - @Override - public boolean apply(Sone sone) { - return !sone.isLocal(); - } - }).toSet(); + return FluentIterable.from(sones.values()).filter(not(LOCAL_SONE_FILTER)).toSet(); } } @@ -419,7 +395,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, synchronized (sones) { Sone sone = sones.get(id); if ((sone == null) && create && (id != null) && (id.length() == 43)) { - sone = new Sone(id, false); + sone = new SoneImpl(id, false); sones.put(id, sone); } return sone; @@ -435,7 +411,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, * {@code false} otherwise */ public boolean isModifiedSone(Sone sone) { - return (soneInserters.containsKey(sone)) ? soneInserters.get(sone).isModified() : false; + return soneInserters.containsKey(sone) && soneInserters.get(sone).isModified(); } /** @@ -823,15 +799,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, } } soneDownloader.addSone(sone); - soneDownloaders.execute(new Runnable() { - - @Override - @SuppressWarnings("synthetic-access") - public void run() { - soneDownloader.fetchSone(sone, sone.getRequestUri()); - } - - }); + soneDownloaders.execute(soneDownloader.new FetchSone(sone)); return sone; } } @@ -993,10 +961,12 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, return; } /* find removed posts. */ + Collection removedPosts = new ArrayList(); + Collection newPosts = new ArrayList(); Collection existingPosts = database.getPosts(sone.getId()); for (Post oldPost : existingPosts) { if (!sone.getPosts().contains(oldPost)) { - eventBus.post(new PostRemovedEvent(oldPost)); + removedPosts.add(oldPost); } } /* find new posts. */ @@ -1007,15 +977,17 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, if (newPost.getTime() < getSoneFollowingTime(sone)) { newPost.setKnown(true); } else if (!newPost.isKnown()) { - eventBus.post(new NewPostFoundEvent(newPost)); + newPosts.add(newPost); } } /* store posts. */ database.storePosts(sone, sone.getPosts()); + Collection newPostReplies = new ArrayList(); + Collection removedPostReplies = new ArrayList(); if (!soneRescueMode) { for (PostReply reply : storedSone.get().getReplies()) { if (!sone.getReplies().contains(reply)) { - eventBus.post(new PostReplyRemovedEvent(reply)); + removedPostReplies.add(reply); } } } @@ -1027,7 +999,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, if (reply.getTime() < getSoneFollowingTime(sone)) { reply.setKnown(true); } else if (!reply.isKnown()) { - eventBus.post(new NewPostReplyFoundEvent(reply)); + newPostReplies.add(reply); } } database.storePostReplies(sone, sone.getReplies()); @@ -1037,6 +1009,18 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, database.removeImage(image); } } + for (Post removedPost : removedPosts) { + eventBus.post(new PostRemovedEvent(removedPost)); + } + for (Post newPost : newPosts) { + eventBus.post(new NewPostFoundEvent(newPost)); + } + for (PostReply removedPostReply : removedPostReplies) { + eventBus.post(new PostReplyRemovedEvent(removedPostReply)); + } + for (PostReply newPostReply : newPostReplies) { + eventBus.post(new NewPostReplyFoundEvent(newPostReply)); + } for (Album album : sone.getRootAlbum().getAlbums()) { database.storeAlbum(album); for (Image image : album.getImages()) { @@ -1762,7 +1746,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, synchronized (sones) { for (Entry soneInserter : soneInserters.entrySet()) { soneInserter.getValue().stop(); - saveSone(soneInserter.getKey()); + saveSone(getLocalSone(soneInserter.getKey().getId(), false)); } } saveConfiguration(); @@ -1994,14 +1978,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, */ private void loadConfiguration() { /* create options. */ - options.addIntegerOption("InsertionDelay", new DefaultOption(60, new IntegerRangePredicate(0, Integer.MAX_VALUE), new OptionWatcher() { - - @Override - public void optionChanged(Option option, Integer oldValue, Integer newValue) { - SoneInserter.setInsertionDelay(newValue); - } - - })); + options.addIntegerOption("InsertionDelay", new DefaultOption(60, new IntegerRangePredicate(0, Integer.MAX_VALUE), new SetInsertionDelay())); options.addIntegerOption("PostsPerPage", new DefaultOption(10, new IntegerRangePredicate(1, Integer.MAX_VALUE))); options.addIntegerOption("ImagesPerPage", new DefaultOption(9, new IntegerRangePredicate(1, Integer.MAX_VALUE))); options.addIntegerOption("CharactersPerPost", new DefaultOption(400, Predicates. or(new IntegerRangePredicate(50, Integer.MAX_VALUE), Predicates.equalTo(-1)))); @@ -2010,23 +1987,8 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, options.addIntegerOption("PositiveTrust", new DefaultOption(75, new IntegerRangePredicate(0, 100))); options.addIntegerOption("NegativeTrust", new DefaultOption(-25, new IntegerRangePredicate(-100, 100))); options.addStringOption("TrustComment", new DefaultOption("Set from Sone Web Interface")); - options.addBooleanOption("ActivateFcpInterface", new DefaultOption(false, new OptionWatcher() { - - @Override - @SuppressWarnings("synthetic-access") - public void optionChanged(Option option, Boolean oldValue, Boolean newValue) { - fcpInterface.setActive(newValue); - } - })); - options.addIntegerOption("FcpFullAccessRequired", new DefaultOption(2, new OptionWatcher() { - - @Override - @SuppressWarnings("synthetic-access") - public void optionChanged(Option option, Integer oldValue, Integer newValue) { - fcpInterface.setFullAccessRequired(FullAccessRequired.values()[newValue]); - } - - })); + options.addBooleanOption("ActivateFcpInterface", new DefaultOption(false, fcpInterface.new SetActive())); + options.addIntegerOption("FcpFullAccessRequired", new DefaultOption(2, fcpInterface.new SetFullAccessRequired())); loadConfigurationValue("InsertionDelay"); loadConfigurationValue("PostsPerPage");