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