Render templates in a thread-safe way.
[Sone.git] / src / main / java / net / pterodactylus / sone / web / SoneTemplatePage.java
index 9a8bd9b..dc41865 100644 (file)
@@ -21,8 +21,10 @@ import java.util.Arrays;
 import java.util.Collection;
 
 import net.pterodactylus.sone.data.Sone;
+import net.pterodactylus.sone.main.SonePlugin;
 import net.pterodactylus.sone.web.page.Page;
 import net.pterodactylus.sone.web.page.TemplatePage;
+import net.pterodactylus.util.template.DataProvider;
 import net.pterodactylus.util.template.Template;
 import freenet.clients.http.SessionManager.Session;
 import freenet.clients.http.ToadletContext;
@@ -124,6 +126,21 @@ public class SoneTemplatePage extends TemplatePage {
        }
 
        /**
+        * Returns the currently logged in Sone.
+        *
+        * @param toadletContext
+        *            The toadlet context
+        * @param create
+        *            {@code true} to create a new session if no session exists,
+        *            {@code false} to not create a new session
+        * @return The currently logged in Sone, or {@code null} if no Sone is
+        *         currently logged in
+        */
+       protected Sone getCurrentSone(ToadletContext toadletContext, boolean create) {
+               return webInterface.getCurrentSone(toadletContext, create);
+       }
+
+       /**
         * Sets the currently logged in Sone.
         *
         * @param toadletContext
@@ -169,10 +186,14 @@ public class SoneTemplatePage extends TemplatePage {
         * {@inheritDoc}
         */
        @Override
-       protected void processTemplate(Request request, Template template) throws RedirectException {
-               super.processTemplate(request, template);
-               template.set("currentSone", getCurrentSone(request.getToadletContext()));
-               template.set("request", request);
+       protected void processTemplate(Request request, DataProvider dataProvider) throws RedirectException {
+               super.processTemplate(request, dataProvider);
+               dataProvider.set("currentSone", getCurrentSone(request.getToadletContext(), false));
+               dataProvider.set("request", request);
+               dataProvider.set("currentVersion", SonePlugin.VERSION);
+               dataProvider.set("hasLatestVersion", webInterface.getCore().getUpdateChecker().hasLatestVersion());
+               dataProvider.set("latestVersion", webInterface.getCore().getUpdateChecker().getLatestVersion());
+               dataProvider.set("latestVersionTime", webInterface.getCore().getUpdateChecker().getLatestVersionDate());
        }
 
        /**
@@ -180,7 +201,7 @@ public class SoneTemplatePage extends TemplatePage {
         */
        @Override
        protected String getRedirectTarget(Page.Request request) {
-               if (requiresLogin() && (getCurrentSone(request.getToadletContext()) == null)) {
+               if (requiresLogin() && (getCurrentSone(request.getToadletContext(), false) == null)) {
                        return "login.html";
                }
                return null;
@@ -192,7 +213,7 @@ public class SoneTemplatePage extends TemplatePage {
        @Override
        public boolean isEnabled(ToadletContext toadletContext) {
                if (requiresLogin()) {
-                       return getCurrentSone(toadletContext) != null;
+                       return getCurrentSone(toadletContext, false) != null;
                }
                return true;
        }