# HG changeset patch # User František Kučera # Date 1319544655 -7200 # Node ID 03cc47e9daeeac5892dfbaed5468bb8f3de074d1 # Parent fdc075324ef353f6dd0bd52cbf1d3065b02870e6 Drupal: klient nemusí posílat In-Reply-To hlavičku, ale jen References, kde je víc messageID – vezmeme to poslední. diff -r fdc075324ef3 -r 03cc47e9daee src/org/sonews/storage/DrupalMessage.java --- a/src/org/sonews/storage/DrupalMessage.java Tue Oct 25 10:39:57 2011 +0200 +++ b/src/org/sonews/storage/DrupalMessage.java Tue Oct 25 14:10:55 2011 +0200 @@ -30,10 +30,13 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.Enumeration; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.mail.Header; import javax.mail.MessagingException; import javax.mail.Multipart; @@ -161,14 +164,26 @@ super(Session.getDefaultInstance(System.getProperties()), serializeArticle(article)); initFactories(); - String[] parentHeaders = getHeader("In-Reply-To"); - if (parentHeaders != null && parentHeaders.length == 1) { - String parentMessageID = parentHeaders[0]; - parentID = parseArticleID(parentMessageID); - groupID = parseGroupID(parentMessageID); + String[] replyToHeaders = getHeader("In-Reply-To"); + String[] referencesHeaders = getHeader("References"); + String parentMessageID; + if (replyToHeaders != null && replyToHeaders.length == 1) { + parentMessageID = replyToHeaders[0]; + } else if (referencesHeaders != null && referencesHeaders.length == 1) { + Pattern p = Pattern.compile("(\\s*<.*>)*\\s*(<.*>)"); + Matcher m = p.matcher(referencesHeaders[0]); + + if (m.matches()) { + parentMessageID = m.group(2); + } else { + throw new MessagingException("Message posted by user had invalid References header: " + referencesHeaders[0]); + } } else { - throw new MessagingException("Message posted by user must have exactly one In-Reply-To header."); + throw new MessagingException("Message posted by user must have exactly one In-Reply-To header. Reply-To headers: " + Arrays.toString(replyToHeaders) + " Referemces headers: " + Arrays.toString(referencesHeaders)); } + + parentID = parseArticleID(parentMessageID); + groupID = parseGroupID(parentMessageID); } private static InputStream serializeArticle(Article a) { @@ -503,7 +518,7 @@ throw new StorageBackendException(e); } } - + public String getBodyPlainText() throws StorageBackendException { /** * TODO: netransformovat XHTML 2x