# HG changeset patch # User František Kučera # Date 1318288650 -7200 # Node ID b51612c18a541c6e0ad111155650bcc7764fda7c # Parent 6e16e3bee1cad8dd67f89753cd06fd039ea589aa Drupal: správné kódování češtiny. diff -r 6e16e3bee1ca -r b51612c18a54 src/org/sonews/storage/impl/DrupalDatabase.java --- a/src/org/sonews/storage/impl/DrupalDatabase.java Tue Oct 11 00:38:41 2011 +0200 +++ b/src/org/sonews/storage/impl/DrupalDatabase.java Tue Oct 11 01:17:30 2011 +0200 @@ -30,6 +30,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import javax.mail.internet.MimeUtility; +import org.apache.commons.codec.net.QuotedPrintableCodec; import org.sonews.config.Config; import org.sonews.feed.Subscription; import org.sonews.storage.Article; @@ -51,6 +52,7 @@ /** How many times the database connection was reinitialized */ protected int restarts = 0; protected Connection conn = null; + private QuotedPrintableCodec qpc = new QuotedPrintableCodec("UTF-8"); public DrupalDatabase() throws StorageBackendException { connectDatabase(); @@ -140,27 +142,31 @@ private static String constructHeaders(ResultSet rs) throws SQLException, UnsupportedEncodingException { StringBuilder sb = new StringBuilder(); - - sb.append("Message-id: "); + + sb.append("Message-id: <"); sb.append(rs.getInt("id")); sb.append("-"); sb.append(rs.getInt("group_id")); sb.append("-"); sb.append(rs.getString("group_name")); sb.append("@"); - sb.append("nntp.kinderporno.cz"); + sb.append("nntp.kinderporno.cz>"); sb.append(CRLF); - + sb.append("From: "); sb.append(MimeUtility.encodeWord(rs.getString("sender_name"))); sb.append(" <>"); sb.append(CRLF); - + sb.append("Subject: "); sb.append(MimeUtility.encodeWord(rs.getString("subject"))); sb.append(CRLF); - - + + + sb.append("Content-Type: text/html; charset=UTF-8"); + sb.append(CRLF); + sb.append("Content-Transfer-Encoding: quoted-printable"); + sb.append(CRLF); return sb.toString(); } @@ -237,8 +243,8 @@ if (rs.next()) { String headers = constructHeaders(rs); - byte[] body = rs.getString("text").getBytes(); - + byte[] body = qpc.encode(rs.getString("text")).getBytes(); + return new Article(headers, body); } else { return null; @@ -393,14 +399,34 @@ @Override public int countArticles() throws StorageBackendException { - log.log(Level.SEVERE, "TODO: countArticles"); - return 0; + PreparedStatement ps = null; + ResultSet rs = null; + try { + ps = conn.prepareStatement("SELECT count(*) FROM nntp_article"); + rs = ps.executeQuery(); + rs.next(); + return rs.getInt(1); + } catch (Exception e) { + throw new StorageBackendException(e); + } finally { + close(null, ps, rs); + } } @Override public int countGroups() throws StorageBackendException { - log.log(Level.SEVERE, "TODO: countGroups"); - return 0; + PreparedStatement ps = null; + ResultSet rs = null; + try { + ps = conn.prepareStatement("SELECT count(*) FROM nntp_group"); + rs = ps.executeQuery(); + rs.next(); + return rs.getInt(1); + } catch (Exception e) { + throw new StorageBackendException(e); + } finally { + close(null, ps, rs); + } } @Override @@ -410,7 +436,7 @@ @Override public String getConfigValue(String key) throws StorageBackendException { - log.log(Level.SEVERE, "TODO: getConfigValue {0}", new Object[]{key}); + //log.log(Level.SEVERE, "TODO: getConfigValue {0}", new Object[]{key}); return null; } @@ -446,8 +472,19 @@ @Override public int getPostingsCount(String groupname) throws StorageBackendException { - log.log(Level.SEVERE, "TODO: getPostingsCount {0}", new Object[]{groupname}); - return 0; + PreparedStatement ps = null; + ResultSet rs = null; + try { + ps = conn.prepareStatement("SELECT count(*) FROM nntp_article WHERE group_name = ?"); + ps.setString(1, groupname); + rs = ps.executeQuery(); + rs.next(); + return rs.getInt(1); + } catch (Exception e) { + throw new StorageBackendException(e); + } finally { + close(null, ps, rs); + } } @Override