batch processing mode
# File lib/vmail.rb, line 113 def batch_run check_lynx opts = Vmail::Options.new(ARGV) opts.config config = opts.config.merge 'logfile' => 'vmail.log' # no search query args, but command args imap_client = Vmail::ImapClient.new config lines = STDIN.readlines# .reverse mailbox = lines.shift.chomp puts "mailbox: #{mailbox}" uid_set = lines.map do |line| line[/(\d+)\s*$/,1].to_i end commands = { 'rm' => ["flag", "+FLAGS", "Deleted"], 'spam' => ["flag", "+FLAGS", "spam"], 'mv' => ["move_to"], 'cp' => ["copy_to"], 'print' => ["append_to_file"] } args = commands[ARGV.first] if args.nil? abort "Command '#{args.inspect}' not recognized" end command = args.shift imap_client.with_open do |vmail| puts "Selecting mailbox: #{mailbox}" vmail.select_mailbox mailbox uid_set.each_slice(5) do |uid_set| params = [uid_set.join(',')] + args + ARGV[1..-1] puts "Executing: #{command} #{params.join(' ')}" vmail.send command, *params end end end
non-interactive mode
# File lib/vmail.rb, line 98 def noninteractive_list_messages check_lynx opts = Vmail::Options.new(ARGV) opts.config config = opts.config.merge 'logfile' => 'vmail.log' mailbox, query = parse_query query_string = Vmail::Query.args2string query imap_client = Vmail::ImapClient.new config imap_client.with_open do |vmail| vmail.select_mailbox mailbox vmail.search query_string end end
# File lib/vmail.rb, line 11 def start puts "Starting vmail #{Vmail::VERSION}" if Gem::Version.new("1.9.0") > Gem::Version.new(RUBY_VERSION) puts "This version of vmail requires Ruby version 1.9.0 or higher (1.9.2 is recommended)" exit end vim = ENV['VMAIL_VIM'] || 'vim' ENV['VMAIL_BROWSER'] ||= if RUBY_PLATFORM.downcase.include?('linux') tools = ['gnome-open', 'kfmclient-exec', 'konqueror'] tool = tools.detect { |tool| `which #{tool}`.size > 0 } if tool.nil? puts "Can't find a VMAIL_BROWSER tool on your system. Please report this issue." else tool end else 'open' end puts "Setting VMAIL_BROWSER to '#{ENV['VMAIL_BROWSER']}'" check_lynx opts = Vmail::Options.new(ARGV) opts.config config = opts.config contacts_file = opts.contacts_file logfile = (vim == 'mvim') ? STDERR : 'vmail.log' config.merge! 'logfile' => logfile puts "Starting vmail imap client for #{config['username']}" drb_uri = begin Vmail::ImapClient.daemon config rescue puts "Failure:", $! exit(1) end server = DRbObject.new_with_uri drb_uri mailbox, query = parse_query query_string = Vmail::Query.args2string query server.select_mailbox mailbox STDERR.puts "Mailbox: #{mailbox}" STDERR.puts "Query: #{query.inspect} => #{query_string}" buffer_file = "vmailbuffer" # invoke vim vimscript = File.expand_path("../vmail.vim", __FILE__) vim_command = "DRB_URI=#{drb_uri} VMAIL_CONTACTS_FILE=#{contacts_file} VMAIL_MAILBOX=#{String.shellescape(mailbox)} VMAIL_QUERY=#{String.shellescape(query_string)} #{vim} -S #{vimscript} #{buffer_file}" STDERR.puts vim_command STDERR.puts "Using buffer file: #{buffer_file}" File.open(buffer_file, "w") do |file| file.puts "Vmail starting with values:\n" file.puts "- drb uri: #{drb_uri}" file.puts "- mailbox: #{mailbox}" file.puts "- query: #{query_string}\n" file.puts "Fetching messages. please wait..." end system(vim_command) if vim == 'mvim' DRb.thread.join end File.delete(buffer_file) STDERR.puts "Closing imap connection" begin Timeout::timeout(10) do $gmail.close end rescue Timeout::Error puts "Close connection attempt timed out" end puts "Bye" exit end
Generated with the Darkfish Rdoc Generator 2.