# File lib/sup/ferret_index.rb, line 261
  def build_message docid
    @index_mutex.synchronize do
      doc = @index[docid] or return

      source = SourceManager[doc[:source_id].to_i]
      raise "invalid source #{doc[:source_id]}" unless source

      #puts "building message #{doc[:message_id]} (#{source}##{doc[:source_info]})"

      fake_header = {
        "date" => Time.at(doc[:date].to_i),
        "subject" => unwrap_subj(doc[:subject]),
        "from" => doc[:from],
        "to" => doc[:to].split.join(", "), # reformat
        "message-id" => doc[:message_id],
        "references" => doc[:refs].split.map { |x| "<#{x}>" }.join(" "),
      }

      m = Message.new :source => source, :source_info => doc[:source_info].to_i,
                  :labels => doc[:label].to_set_of_symbols,
                  :snippet => doc[:snippet]
      m.parse_header fake_header
      m
    end
  end