Options:
EOS
-end #' stupid ruby-mode
+end
def axe q, default=nil
- ans =
- if default && !default.empty?
+ ans = if default && !default.empty?
ask "#{q} (enter for \"#{default}\"): "
else
ask "#{q}: "
say "Ok, adding a new source."
choose do |menu|
- menu.prompt = "What type of mail source is it?"
+ menu.prompt = "What type of mail source is it? "
menu.choice("mbox file") { type = :mbox }
menu.choice("maildir directory") { type = :maildir }
menu.choice("remote mbox file (accessible via ssh)") { type = :mboxssh }
end
while true do
- say "Now for the details."
-
- components =
- case type
- when :mbox
- fn = axe "What's the full path to the mbox file?", ENV["MAIL"] #"srm
- return if fn.nil? || fn.empty?
- { :scheme => "mbox", :path => fn }
- when :maildir
- fn = axe "What's the full path to the maildir directory?", ENV["MAIL"] #"srm
- return if fn.nil? || fn.empty?
- { :scheme => "maildir", :path => fn }
- when :mboxssh
- srv = axe "What machine is the mbox file located on?", $last_server
- return if srv.nil? || srv.empty?
- $last_server = srv
- fn = axe "What's the full path to the mbox file?", ENV["MAIL"] #"srm
- return if fn.nil? || fn.empty?
- fn = "/#{fn}" # lame
- { :scheme => "mbox+ssh", :host => srv, :path => fn }
- when :imap, :imaps
- srv = axe "What is the IMAP server (host, or host:port notation)?", $last_server
- return if srv.nil? || srv.empty?
- $last_server = srv
- fn = axe "What's the folder path?", "INBOX" #"srm
- return if fn.nil? || fn.empty?
- fn = "/#{fn}" # lame
-
- if srv =~ /^(\w+):(\d+)$/
- host, port = $1, $2.to_i
- else
- host, port = srv, nil
- end
- { :scheme => type.to_s, :host => host, :port => port, :path => fn }
- end
-
- uri =
- begin
- URI::Generic.build components
- rescue URI::Error => e
- say "Whoopsie! I couldn't build a URI from that: #{e.message}"
- if axe_yes("Try again?") then next else return end
+ say "Ok, now for the details."
+
+ default_labels, components = case type
+ when :mbox
+ $last_fn ||= ENV["MAIL"]
+ fn = axe "What's the full path to the mbox file?", $last_fn
+ return if fn.nil? || fn.empty?
+
+ $last_fn = fn
+ [Redwood::MBox::Loader.suggest_labels_for(fn),
+ { :scheme => "mbox", :path => fn }]
+ when :maildir
+ $last_fn ||= ENV["MAIL"]
+ fn = axe "What's the full path to the maildir directory?", $last_fn
+ return if fn.nil? || fn.empty?
+
+ $last_fn = fn
+ [Redwood::Maildir.suggest_labels_for(fn),
+ { :scheme => "maildir", :path => fn }]
+ when :mboxssh
+ $last_server ||= "localhost"
+ srv = axe "What machine is the mbox file located on?", $last_server
+ return if srv.nil? || srv.empty?
+ $last_server = srv
+
+ fn = axe "What's the path to the mbox file?", $last_fn
+ return if fn.nil? || fn.empty?
+ $last_fn = fn
+ fn = "/#{fn}" # lame
+ [Redwood::MBox::SSHLoader.suggest_labels_for(fn),
+ { :scheme => "mbox+ssh", :host => srv, :path => fn }]
+ when :imap, :imaps
+ $last_server ||= "localhost"
+ srv = axe "What is the IMAP server (host, or host:port notation)?", $last_server
+ return if srv.nil? || srv.empty?
+ $last_server = srv
+
+ $last_folder ||= "INBOX"
+ fn = axe "What's the folder path?", $last_folder
+ return if fn.nil? || fn.empty?
+ $last_folder = fn
+
+ fn = "/#{fn}"
+ if srv =~ /^(\S+):(\d+)$/
+ host, port = $1, $2.to_i
+ else
+ host, port = srv, nil
end
+ [Redwood::IMAP.suggest_labels_for(fn),
+ { :scheme => type.to_s, :host => host, :port => port, :path => fn }]
+ end
+
+ uri = begin
+ URI::Generic.build components
+ rescue URI::Error => e
+ say "Whoopsie! I couldn't build a URI from that: #{e.message}"
+ if axe_yes("Try again?") then next else return end
+ end
- say "I'm going to add this source: #{uri}."
+ say "I'm going to add this source: #{uri}"
unless axe("Does that look right?", "y") =~ /^y|yes$/i
if axe_yes("Try again?") then next else return end
end
usual = axe_yes "Does this source ever receive new messages?", "y"
- archive = usual ? axe_yes("Should those new messages be automatically archived?") : false
-
+ archive = usual ? axe_yes("Should new messages be automatically archived? (I.e. not appear in your inbox, though still be accessible via search.)") : false
+
+ labels_str = axe("Enter any labels to be automatically added to all messages from this source, separated by spaces (or 'none')", default_labels.join(","))
+
+ labels = if labels_str =~ /^\s*none\s*$/i
+ nil
+ else
+ labels_str.split(/\s+/)
+ end
+
cmd = build_cmd "sup-add"
cmd += " --unusual" unless usual
cmd += " --archive" if archive
+ cmd += " --labels=#{labels.join(',')}" if labels && !labels.empty?
cmd += " #{uri}"
puts "Ok, trying to run \"#{cmd}\"..."
$terminal.wrap_at = :auto
Redwood::start
-index = Redwood::Index.new
-index.load_sources
+index = Redwood::Index.init
+Redwood::SourceManager.load_sources
say <<EOS
Howdy neighbor! This here's sup-config, ready to help you jack in to
with your amazing keyboarding skills! Jump from email to email with
nary a click of the mouse!
-Just answer these simple questions and you'll be on your way! Press
-enter at any point to accept the default answer.
+Just answer these simple questions and you'll be on your way.
EOS
-#' stupid ruby-mode
account = $config[:accounts][:default]
name = axe "What's your name?", account[:name]
-email = axe "What's your email address?", account[:email] #'srm
+email = axe "What's your (primary) email address?", account[:email]
-say "Ok, your header will look like this:"
+say "Ok, your from header will look like this:"
say " From: #{name} <#{email}>"
say "\nDo you have any alternate email addresses that also receive email?"
$config[:accounts][:default][:signature] = sigfn
$config[:editor] = editor
-Redwood::save_yaml_obj $config, Redwood::CONFIG_FN
-
-say "Ok, I've saved you up a nice lil' #{Redwood::CONFIG_FN}."
-
done = false
until done
say "\nNow, we'll tell Sup where to find all your email."
- index.load_sources
+ Redwood::SourceManager.load_sources
say "Current sources:"
- if index.sources.empty?
+ if Redwood::SourceManager.sources.empty?
say " No sources!"
else
- index.sources.each { |s| puts "* #{s}" }
+ Redwood::SourceManager.sources.each { |s| puts "* #{s}" }
end
say "\n"
choose do |menu|
- menu.prompt = "Your wish?"
+ menu.prompt = "Your wish? "
menu.choice("Add a new source.") { add_source }
menu.choice("Done adding sources!") { done = true }
end
end
+say "\nSup needs to know where to store your sent messages."
+say "Only sources capable of storing mail will be listed.\n\n"
+
+Redwood::SourceManager.load_sources
+if Redwood::SourceManager.sources.empty?
+ say "\nUsing the default sup://sent, since you haven't configured other sources yet."
+ $config[:sent_source] = 'sup://sent'
+else
+ # this handles the event that source.yaml already contains the SentLoader
+ # source.
+ have_sup_sent = false
+
+ choose do |menu|
+ menu.prompt = "Store my sent mail in? "
+
+ menu.choice('Default (an mbox in ~/.sup, aka sup://sent)') { $config[:sent_source] = 'sup://sent'} unless have_sup_sent
+
+ valid_sents = Redwood::SourceManager.sources.each do |s|
+ have_sup_sent = true if s.to_s.eql?('sup://sent')
+ menu.choice(s.to_s) { $config[:sent_source] = s.to_s } if s.respond_to? :store_message
+ end
+ end
+end
+
+Redwood::save_yaml_obj $config, Redwood::CONFIG_FN
+
+say "Ok, I've saved you up a nice lil' #{Redwood::CONFIG_FN}."
+
say <<EOS
-Ok. The final step is to import all your messages into the Sup index.
+The final step is to import all your messages into the Sup index.
Depending on how many messages are in the sources, this could take
quite a while.
-IMPORTANT NOTE: this import will archive messages if the source is
-marked archival, and won't otherwise. It will preserve read/unread
-status as given by the source, and it will automatically add one label
-per source. All of this behavior can be controlled on per-source
-basis by running sup-sync manually.
-
EOS
-#'
+
if axe_yes "Run sup-sync to import all messages now?"
while true
cmd = build_cmd("sup-sync") + " --all-sources"
Just one last command:
- sup
+ #{build_cmd "sup"}
Have fun!
EOS