5 require 'highline/import'
9 Thread.abort_on_exception = true # make debugging possible
11 $opts = Trollop::options do
12 version "sup-add (sup #{Redwood::VERSION})"
14 Adds a source to the Sup source list.
17 sup-add [options] <source>+
19 where <source>+ is one or more source URIs or mbox filenames, e.g.
20 "imaps://my.imapserver.com", or "/var/spool/mail/me".
24 opt :archive, "Automatically archive all new messages from these sources."
25 opt :unusual, "Do not automatically poll these sources for new messages."
26 opt :force_new, "Create a new account for this source, even if one already exists."
29 Trollop::die "require one or more sources" if ARGV.empty?
31 ## for sources that require login information, prompt the user for
32 ## that. also provide a list of previously-defined login info to
33 ## choose from, if any.
34 def get_login_info uri, sources
36 accounts = sources.map do |s|
37 next unless s.respond_to?(:username)
39 [suri.host, s.username, s.password]
40 end.compact.uniq.sort_by { |h, u, p| h == uri.host ? 0 : 1 }
42 username, password = nil, nil
43 unless accounts.empty? || $opts[:force_new]
44 say "Would you like to use the same account as for a previous source for #{uri}?"
46 accounts.each do |host, olduser, oldpw|
47 menu.choice("Use the account info for #{olduser}@#{host}") { username, password = olduser, oldpw }
49 menu.choice("Use a new account") { }
50 menu.prompt = "Account selection? "
54 unless username && password
55 username = ask("Username for #{uri.host}: ");
56 password = ask("Password for #{uri.host}: ") { |q| q.echo = false }
63 $terminal.wrap_at = :auto
65 index = Redwood::Index.new
69 uri = "mbox://#{uri}" unless uri =~ %r!://!
70 if !$opts[:force_new] && index.source_for(uri)
71 say "Already know about #{uri}; skipping."
76 when %r!^mbox\+ssh://!
77 say "For SSH connections, if you will use public key authentication, you may leave the username and password blank."
79 username, password = get_login_info uri, index.sources
80 Redwood::MBox::SSHLoader.new(uri, username, password, nil, !$opts[:unusual], $opts[:archive])
82 username, password = get_login_info uri, index.sources
83 Redwood::IMAP.new(uri, username, password, nil, !$opts[:unusual], $opts[:archive])
85 Redwood::MBox::Loader.new(uri, nil, !$opts[:unusual], $opts[:archive])
87 say "Adding #{source}..."
88 index.add_source source
91 say "Saving source list..."