Show original freemail address in tooltip of link
[Sone.git] / src / main / java / net / pterodactylus / sone / template / ParserFilter.java
index ac092d8..e2afb9c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Sone - ParserFilter.java - Copyright © 2011–2015 David Roden
+ * Sone - ParserFilter.java - Copyright © 2011–2016 David Roden
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -20,7 +20,6 @@ package net.pterodactylus.sone.template;
 import static java.lang.String.valueOf;
 import static net.pterodactylus.sone.utils.NumberParsers.parseInt;
 
-import java.io.IOException;
 import java.io.StringReader;
 import java.io.StringWriter;
 import java.io.UnsupportedEncodingException;
@@ -30,8 +29,11 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import javax.annotation.Nonnull;
+
 import net.pterodactylus.sone.core.Core;
 import net.pterodactylus.sone.data.Sone;
+import net.pterodactylus.sone.text.FreemailPart;
 import net.pterodactylus.sone.text.FreenetLinkPart;
 import net.pterodactylus.sone.text.LinkPart;
 import net.pterodactylus.sone.text.Part;
@@ -40,13 +42,15 @@ import net.pterodactylus.sone.text.PostPart;
 import net.pterodactylus.sone.text.SonePart;
 import net.pterodactylus.sone.text.SoneTextParser;
 import net.pterodactylus.sone.text.SoneTextParserContext;
-import net.pterodactylus.sone.web.page.FreenetRequest;
 import net.pterodactylus.util.template.Filter;
 import net.pterodactylus.util.template.Template;
 import net.pterodactylus.util.template.TemplateContext;
 import net.pterodactylus.util.template.TemplateContextFactory;
 import net.pterodactylus.util.template.TemplateParser;
 
+import com.google.common.base.Function;
+import com.google.common.base.Optional;
+
 /**
  * Filter that filters a given text through a {@link SoneTextParser}.
  *
@@ -98,10 +102,9 @@ public class ParserFilter implements Filter {
                if (sone instanceof String) {
                        sone = core.getSone((String) sone).orNull();
                }
-               FreenetRequest request = (FreenetRequest) templateContext.get("request");
-               SoneTextParserContext context = new SoneTextParserContext(request, (Sone) sone);
+               SoneTextParserContext context = new SoneTextParserContext((Sone) sone);
                StringWriter parsedTextWriter = new StringWriter();
-               Iterable<Part> parts = soneTextParser.parse(context, text);
+               Iterable<Part> parts = soneTextParser.parse(text, context);
                if (length > -1) {
                        int allPartsLength = 0;
                        List<Part> shortenedParts = new ArrayList<Part>();
@@ -173,6 +176,8 @@ public class ParserFilter implements Filter {
                        render(writer, (SonePart) part);
                } else if (part instanceof PostPart) {
                        render(writer, (PostPart) part);
+               } else if (part instanceof FreemailPart) {
+                       render(writer, (FreemailPart) part);
                } else if (part instanceof Iterable<?>) {
                        render(writer, (Iterable<Part>) part);
                }
@@ -247,8 +252,8 @@ public class ParserFilter implements Filter {
         */
        private void render(Writer writer, PostPart postPart) {
                SoneTextParser parser = new SoneTextParser(core, core);
-               SoneTextParserContext parserContext = new SoneTextParserContext(null, postPart.getPost().getSone());
-               Iterable<Part> parts = parser.parse(parserContext, postPart.getPost().getText());
+               SoneTextParserContext parserContext = new SoneTextParserContext(postPart.getPost().getSone());
+               Iterable<Part> parts = parser.parse(postPart.getPost().getText(), parserContext);
                StringBuilder excerpt = new StringBuilder();
                for (Part part : parts) {
                        excerpt.append(part.getText());
@@ -266,6 +271,22 @@ public class ParserFilter implements Filter {
                renderLink(writer, "viewPost.html?post=" + postPart.getPost().getId(), excerpt.toString(), SoneAccessor.getNiceName(postPart.getPost().getSone()), "in-sone");
        }
 
+       private void render(@Nonnull Writer writer, @Nonnull FreemailPart freemailPart) {
+               Optional<Sone> sone = core.getSone(freemailPart.getIdentityId());
+               String soneName = sone.transform(new Function<Sone, String>() {
+                       @Nonnull
+                       @Override
+                       public String apply(Sone input) {
+                               return SoneAccessor.getNiceName(input);
+                       }
+               }).or(freemailPart.getIdentityId());
+               renderLink(writer,
+                               "/Freemail/NewMessage?to=" + freemailPart.getIdentityId(),
+                               String.format("%s@%s.freemail", freemailPart.getEmailLocalPart(), soneName),
+                               String.format("%s\n%s@%s.freemail", soneName, freemailPart.getEmailLocalPart(), freemailPart.getFreemailId()),
+                               "in-sone");
+       }
+
        /**
         * Renders the given link.
         *