def extract_row_data(fetch_data)
seqno = fetch_data.seqno
uid = fetch_data.attr['UID']
envelope = fetch_data.attr["ENVELOPE"]
size = fetch_data.attr["RFC822.SIZE"]
flags = fetch_data.attr["FLAGS"]
address_struct = if @mailbox == mailbox_aliases['sent']
structs = envelope.to || envelope.cc
structs.nil? ? nil : structs.first
else
envelope.from.first
end
address = if address_struct.nil?
"unknown"
elsif address_struct.name
"#{Mail::Encodings.unquote_and_convert_to(address_struct.name, 'UTF-8')} <#{[address_struct.mailbox, address_struct.host].join('@')}>"
else
[Mail::Encodings.unquote_and_convert_to(address_struct.mailbox, 'UTF-8'), Mail::Encodings.unquote_and_convert_to(address_struct.host, 'UTF-8')].join('@')
end
if @mailbox == mailbox_aliases['sent'] && envelope.to && envelope.cc
total_recips = (envelope.to + envelope.cc).size
address += " + #{total_recips - 1}"
end
date = begin
Time.parse(envelope.date).localtime
rescue ArgumentError
Time.now
end
date_formatted = if date.year != Time.now.year
date.strftime "%b %d %Y" rescue envelope.date.to_s
else
date.strftime "%b %d %I:%M%P" rescue envelope.date.to_s
end
subject = envelope.subject || ''
subject = Mail::Encodings.unquote_and_convert_to(subject, 'UTF-8')
flags = format_flags(flags)
mid_width = @width - 38
address_col_width = (mid_width * 0.3).ceil
subject_col_width = (mid_width * 0.7).floor
identifier = [seqno.to_i, uid.to_i].join(':')
row_text = [ flags.col(2),
(date_formatted || '').col(14),
address.col(address_col_width),
subject.col(subject_col_width),
number_to_human_size(size).rcol(7),
identifier.to_s
].join(' | ')
{:uid => uid, :seqno => seqno, :row_text => row_text}
rescue
log "error extracting header for uid #{uid} seqno #{seqno}: #$!\n#{$!.backtrace}"
row_text = "#{seqno.to_s} : error extracting this header"
{:uid => uid, :seqno => seqno, :row_text => row_text}
end