From: wmorgan Date: Sun, 28 Oct 2007 03:07:26 +0000 (+0000) Subject: fix (i think) the infamous spaces-in-message-ids problem X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=b57bc5299cc99dd7182b0b27329ace13affca779;p=sup fix (i think) the infamous spaces-in-message-ids problem git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@637 5c8cc53c-5e98-4d25-b20a-d8db53a31250 --- diff --git a/lib/sup/index.rb b/lib/sup/index.rb index 0da441a..82fa173 100644 --- a/lib/sup/index.rb +++ b/lib/sup/index.rb @@ -305,7 +305,7 @@ EOS "from" => doc[:from], "to" => doc[:to], "message-id" => doc[:message_id], - "references" => doc[:refs], + "references" => doc[:refs].split(/\s+/).map { |x| "<#{x}>" }.join(" "), } Message.new :source => source, :source_info => doc[:source_info].to_i, diff --git a/lib/sup/message.rb b/lib/sup/message.rb index 8614b3c..82fddcf 100644 --- a/lib/sup/message.rb +++ b/lib/sup/message.rb @@ -55,17 +55,17 @@ class Message def parse_header header header.each { |k, v| header[k.downcase] = v } - + @from = PersonManager.person_for header["from"] - @id = header["message-id"] - if @id - id.gsub!(/\s+/, "") - else - @id = "sup-faked-" + Digest::MD5.hexdigest(raw_header) - Redwood::log "faking message-id for message from #@from: #@id" - end - + @id = + if header["message-id"] + sanitize_message_id header["message-id"] + else + "sup-faked-" + Digest::MD5.hexdigest(raw_header) + Redwood::log "faking message-id for message from #@from: #@id" + end + date = header["date"] @date = case date @@ -86,8 +86,9 @@ class Message @to = PersonManager.people_for header["to"] @cc = PersonManager.people_for header["cc"] @bcc = PersonManager.people_for header["bcc"] - @refs = (header["references"] || "").gsub(/[<>]/, "").split(/\s+/).flatten - @replytos = (header["in-reply-to"] || "").scan(/<(.*?)>/).flatten + @refs = (header["references"] || "").scan(/<(.+?)>/).map { |x| sanitize_message_id x.first } + @replytos = (header["in-reply-to"] || "").scan(/<(.+?)>/).map { |x| sanitize_message_id x.first } + @replyto = PersonManager.person_for header["reply-to"] @list_address = if header["list-post"] @@ -109,6 +110,8 @@ class Message @source.fn_for_offset @source_info end + def sanitize_message_id mid; mid.gsub(/\s/, "") end + def save index index.sync_message self if @dirty @dirty = false