Terminate the list of Sones as well.
[Sone.git] / src / main / java / net / pterodactylus / sone / core / Core.java
index 00dce87..2b0c0bf 100644 (file)
@@ -302,7 +302,12 @@ public class Core extends AbstractService {
                                        if (replyId == null) {
                                                break;
                                        }
-                                       Sone replySone = soneCache.get(configuration.getStringValue(replyPrefix + "/Sone").getValue(null));
+                                       Sone replySone = soneCache.get(configuration.getStringValue(replyPrefix + "/Sone/ID").getValue(null));
+                                       String replySoneKey = configuration.getStringValue(replyPrefix + "/Sone/Key").getValue(null);
+                                       String replySoneName = configuration.getStringValue(replyPrefix + "/Sone/Name").getValue(null);
+                                       if (replySone instanceof SoneShell) {
+                                               ((SoneShell) replySone).setRequestUri(new FreenetURI(replySoneKey)).setName(replySoneName);
+                                       }
                                        Post replyPost = postCache.get(configuration.getStringValue(replyPrefix + "/Post").getValue(null));
                                        long replyTime = configuration.getLongValue(replyPrefix + "/Time").getValue(null);
                                        String replyText = configuration.getStringValue(replyPrefix + "/Text").getValue(null);
@@ -347,16 +352,26 @@ public class Core extends AbstractService {
                                        configuration.getLongValue(postPrefix + "/Time").setValue(post.getTime());
                                        configuration.getStringValue(postPrefix + "/Text").setValue(post.getText());
                                }
+                               /* write null ID as terminator. */
+                               configuration.getStringValue(sonePrefix + "/Post." + postId + "/ID").setValue(null);
+
                                int replyId = 0;
                                for (Reply reply : sone.getReplies()) {
                                        String replyPrefix = sonePrefix + "/Reply." + replyId++;
                                        configuration.getStringValue(replyPrefix + "/ID").setValue(reply.getId());
-                                       configuration.getStringValue(replyPrefix + "/Sone").setValue(reply.getSone().getId());
+                                       configuration.getStringValue(replyPrefix + "/Sone/ID").setValue(reply.getSone().getId());
+                                       configuration.getStringValue(replyPrefix + "/Sone/Key").setValue(reply.getSone().getRequestUri().toString());
+                                       configuration.getStringValue(replyPrefix + "/Sone/Name").setValue(reply.getSone().getName());
                                        configuration.getStringValue(replyPrefix + "/Post").setValue(reply.getPost().getId());
                                        configuration.getLongValue(replyPrefix + "/Time").setValue(reply.getTime());
                                        configuration.getStringValue(replyPrefix + "/Text").setValue(reply.getText());
                                }
+                               /* write null ID as terminator. */
+                               configuration.getStringValue(sonePrefix + "/Reply." + replyId + "/ID").setValue(null);
                        }
+                       /* write null ID as terminator. */
+                       configuration.getStringValue("Sone/Sone." + soneId + "/ID").setValue(null);
+
                } catch (ConfigurationException ce1) {
                        logger.log(Level.WARNING, "Could not store configuration!", ce1);
                }