Class: MaildirAccount

Inherits:
Object
  • Object
show all
Defined in:
lib/feed2imap/maildir.rb

Constant Summary collapse

MYHOSTNAME =
Socket.gethostname
@@seq_num =
0

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#uriObject (readonly)

Returns the value of attribute uri.



30
31
32
# File 'lib/feed2imap/maildir.rb', line 30

def uri
  @uri
end

Instance Method Details

#cleanup(folder, dryrun = false) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/feed2imap/maildir.rb', line 57

def cleanup(folder, dryrun = false)
  dir = folder_dir(folder)
  puts "-- Considering #{dir}:"
  guarantee_maildir(dir)

  del_count = 0
  recent_time = Time.now() - (3 * 24 * 60 * 60) # 3 days
  Dir[File.join(dir, 'cur', '*')].each do |fn|
    flags = maildir_file_info_flags(fn)
    # don't consider not-seen, flagged, or recent messages
    mtime = File.mtime(fn)
    next if (not flags.index('S') or
             flags.index('F') or
             mtime > recent_time)
    mail = File.open(fn) do |f|
      RMail::Parser.read(f)
    end
    subject = mail.header['Subject']
    if dryrun
      puts "To remove: #{subject} #{mtime}"
    else
      puts "Removing: #{subject} #{mtime}"
      File.delete(fn)
    end
    del_count += 1
  end
  puts "-- Deleted #{del_count} messages"
  return del_count
end

#putmail(folder, mail, date = Time::now) ⇒ Object



32
33
34
35
36
# File 'lib/feed2imap/maildir.rb', line 32

def putmail(folder, mail, date = Time::now)
  store_message(folder_dir(folder), date, nil) do |f|
    f.puts(mail)
  end
end

#to_sObject



53
54
55
# File 'lib/feed2imap/maildir.rb', line 53

def to_s
  uri.to_s
end

#updatemail(folder, mail, idx, date = Time::now, reupload_if_updated = true) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/feed2imap/maildir.rb', line 38

def updatemail(folder, mail, idx, date = Time::now, reupload_if_updated = true)
  dir = folder_dir(folder)
  guarantee_maildir(dir)
  mail_files = find_mails(dir, idx)
  if mail_files.length > 0
    # get the info from the first result and delete everything
    info = maildir_file_info(mail_files[0])
    mail_files.each { |f| File.delete(File.join(dir, f)) }
  elsif not reupload_if_updated
    # mail not present, and we don't want to re-upload it
    return
  end
  store_message(dir, date, info) { |f| f.puts(mail) }
end