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
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
# 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
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
Generated with the Darkfish Rdoc Generator 2.