Merge branch 'release/0.9.1' 0.9.1
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sat, 18 Jul 2015 19:31:14 +0000 (21:31 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sat, 18 Jul 2015 19:31:14 +0000 (21:31 +0200)
pom.xml
src/main/java/net/pterodactylus/sone/core/Core.java
src/main/java/net/pterodactylus/sone/main/ReparseFilter.java [new file with mode: 0644]
src/main/java/net/pterodactylus/sone/main/SonePlugin.java
src/main/java/net/pterodactylus/sone/web/WebInterface.java
src/main/resources/templates/about.html
src/test/java/net/pterodactylus/sone/main/ReparseFilterTest.java [new file with mode: 0644]

diff --git a/pom.xml b/pom.xml
index 048b777..b5a7c8b 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
        <modelVersion>4.0.0</modelVersion>
        <groupId>net.pterodactylus</groupId>
        <artifactId>sone</artifactId>
-       <version>0.9</version>
+       <version>0.9.1</version>
        <dependencies>
                <dependency>
                        <groupId>net.pterodactylus</groupId>
index 1153c0f..95b4bfe 100644 (file)
@@ -641,16 +641,18 @@ public class Core extends AbstractService implements SoneProvider, PostProvider,
                }
                logger.info(String.format("Adding Sone from OwnIdentity: %s", ownIdentity));
                Sone sone = database.newSoneBuilder().local().from(ownIdentity).build();
-               sone.setLatestEdition(fromNullable(tryParse(ownIdentity.getProperty("Sone.LatestEdition"))).or(0L));
+               String property = fromNullable(ownIdentity.getProperty("Sone.LatestEdition")).or("0");
+               sone.setLatestEdition(fromNullable(tryParse(property)).or(0L));
                sone.setClient(new Client("Sone", SonePlugin.VERSION.toString()));
                sone.setKnown(true);
+               loadSone(sone);
+               sone.setStatus(SoneStatus.idle);
+               database.storeSone(sone);
                SoneInserter soneInserter = new SoneInserter(this, eventBus, freenetInterface, ownIdentity.getId());
                eventBus.register(soneInserter);
                synchronized (soneInserters) {
                        soneInserters.put(sone, soneInserter);
                }
-               loadSone(sone);
-               sone.setStatus(SoneStatus.idle);
                soneInserter.start();
                return sone;
        }
@@ -1084,7 +1086,6 @@ public class Core extends AbstractService implements SoneProvider, PostProvider,
                        for (Album album : topLevelAlbums) {
                                sone.getRootAlbum().addAlbum(album);
                        }
-                       database.storeSone(sone);
                        synchronized (soneInserters) {
                                soneInserters.get(sone).setLastInsertFingerprint(lastInsertFingerprint);
                        }
diff --git a/src/main/java/net/pterodactylus/sone/main/ReparseFilter.java b/src/main/java/net/pterodactylus/sone/main/ReparseFilter.java
new file mode 100644 (file)
index 0000000..acad00b
--- /dev/null
@@ -0,0 +1,33 @@
+package net.pterodactylus.sone.main;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.Map;
+
+import net.pterodactylus.util.template.Filter;
+import net.pterodactylus.util.template.Template;
+import net.pterodactylus.util.template.TemplateContext;
+import net.pterodactylus.util.template.TemplateException;
+import net.pterodactylus.util.template.TemplateParser;
+
+/**
+ * Takes the input and parses it as a new {@link Template}.
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+public class ReparseFilter implements Filter {
+
+       @Override
+       public Object format(TemplateContext templateContext, Object data, Map<String, Object> parameters) {
+               Template template = TemplateParser.parse(new StringReader(String.valueOf(data)));
+               StringWriter stringWriter = new StringWriter();
+               try {
+                       template.render(templateContext, stringWriter);
+               } catch (TemplateException e) {
+                       throw new RuntimeException(e);
+               } finally {
+                       return stringWriter.toString();
+               }
+       }
+
+}
index c5620f6..3960479 100644 (file)
@@ -116,12 +116,12 @@ public class SonePlugin implements FredPlugin, FredPluginFCP, FredPluginL10n, Fr
        }
 
        /** The version. */
