aboutsummaryrefslogtreecommitdiff
path: root/src/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/java')
-rw-r--r--src/java/com/juick/rss/Main.java66
1 files changed, 34 insertions, 32 deletions
diff --git a/src/java/com/juick/rss/Main.java b/src/java/com/juick/rss/Main.java
index 827ecf39..9c0d803c 100644
--- a/src/java/com/juick/rss/Main.java
+++ b/src/java/com/juick/rss/Main.java
@@ -28,7 +28,6 @@ import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
-import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
@@ -48,26 +47,26 @@ import javax.servlet.http.HttpServletResponse;
*/
@WebServlet(name = "Main", urlPatterns = {"/"})
public class Main extends HttpServlet {
-
- private static SimpleDateFormat sdfSQL = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- private static SimpleDateFormat sdfRSS = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
+
+ private static final SimpleDateFormat sdfSQL = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ private static final SimpleDateFormat sdfRSS = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
Connection sql;
-
+
@Override
public void init() throws ServletException {
super.init();
try {
Properties conf = new Properties();
conf.load(new FileInputStream("/etc/juick/rss.conf"));
-
+
Class.forName("com.mysql.jdbc.Driver");
sql = DriverManager.getConnection("jdbc:mysql://localhost/juick?autoReconnect=true&user=" + conf.getProperty("mysql_username", "") + "&password=" + conf.getProperty("mysql_password", ""));
-
+
} catch (Exception e) {
log(null, e);
}
}
-
+
@Override
public void destroy() {
super.destroy();
@@ -80,13 +79,13 @@ public class Main extends HttpServlet {
}
}
}
-
+
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if (request.getCharacterEncoding() == null) {
request.setCharacterEncoding("UTF-8");
}
-
+
String uri = request.getRequestURI();
if (uri.equals("/")) {
int hours = Utils.parseInt(request.getParameter("hours"), 0);
@@ -122,10 +121,10 @@ public class Main extends HttpServlet {
response.sendError(404);
}
}
-
+
private void responseMessages(HttpServletResponse response, int uid, String uname, ArrayList<Message> msgs) throws IOException {
response.setContentType("application/rss+xml; charset=UTF-8");
-
+
PrintWriter out = response.getWriter();
try {
out.println("<?xml version='1.0' encoding='utf-8'?>");
@@ -142,15 +141,15 @@ public class Main extends HttpServlet {
out.println("<link>http://juick.com/</link>");
out.println("<description>The latest messages at Juick</description>");
}
-
+
Iterator<Message> i = msgs.iterator();
while (i.hasNext()) {
Message msg = i.next();
-
+
out.println("<item>");
out.println("<link>http://juick.com/" + msg.User.UName + "/" + msg.MID + "</link>");
out.println("<guid>http://juick.com/" + msg.User.UName + "/" + msg.MID + "</guid>");
-
+
out.print("<title><![CDATA[@" + msg.User.UName + ":");
if (!msg.Tags.isEmpty()) {
for (int n = 0; n < msg.Tags.size(); n++) {
@@ -159,13 +158,16 @@ public class Main extends HttpServlet {
}
out.println("]]></title>");
out.println("<description><![CDATA[" + formatMessage(msg.Text) + "]]></description>");
-
- try {
- Date date = sdfSQL.parse(msg.TimestampString);
- out.println("<pubDate>" + sdfRSS.format(date) + "</pubDate>");
- } catch (ParseException e) {
+
+ synchronized (sdfSQL) {
+ try {
+ Date date = sdfSQL.parse(msg.TimestampString);
+ out.println("<pubDate>" + sdfRSS.format(date) + "</pubDate>");
+ } catch (Exception e) {
+ System.err.println("PARSE EXCEPTION: " + msg.TimestampString);
+ }
}
-
+
out.println("<comments>http://juick.com/" + msg.User.UName + "/" + msg.MID + "</comments>");
if (!msg.Tags.isEmpty()) {
for (int n = 0; n < msg.Tags.size(); n++) {
@@ -184,26 +186,26 @@ public class Main extends HttpServlet {
out.println("<juick:user uid='" + msg.User.UID + "'/>");
out.println("</item>");
}
-
+
out.println("</channel></rss>");
} finally {
out.close();
}
}
-
+
private void responseReplies(HttpServletResponse response, int hours) throws IOException {
response.setContentType("application/rss+xml; charset=UTF-8");
-
+
PrintWriter out = response.getWriter();
try {
-
+
out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
out.println("<rss version=\"2.0\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:ya=\"http://blogs.yandex.ru/yarss/\" xmlns:media=\"http://search.yahoo.com/mrss/\">");
out.println("<channel>");
out.println("<title>Juick</title>");
out.println("<link>http://juick.com/</link>");
out.println("<description>The latest comments at Juick</description>");
-
+
PreparedStatement stmt = null;
ResultSet rs = null;
try {
@@ -216,7 +218,7 @@ public class Main extends HttpServlet {
int mid = rs.getInt(2);
int rid = rs.getInt(3);
String uname = rs.getString(4);
-
+
out.println("<item>");
out.println("<ya:post>http://juick.com/" + muname + "/" + mid + "</ya:post>");
out.println("<link>http://juick.com/" + muname + "/" + mid + "#" + rid + "</link>");
@@ -242,16 +244,16 @@ public class Main extends HttpServlet {
} finally {
Utils.finishSQL(rs, stmt);
}
-
+
out.println("</channel></rss>");
} finally {
out.close();
}
}
-
+
private ArrayList<Integer> getLastMessages(int hours) {
ArrayList<Integer> mids = new ArrayList<Integer>(20);
-
+
PreparedStatement stmt = null;
ResultSet rs = null;
try {
@@ -270,7 +272,7 @@ public class Main extends HttpServlet {
return mids;
}
private static Pattern regexLinks2 = Pattern.compile("((?<=\\s)|(?<=\\A))([\\[\\{]|&lt;)((?:ht|f)tps?://(?:www\\.)?([^\\/\\s\\\"\\)\\!]+)/?(?:[^\\]\\}](?<!&gt;))*)([\\]\\}]|&gt;)");
-
+
public static String formatMessage(String msg) {
msg = msg.replaceAll("&", "&amp;");
msg = msg.replaceAll("<", "&lt;");
@@ -330,7 +332,7 @@ public class Main extends HttpServlet {
// > citate
msg = msg.replaceAll("(?:(?<=\\n)|(?<=\\A))&gt; *(.*)?(\\n|(?=\\Z))", "<blockquote>$1</blockquote>");
msg = msg.replaceAll("</blockquote><blockquote>", "\n");
-
+
msg = msg.replaceAll("\n", "<br/>\n");
return msg;
}