class Mournmail::SummaryItem
Attributes
cache_id[RW]
date[R]
flags[R]
from[R]
replies[R]
subject[R]
uid[R]
Public Class Methods
new(uid, date, from, subject, flags)
click to toggle source
# File lib/mournmail/summary.rb, line 189 def initialize(uid, date, from, subject, flags) @uid = uid @date = date @from = from @subject = subject @flags = flags @line = nil @replies = [] @cache_id = nil end
Public Instance Methods
add_reply(reply)
click to toggle source
# File lib/mournmail/summary.rb, line 200 def add_reply(reply) @replies << reply end
delete_reply_if() { |reply| ... }
click to toggle source
# File lib/mournmail/summary.rb, line 204 def delete_reply_if(&block) @replies = @replies.flat_map { |reply| reply.delete_reply_if(&block) if yield(reply) reply.replies else [reply] end } end
flags_char()
click to toggle source
# File lib/mournmail/summary.rb, line 243 def flags_char format_flags(@flags) end
set_flag(flag, update_server: true)
click to toggle source
# File lib/mournmail/summary.rb, line 226 def set_flag(flag, update_server: true) if !@flags.include?(flag) update_flag("+", flag, update_server: update_server) end end
to_s(limit = 78, from_limit = 16, level = 0)
click to toggle source
# File lib/mournmail/summary.rb, line 215 def to_s(limit = 78, from_limit = 16, level = 0) @line ||= format_line(limit, from_limit, level) return @line if @replies.empty? s = @line.dup child_level = level + 1 @replies.each do |reply| s << reply.to_s(limit, from_limit, child_level) end s end
toggle_flag(flag, update_server: true)
click to toggle source
# File lib/mournmail/summary.rb, line 238 def toggle_flag(flag, update_server: true) sign = @flags.include?(flag) ? "-" : "+" update_flag(sign, flag, update_server: update_server) end
unset_flag(flag, update_server: true)
click to toggle source
# File lib/mournmail/summary.rb, line 232 def unset_flag(flag, update_server: true) if @flags.include?(flag) update_flag("-", flag, update_server: update_server) end end
Private Instance Methods
decode_eword(s)
click to toggle source
# File lib/mournmail/summary.rb, line 308 def decode_eword(s) Mournmail.decode_eword(s) end
format_date(date)
click to toggle source
# File lib/mournmail/summary.rb, line 290 def format_date(date) (Time.parse(date) rescue Time.at(0)).localtime.strftime("%m/%d %H:%M") end
format_flags(flags)
click to toggle source
# File lib/mournmail/summary.rb, line 276 def format_flags(flags) if !flags.include?(:Seen) "u" elsif flags.include?(:Deleted) "d" elsif flags.include?(:Flagged) "$" elsif flags.include?(:Answered) "a" else " " end end
format_from(from)
click to toggle source
# File lib/mournmail/summary.rb, line 294 def format_from(from) addr = from&.[](0) if addr.nil? || addr.mailbox.nil? return "Unknown sender" end mailbox = Mournmail.escape_binary(addr.mailbox) host = Mournmail.escape_binary(addr.host.to_s) if addr.name "#{decode_eword(addr.name)} <#{mailbox}@#{host}>" else "#{mailbox}@#{host}" end end
format_line(limit = 78, from_limit = 16, level = 0)
click to toggle source
# File lib/mournmail/summary.rb, line 249 def format_line(limit = 78, from_limit = 16, level = 0) space = " " * (level < 8 ? level : 8) s = +"" s << format("%6d %s%s %s[ %s ] ", @uid, format_flags(@flags), format_date(@date), space, ljust(format_from(@from), from_limit)) s << ljust(decode_eword(@subject.to_s), limit - Buffer.display_width(s)) s << "\n" s end
ljust(s, n)
click to toggle source
# File lib/mournmail/summary.rb, line 260 def ljust(s, n) width = 0 str = +"" s.each_char do |c| w = Buffer.display_width(c) width += w if width > n width -= w break end str.concat(c) break if width == n end str + " " * (n - width) end
update_flag(sign, flag, update_server: true)
click to toggle source
# File lib/mournmail/summary.rb, line 312 def update_flag(sign, flag, update_server: true) if update_server Mournmail.imap_connect do |imap| data = imap.uid_store(@uid, "#{sign}FLAGS", [flag])&.first if data @flags = data.attr["FLAGS"] else update_flag_local(sign, flag) end end else update_flag_local(sign, flag) end if @line s = format("%6d %s", @uid, format_flags(@flags)) @line.sub!(/^ *\d+ ./, s) end end
update_flag_local(sign, flag)
click to toggle source
# File lib/mournmail/summary.rb, line 331 def update_flag_local(sign, flag) case sign when "+" @flags.push(flag) when "-" @flags.delete(flag) end end