- /* store all Sones. */
- int soneId = 0;
- for (Sone sone : localSones) {
- String sonePrefix = "Sone/Sone." + soneId++;
- configuration.getStringValue(sonePrefix + "/ID").setValue(sone.getId());
- configuration.getStringValue(sonePrefix + "/Name").setValue(sone.getName());
- configuration.getLongValue(sonePrefix + "/Time").setValue(sone.getTime());
- configuration.getStringValue(sonePrefix + "/RequestURI").setValue(sone.getRequestUri().toString());
- configuration.getStringValue(sonePrefix + "/InsertURI").setValue(sone.getInsertUri().toString());
- configuration.getLongValue(sonePrefix + "/ModificationCounter").setValue(sone.getModificationCounter());
- Profile profile = sone.getProfile();
- configuration.getStringValue(sonePrefix + "/Profile/FirstName").setValue(profile.getFirstName());
- configuration.getStringValue(sonePrefix + "/Profile/MiddleName").setValue(profile.getMiddleName());
- configuration.getStringValue(sonePrefix + "/Profile/LastName").setValue(profile.getLastName());
- int postId = 0;
- for (Post post : sone.getPosts()) {
- String postPrefix = sonePrefix + "/Post." + postId++;
- configuration.getStringValue(postPrefix + "/ID").setValue(post.getId());
- configuration.getLongValue(postPrefix + "/Time").setValue(post.getTime());
- configuration.getStringValue(postPrefix + "/Text").setValue(post.getText());
+ options.getIntegerOption(optionName).set(configuration.getIntValue("Option/" + optionName).getValue(null));
+ } catch (IllegalArgumentException iae1) {
+ logger.log(Level.WARNING, String.format("Invalid value for %s in configuration, using default.", optionName));
+ }
+ }
+
+ /**
+ * Notifies the core that a new {@link OwnIdentity} was added.
+ *
+ * @param ownIdentityAddedEvent
+ * The event
+ */
+ @Subscribe
+ public void ownIdentityAdded(OwnIdentityAddedEvent ownIdentityAddedEvent) {
+ OwnIdentity ownIdentity = ownIdentityAddedEvent.ownIdentity();
+ logger.log(Level.FINEST, String.format("Adding OwnIdentity: %s", ownIdentity));
+ if (ownIdentity.hasContext("Sone")) {
+ addLocalSone(ownIdentity);
+ }
+ }
+
+ /**
+ * Notifies the core that an {@link OwnIdentity} was removed.
+ *
+ * @param ownIdentityRemovedEvent
+ * The event
+ */
+ @Subscribe
+ public void ownIdentityRemoved(OwnIdentityRemovedEvent ownIdentityRemovedEvent) {
+ OwnIdentity ownIdentity = ownIdentityRemovedEvent.ownIdentity();
+ logger.log(Level.FINEST, String.format("Removing OwnIdentity: %s", ownIdentity));
+ trustedIdentities.removeAll(ownIdentity);
+ }
+
+ /**
+ * Notifies the core that a new {@link Identity} was added.
+ *
+ * @param identityAddedEvent
+ * The event
+ */
+ @Subscribe
+ public void identityAdded(IdentityAddedEvent identityAddedEvent) {
+ Identity identity = identityAddedEvent.identity();
+ logger.log(Level.FINEST, String.format("Adding Identity: %s", identity));
+ trustedIdentities.put(identityAddedEvent.ownIdentity(), identity);
+ addRemoteSone(identity);
+ }
+
+ /**
+ * Notifies the core that an {@link Identity} was updated.
+ *
+ * @param identityUpdatedEvent
+ * The event
+ */
+ @Subscribe
+ public void identityUpdated(IdentityUpdatedEvent identityUpdatedEvent) {
+ final Identity identity = identityUpdatedEvent.identity();
+ soneDownloaders.execute(new Runnable() {
+
+ @Override
+ @SuppressWarnings("synthetic-access")
+ public void run() {
+ Optional<Sone> sone = getRemoteSone(identity.getId());
+ sone.get().modify().setLatestEdition(Numbers.safeParseLong(identity.getProperty("Sone.LatestEdition"), sone.get().getLatestEdition())).update();
+ soneDownloader.addSone(sone.get());
+ soneDownloader.fetchSone(sone.get());
+ }
+ });
+ }
+
+ /**
+ * Notifies the core that an {@link Identity} was removed.
+ *
+ * @param identityRemovedEvent
+ * The event
+ */
+ @Subscribe
+ public void identityRemoved(IdentityRemovedEvent identityRemovedEvent) {
+ OwnIdentity ownIdentity = identityRemovedEvent.ownIdentity();
+ Identity identity = identityRemovedEvent.identity();
+ trustedIdentities.remove(ownIdentity, identity);
+ boolean foundIdentity = false;
+ for (Entry<OwnIdentity, Collection<Identity>> trustedIdentity : trustedIdentities.asMap().entrySet()) {
+ if (trustedIdentity.getKey().equals(ownIdentity)) {
+ continue;
+ }
+ if (trustedIdentity.getValue().contains(identity)) {
+ foundIdentity = true;
+ }
+ }
+ if (foundIdentity) {
+ /* some local identity still trusts this identity, don’t remove. */
+ return;
+ }
+ Optional<Sone> sone = getSone(identity.getId());
+ if (!sone.isPresent()) {
+ /* TODO - we don’t have the Sone anymore. should this happen? */
+ return;
+ }
+ database.removePosts(sone.get());
+ for (Post post : sone.get().getPosts()) {
+ eventBus.post(new PostRemovedEvent(post));
+ }
+ database.removePostReplies(sone.get());
+ for (PostReply reply : sone.get().getReplies()) {
+ eventBus.post(new PostReplyRemovedEvent(reply));
+ }
+ synchronized (sones) {
+ sones.remove(identity.getId());
+ }
+ eventBus.post(new SoneRemovedEvent(sone.get()));
+ }
+
+ /**
+ * Deletes the temporary image.
+ *
+ * @param imageInsertFinishedEvent
+ * The event
+ */
+ @Subscribe
+ public void imageInsertFinished(ImageInsertFinishedEvent imageInsertFinishedEvent) {
+ logger.log(Level.WARNING, String.format("Image insert finished for %s: %s", imageInsertFinishedEvent.image(), imageInsertFinishedEvent.resultingUri()));
+ imageInsertFinishedEvent.image().modify().setKey(imageInsertFinishedEvent.resultingUri().toString()).update();
+ deleteTemporaryImage(imageInsertFinishedEvent.image().getId());
+ touchConfiguration();
+ }
+
+ public Optional<PostCreated> postCreated() {
+ return Optional.<PostCreated>of(new PostCreated() {
+ @Override
+ public void postCreated(final Post post) {
+ if (post.isKnown()) {
+ return;