mailer作成 その20

fetchボタンを押したときに、取得したメールを画面に出すように変更中。
fetch_controller#fetch()は、メールを取得するとき、イテレータになっているので、list_controllerからメールを1通ずつ取り出すことができない(?)。
そこでfetch_controller#fetch()の引き数を1つ増やして、list_controllerオブジェクトを渡し、fetch()内でメールを取得するたびにlist_controllerのメソッドを呼ぶようにできないか実験中。

⇒できた。(8/24)
fetch_controller#fetch()は以下のようにした:

  def fetch(mailbox_name, print_message = false, list_controller = nil)
    (略)
      list_controller.put_message 'no mail' if print_message && list_controller != nil
    (略)
          list_controller.put_message print_fetched_mail(date, from, subject) if print_message && list_controller != nil
    (略)
      list_controller.put_message "no new mails" if print_message && list_controller != nil && nmails == 0
    (略)
  end

list_controllerはこんな感じ:

  def do_fetch  
    (略)
    mail_fetcher = MailFetcher.new(server, port, user, password)
    begin
      t = Thread.new {
        nmails = mail_fetcher.fetch(mailbox_name, true, self)
      }
    (略)
      t.join
    rescue
      p $!
    end
    redirect_to(:action => 'list')
  end
    (略)
  def put_message(s)
    puts ">> #{s}"
  end