# HG changeset patch
# User František Kučera <franta-hg@frantovo.cz>
# 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