]> git.cworth.org Git - sup/blob - lib/sup/mbox.rb
moved evertying to devel
[sup] / lib / sup / mbox.rb
1 require "sup/mbox/loader"
2
3 module Redwood
4
5 ## some utility functions
6 module MBox
7   BREAK_RE = /^From \S+@\S+/
8
9   def read_header f
10     header = {}
11     last = nil
12
13     ## i do it in this weird way because i am trying to speed things up
14     ## at load-message time.
15     while(line = f.gets)
16       case line
17       when /^From:\s+(.*)$/i: header[last = "From"] = $1
18       when /^To:\s+(.*)$/i: header[last = "To"] = $1
19       when /^Cc:\s+(.*)$/i: header[last = "Cc"] = $1
20       when /^Bcc:\s+(.*)$/i: header[last = "Bcc"] = $1
21       when /^Subject:\s+(.*)$/i: header[last = "Subject"] = $1
22       when /^Date:\s+(.*)$/i: header[last = "Date"] = $1
23       when /^Message-Id:\s+<(.*)>$/i: header[last = "Message-Id"] = $1
24       when /^References:\s+(.*)$/i: header[last = "References"] = $1
25       when /^In-Reply-To:\s+(.*)$/i: header[last = "In-Reply-To"] = $1
26       when /^List-Post:\s+(.*)$/i: header[last = "List-Post"] = $1
27       when /^Reply-To:\s+(.*)$/i: header[last = "Reply-To"] = $1
28       when /^Status:\s+(.*)$/i: header[last = "Status"] = $1
29       when /^Delivered-To:\s+(.*)$/i
30         header[last = "Delivered-To"] = $1 unless header["Delivered-To"]
31       when /^$/: break
32       when /:/: last = nil
33       else
34         header[last] += line.gsub(/^\s+/, "") if last
35       end
36     end
37     header
38   end
39   
40   def read_body f
41     body = []
42     f.each_line do |l|
43       break if l =~ BREAK_RE
44       body << l.chomp
45     end
46     body
47   end
48
49   module_function :read_header, :read_body
50 end
51 end