aboutsummaryrefslogtreecommitdiff
path: root/juick-core/src/main/java/com/juick/util/MessageUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'juick-core/src/main/java/com/juick/util/MessageUtils.java')
-rw-r--r--juick-core/src/main/java/com/juick/util/MessageUtils.java264
1 files changed, 0 insertions, 264 deletions
diff --git a/juick-core/src/main/java/com/juick/util/MessageUtils.java b/juick-core/src/main/java/com/juick/util/MessageUtils.java
deleted file mode 100644
index 87a10351..00000000
--- a/juick-core/src/main/java/com/juick/util/MessageUtils.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Copyright (C) 2008-2017, Juick
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package com.juick.util;
-
-import com.juick.Message;
-import com.juick.Tag;
-import org.apache.commons.codec.CharEncoding;
-import org.apache.commons.lang3.StringUtils;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
-/**
- * Created by aalexeev on 11/13/16.
- */
-public class MessageUtils {
- private MessageUtils() {
- throw new IllegalStateException();
- }
-
- public static String formatQuote(final String quote) {
- String result = quote;
-
- if (quote != null) {
- if (quote.length() > 50) {
- result = ">" + quote.substring(0, 47).replace('\n', ' ') + "...\n";
- } else if (!quote.isEmpty()) {
- result = ">" + quote.replace('\n', ' ') + "\n";
- }
- }
-
- return result;
- }
-
- private static Pattern regexLinks2 = Pattern.compile("((?<=\\s)|(?<=\\A))([\\[\\{]|&lt;)((?:ht|f)tps?://(?:www\\.)?([^\\/\\s\\\"\\)\\!]+)/?(?:[^\\]\\}](?<!&gt;))*)([\\]\\}]|&gt;)");
-
- public static String formatMessageCode(String msg) {
- msg = msg.replaceAll("&", "&amp;");
- msg = msg.replaceAll("<", "&lt;");
- msg = msg.replaceAll(">", "&gt;");
-
- // http://juick.com/last?page=2
- // <a href="http://juick.com/last?page=2" rel="nofollow">http://juick.com/last?page=2</a>
- msg = msg.replaceAll("((?<=\\s)|(?<=\\A))((?:ht|f)tps?://(?:www\\.)?([^\\/\\s\\n\\\"]+)/?[^\\s\\n\\\"]*)", "$1<a href=\"$2\" rel=\"nofollow\">$2</a>");
-
- // (http://juick.com/last?page=2)
- // (<a href="http://juick.com/last?page=2" rel="nofollow">http://juick.com/last?page=2</a>)
- Matcher m = regexLinks2.matcher(msg);
- StringBuffer sb = new StringBuffer();
- while (m.find()) {
- String url = m.group(3).replace(" ", "%20").replaceAll("\\s+", StringUtils.EMPTY);
- m.appendReplacement(sb, "$1$2<a href=\"" + url + "\" rel=\"nofollow\">" + url + "</a>$5");
- }
- m.appendTail(sb);
- msg = sb.toString();
-
- return "<pre>" + msg + "</pre>";
- }
-
- public static String formatMessage(String msg) {
- msg = msg.replaceAll("&", "&amp;");
- msg = msg.replaceAll("<", "&lt;");
- msg = msg.replaceAll(">", "&gt;");
-
- // --
- // &mdash;
- msg = msg.replaceAll("((?<=\\s)|(?<=\\A))\\-\\-?((?=\\s)|(?=\\Z))", "$1&mdash;$2");
-
- // http://juick.com/last?page=2
- // <a href="http://juick.com/last?page=2" rel="nofollow">juick.com</a>
- msg = msg.replaceAll("((?<=\\s)|(?<=\\A))((?:ht|f)tps?://(?:www\\.)?([^\\/\\s\\n\\\"]+)/?[^\\s\\n\\\"]*)", "$1<a href=\"$2\" rel=\"nofollow\">$3</a>");
-
- // [link text][http://juick.com/last?page=2]
- // <a href="http://juick.com/last?page=2" rel="nofollow">link text</a>
- msg = msg.replaceAll("\\[([^\\]]+)\\]\\[((?:ht|f)tps?://[^\\]]+)\\]", "<a href=\"$2\" rel=\"nofollow\">$1</a>");
- msg = msg.replaceAll("\\[([^\\]]+)\\]\\(((?:ht|f)tps?://[^\\)]+)\\)", "<a href=\"$2\" rel=\"nofollow\">$1</a>");
-
- // #12345
- // <a href="http://juick.com/12345">#12345</a>
- msg = msg.replaceAll("((?<=\\s)|(?<=\\A)|(?<=\\p{Punct}))#(\\d+)((?=\\s)|(?=\\Z)|(?=\\))|(?=\\.)|(?=\\,))", "$1<a href=\"http://juick.com/$2\">#$2</a>$3");
-
- // #12345/65
- // <a href="http://juick.com/12345#65">#12345/65</a>
- msg = msg.replaceAll("((?<=\\s)|(?<=\\A)|(?<=\\p{Punct}))#(\\d+)/(\\d+)((?=\\s)|(?=\\Z)|(?=\\p{Punct}))", "$1<a href=\"http://juick.com/$2#$3\">#$2/$3</a>$4");
-
- // *bold*
- // <b>bold</b>
- msg = msg.replaceAll("((?<=\\s)|(?<=\\A)|(?<=\\p{Punct}))\\*([^\\*\\n<>]+)\\*((?=\\s)|(?=\\Z)|(?=\\p{Punct}))", "$1<b>$2</b>$3");
-
- // /italic/
- // <i>italic</i>
- msg = msg.replaceAll("((?<=\\s)|(?<=\\A))/([^\\/\\n<>]+)/((?=\\s)|(?=\\Z)|(?=\\p{Punct}))", "$1<i>$2</i>$3");
-
- // _underline_
- // <span class="u">underline</span>
- msg = msg.replaceAll("((?<=\\s)|(?<=\\A))_([^\\_\\n<>]+)_((?=\\s)|(?=\\Z)|(?=\\p{Punct}))", "$1<span class=\"u\">$2</span>$3");
-
- // /12
- // <a href="#12">/12</a>
- msg = msg.replaceAll("((?<=\\s)|(?<=\\A))\\/(\\d+)((?=\\s)|(?=\\Z)|(?=\\p{Punct}))", "$1<a href=\"#$2\">/$2</a>$3");
-
- // @username@jabber.org
- // <a href="http://juick.com/username@jabber.org/">@username@jabber.org</a>
- msg = msg.replaceAll("((?<=\\s)|(?<=\\A))@([\\w\\-\\.]+@[\\w\\-\\.]+)((?=\\s)|(?=\\Z)|(?=\\p{Punct}))", "$1<a href=\"http://juick.com/$2/\">@$2</a>$3");
-
- // @username
- // <a href="http://juick.com/username/">@username</a>
- msg = msg.replaceAll("((?<=\\s)|(?<=\\A))@([\\w\\-]{2,16})((?=\\s)|(?=\\Z)|(?=\\p{Punct}))", "$1<a href=\"http://juick.com/$2/\">@$2</a>$3");
-
- // (http://juick.com/last?page=2)
- // (<a href="http://juick.com/last?page=2" rel="nofollow">juick.com</a>)
- Matcher m = regexLinks2.matcher(msg);
- StringBuffer sb = new StringBuffer();
- while (m.find()) {
- String url = m.group(3).replace(" ", "%20").replaceAll("\\s+", StringUtils.EMPTY);
- m.appendReplacement(sb, "$1$2<a href=\"" + url + "\" rel=\"nofollow\">$4</a>$5");
- }
- m.appendTail(sb);
- msg = sb.toString();
-
- // > citate
- msg = msg.replaceAll("(?:(?<=\\n)|(?<=\\A))&gt; *(.*)?(\\n|(?=\\Z))", "<q>$1</q>");
- msg = msg.replaceAll("</q><q>", "\n");
-
- msg = msg.replaceAll("\n", "<br/>\n");
- return msg;
- }
-
- public static String formatHtml(Message jmsg) {
- StringBuilder sb = new StringBuilder();
- boolean isReply = jmsg.getRid() > 0;
- String title = isReply ? "<b>Reply by @" : "<b>@";
- String subtitle = isReply ? "<blockquote>" + jmsg.getReplyQuote() + "</blockquote>" : "<i>" + getTagsString(jmsg) + "</i>";
- boolean isCode = jmsg.getTags().stream().anyMatch(t -> t.getName().equals("code"));
-
- sb.append(title).append(jmsg.getUser().getName()).append(":</b></br/>")
- .append(subtitle).append("<br/>")
- .append(isCode ? formatMessageCode(StringUtils.defaultString(jmsg.getText()))
- : formatMessage(StringUtils.defaultString(jmsg.getText()))).append("<br />");
- if (StringUtils.isNotEmpty(jmsg.getAttachmentType())) {
- // FIXME: attachment does not serialized to xml
- if (jmsg.getAttachment() == null) {
- if (jmsg.getRid() > 0) {
- sb.append(String.format("<img src=\"http://i.juick.com/photos-1024/%d-%d.%s\" />", jmsg.getMid(),
- jmsg.getRid(), jmsg.getAttachmentType()));
- } else {
- sb.append(String.format("<img src=\"http://i.juick.com/photos-1024/%d.%s\" />", jmsg.getMid(),
- jmsg.getAttachmentType()));
- }
- } else {
- sb.append("<img src=\"").append(jmsg.getAttachment().getMedium().getUrl()).append("\" />");
- }
- }
- return sb.toString();
- }
-
- public static String getMessageHashTags(final Message jmsg) {
- StringBuilder hashtags = new StringBuilder();
- for (Tag tag : jmsg.getTags()) {
- hashtags.append("#").append(tag).append(" ");
- }
- return hashtags.toString();
- }
- public static String getMarkdownTags(final Message jmsg) {
- return jmsg.getTags().stream().map(t -> String.format("[%s](http://juick.com/tag/%s)", t.getName(), percentEncode(t.getName())))
- .collect(Collectors.joining(", "));
- }
-
- public static String getMarkdownUser(final Message jmsg) {
- return String.format("[%s](https://juick.com/%s/)", jmsg.getUser().getName(), jmsg.getUser().getName());
- }
-
- // TODO: check if it is really needed
- public static String percentEncode(final String s) {
- String ret = StringUtils.EMPTY;
- try {
- ret = URLEncoder.encode(s, CharEncoding.UTF_8).replace("+", "%20").replace("*", "%2A").replace("%7E", "~");
- } catch (UnsupportedEncodingException e) {
- }
- return ret;
- }
- public static String escapeMarkdown(final String s) {
- return s.replace("_", "\\_").replace("*", "\\*")
- .replace("`", "\\`");
- }
- public static String attachmentUrl(final Message jmsg) {
- if (StringUtils.isEmpty(jmsg.getAttachmentType())) {
- return StringUtils.EMPTY;
- }
- // FIXME: attachment does not serialized to xml
- if (jmsg.getAttachment() == null) {
- if (jmsg.getRid() > 0) {
- return String.format("http://i.juick.com/photos-1024/%d-%d.%s", jmsg.getMid(),
- jmsg.getRid(), jmsg.getAttachmentType());
- } else {
- return String.format("http://i.juick.com/photos-1024/%d.%s", jmsg.getMid(),
- jmsg.getAttachmentType());
- }
- } else {
- return jmsg.getAttachment().getMedium().getUrl();
- }
- }
- public static boolean replyStartsWithQuote(Message msg) {
- return msg.getRid() > 0 && StringUtils.defaultString(msg.getText()).startsWith(">");
- }
- public static List<Tag> parseTags(String strTags) {
- List<Tag> tags = new ArrayList<>();
- if (StringUtils.isNotEmpty(strTags)) {
- Set<Tag> tagSet = new TreeSet<>(tags);
- for (String str : strTags.split(" ")) {
- Tag tag = new Tag(str);
- if (!tagSet.contains(tag)) {
- tags.add(tag);
- tagSet.add(tag);
- }
- }
- }
- return tags;
- }
- public static String getTagsString(Message msg) {
- StringBuilder builder = new StringBuilder();
- List<Tag> tags = msg.getTags();
- if (!tags.isEmpty()) {
- for (Tag Tag : tags)
- builder.append(" *").append(Tag.getName());
-
- if (msg.FriendsOnly)
- builder.append(" *friends");
-
- if (msg.getPrivacy() == -2)
- builder.append(" *private");
- else if (msg.getPrivacy() == -1)
- builder.append(" *friends");
- else if (msg.getPrivacy() == 2)
- builder.append(" *public");
-
- if (msg.ReadOnly)
- builder.append(" *readonly");
- }
- return builder.toString();
- }
-}