Namespace

Larch

Attributes

config[R]
db[R]
exclude[R]
log[R]

Public Class Methods

copy_all(imap_from, imap_to, subscribed_only = false) click to toggle source

Recursively copies all messages in all folders from the source to the destination.

# File lib/larch.rb, line 51
def copy_all(imap_from, imap_to, subscribed_only = false)
  raise ArgumentError, "imap_from must be a Larch::IMAP instance" unless imap_from.is_a?(IMAP)
  raise ArgumentError, "imap_to must be a Larch::IMAP instance" unless imap_to.is_a?(IMAP)

  @copied  = 0
  @deleted = 0
  @failed  = 0
  @total   = 0

  imap_from.each_mailbox do |mailbox_from|
    next if excluded?(mailbox_from.name)
    next if subscribed_only && !mailbox_from.subscribed?

    if imap_to.uri_mailbox
      mailbox_to = imap_to.mailbox(imap_to.uri_mailbox)
    else
      mailbox_to = imap_to.mailbox(mailbox_from.name, mailbox_from.delim)
    end

    mailbox_to.subscribe if mailbox_from.subscribed?

    copy_messages(mailbox_from, mailbox_to)
  end

rescue => e
  @log.fatal e.message

ensure
  summary
  db_maintenance
end
copy_folder(imap_from, imap_to) click to toggle source

Copies the messages in a single IMAP folder and all its subfolders (recursively) from the source to the destination.

# File lib/larch.rb, line 85
def copy_folder(imap_from, imap_to)
  raise ArgumentError, "imap_from must be a Larch::IMAP instance" unless imap_from.is_a?(IMAP)
  raise ArgumentError, "imap_to must be a Larch::IMAP instance" unless imap_to.is_a?(IMAP)

  @copied  = 0
  @deleted = 0
  @failed  = 0
  @total   = 0

  mailbox_from = imap_from.mailbox(imap_from.uri_mailbox || 'INBOX')
  mailbox_to   = imap_to.mailbox(imap_to.uri_mailbox || 'INBOX')

  copy_mailbox(mailbox_from, mailbox_to)

  imap_from.disconnect
  imap_to.disconnect

rescue => e
  @log.fatal e.message

ensure
  summary
  db_maintenance
end
init(config) click to toggle source
# File lib/larch.rb, line 31
def init(config)
  raise ArgumentError, "config must be a Larch::Config instance" unless config.is_a?(Config)

  @config = config
  @log    = Logger.new(@config[:verbosity])
  @db     = open_db(@config[:database])

  parse_exclusions

  Net::IMAP.debug = true if @log.level == :insane

  # Stats
  @copied  = 0
  @deleted = 0
  @failed  = 0
  @total   = 0
end
open_db(database) click to toggle source

Opens a connection to the Larch message database, creating it if necessary.

# File lib/larch.rb, line 112
def open_db(database)
  unless database == ':memory:'
    filename  = File.expand_path(database)
    directory = File.dirname(filename)

    unless File.exist?(directory)
      FileUtils.mkdir_p(directory)
      File.chmod(0700, directory)
    end
  end

  begin
    db = Sequel.amalgalite(:database => filename)
    db.test_connection
  rescue => e
    @log.fatal "unable to open message database: #{e}"
    abort
  end

  # Ensure that the database schema is up to date.
  migration_dir = File.join(LIB_DIR, 'db', 'migrate')

  begin
    Sequel::Migrator.apply(db, migration_dir)
  rescue => e
    @log.fatal "unable to migrate message database: #{e}"
    abort
  end

  require 'larch/db/message'
  require 'larch/db/mailbox'
  require 'larch/db/account'

  db
end
summary() click to toggle source
# File lib/larch.rb, line 148
def summary
  @log.info "#{@copied} message(s) copied, #{@failed} failed, #{@deleted} deleted out of #{@total} total"
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.