-       public static final Version VERSION = new Version(0, 9);
+       public static final Version VERSION = new Version(0, 9, 1);
 
        /** The current year at time of release. */
        private static final int YEAR = 2015;
        private static final String SONE_HOMEPAGE = "USK@nwa8lHa271k2QvJ8aa0Ov7IHAV-DFOCFgmDt3X6BpCI,DuQSUZiI~agF8c-6tjsFFGuZ8eICrzWCILB60nT8KKo,AQACAAE/sone/";
-       private static final int LATEST_EDITION = 66;
+       private static final int LATEST_EDITION = 68;
 
        /** The logger. */
        private static final Logger logger = getLogger("Sone.Plugin");
index 1ce8f8e..e813179 100644 (file)
@@ -72,6 +72,7 @@ import net.pterodactylus.sone.data.Sone;
 import net.pterodactylus.sone.freenet.L10nFilter;
 import net.pterodactylus.sone.freenet.wot.Identity;
 import net.pterodactylus.sone.freenet.wot.Trust;
+import net.pterodactylus.sone.main.ReparseFilter;
 import net.pterodactylus.sone.main.SonePlugin;
 import net.pterodactylus.sone.notify.ListNotification;
 import net.pterodactylus.sone.template.AlbumAccessor;
@@ -274,6 +275,7 @@ public class WebInterface {
                templateContextFactory.addFilter("css", new CssClassNameFilter());
                templateContextFactory.addFilter("js", new JavascriptFilter());
                templateContextFactory.addFilter("parse", parserFilter = new ParserFilter(getCore(), templateContextFactory, soneTextParser));
+               templateContextFactory.addFilter("reparse", new ReparseFilter());
                templateContextFactory.addFilter("unknown", new UnknownDateFilter(getL10n(), "View.Sone.Text.UnknownDate"));
                templateContextFactory.addFilter("format", new FormatFilter());
                templateContextFactory.addFilter("sort", new CollectionSortFilter());
index f38db21..dbdb019 100644 (file)
@@ -11,7 +11,7 @@
        <h2><%= Page.About.Homepage.Title|l10n|html></h2>
 
        <p>
-               <%= Page.About.Homepage.Description|l10n|html|replace needle=="{link}" replacement=='<a href="/<% homepage|html>/">'|replace needle=="{/link}" replacement=='</a>'>
+               <%= Page.About.Homepage.Description|l10n|html|replace needle=="{link}" replacement=='<a href="/<% homepage|html>/">'|reparse|replace needle=="{/link}" replacement=='</a>'>
        </p>
 
        <h2><%= Page.About.License.Title|l10n|html></h2>
diff --git a/src/test/java/net/pterodactylus/sone/main/ReparseFilterTest.java b/src/test/java/net/pterodactylus/sone/main/ReparseFilterTest.java
new file mode 100644 (file)
index 0000000..879fe36
--- /dev/null
@@ -0,0 +1,29 @@
+package net.pterodactylus.sone.main;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+import java.util.Collections;
+
+import net.pterodactylus.util.template.TemplateContext;
+
+import org.junit.Test;
+
+/**
+ * Unit test for {@link ReparseFilter}.
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+public class ReparseFilterTest {
+
+       private final ReparseFilter reparseFilter = new ReparseFilter();
+
+       @Test
+       public void filterParsesTemplateCorrectly() {
+               TemplateContext templateContext = new TemplateContext();
+               templateContext.set("bar", "baz");
+               assertThat(reparseFilter.format(templateContext, "foo <% bar>", Collections.<String, Object>emptyMap()),
+                               is((Object) "foo baz"));
+       }
+
+}