lib/sup.rb in sup-0.2 vs lib/sup.rb in sup-0.3

- old
+ new

@@ -30,11 +30,11 @@ end end end module Redwood - VERSION = "0.2" + VERSION = "0.3" BASE_DIR = ENV["SUP_BASE"] || File.join(ENV["HOME"], ".sup") CONFIG_FN = File.join(BASE_DIR, "config.yaml") SOURCE_FN = File.join(BASE_DIR, "sources.yaml") LABEL_FN = File.join(BASE_DIR, "labels.txt") @@ -58,24 +58,20 @@ else "utf-8" end ## record exceptions thrown in threads nicely - $exception = nil - def reporting_thread + def reporting_thread name if $opts[:no_threads] yield else ::Thread.new do begin yield rescue Exception => e - File.open("sup-exception-log.txt", "w") do |f| - f.puts "--- #{e.class.name} at #{Time.now}" - f.puts e.message, e.backtrace - end - $exception ||= e + $exceptions ||= [] + $exceptions << [e, name] raise end end end end @@ -122,31 +118,37 @@ Redwood::PersonManager.save if Redwood::PersonManager.instantiated? Redwood::BufferManager.deinstantiate! if Redwood::BufferManager.instantiated? end ## not really a good place for this, so I'll just dump it here. + ## + ## a source error is either a FatalSourceError or an OutOfSyncSourceError. + ## the superclass SourceError is just a generic. def report_broken_sources opts={} return unless BufferManager.instantiated? - broken_sources = Index.usual_sources.select { |s| s.error.is_a? FatalSourceError } + broken_sources = Index.sources.select { |s| s.error.is_a? FatalSourceError } unless broken_sources.empty? - BufferManager.spawn "Broken source notification", TextMode.new(<<EOM), opts + BufferManager.spawn_unless_exists("Broken source notification for #{broken_sources.join(',')}", opts) do + TextMode.new(<<EOM) Source error notification ------------------------- Hi there. It looks like one or more message sources is reporting errors. Until this is corrected, messages from these sources cannot be viewed, and new messages will not be detected. #{broken_sources.map { |s| "Source: " + s.to_s + "\n Error: " + s.error.message.wrap(70).join("\n ")}.join("\n\n")} EOM #' stupid ruby-mode + end end - desynced_sources = Index.usual_sources.select { |s| s.error.is_a? OutOfSyncSourceError } + desynced_sources = Index.sources.select { |s| s.error.is_a? OutOfSyncSourceError } unless desynced_sources.empty? - BufferManager.spawn "Out-of-sync source notification", TextMode.new(<<EOM), opts + BufferManager.spawn_unless_exists("Out-of-sync source notification for #{broken_sources.join(',')}", opts) do + TextMode.new(<<EOM) Out-of-sync source notification ------------------------------- Hi there. It looks like one or more sources has fallen out of sync with my index. This can happen when you modify these sources with @@ -160,10 +162,11 @@ "\n Error: " + s.error.message.wrap(70).join("\n ") + "\n Fix: sup-sync --changed #{s.to_s}" end} EOM #' stupid ruby-mode + end end end module_function :save_yaml_obj, :load_yaml_obj, :start, :finish, :report_broken_sources @@ -196,10 +199,11 @@ :editor => ENV["EDITOR"] || "/usr/bin/vim -f -c 'setlocal spell spelllang=en_us' -c 'set filetype=mail'", :thread_by_subject => false, :edit_signature => false, :ask_for_cc => true, :ask_for_bcc => false, + :ask_for_subject => true, :confirm_no_attachments => true, :confirm_top_posting => true, } begin FileUtils.mkdir_p Redwood::BASE_DIR @@ -215,10 +219,24 @@ ## we have to initialize this guy first, because other classes must ## reference it in order to register hooks, and they do that at parse ## time. Redwood::HookManager.new Redwood::HOOK_DIR +## everything we need to get logging working +require "sup/buffer" +require "sup/keymap" +require "sup/mode" +require "sup/modes/scroll-mode" +require "sup/modes/text-mode" +require "sup/modes/log-mode" +require "sup/logger" +module Redwood + def log s; Logger.log s; end + module_function :log +end + +## now everything else (which can feel free to call Redwood::log at load time) require "sup/update" require "sup/suicide" require "sup/message-chunks" require "sup/message" require "sup/source" @@ -228,22 +246,17 @@ require "sup/person" require "sup/account" require "sup/thread" require "sup/index" require "sup/textfield" -require "sup/buffer" -require "sup/keymap" -require "sup/mode" require "sup/colormap" require "sup/label" require "sup/contact" require "sup/tagger" require "sup/draft" require "sup/poll" require "sup/crypto" -require "sup/modes/scroll-mode" -require "sup/modes/text-mode" require "sup/modes/line-cursor-mode" require "sup/modes/help-mode" require "sup/modes/edit-message-mode" require "sup/modes/compose-mode" require "sup/modes/resume-mode" @@ -256,20 +269,13 @@ require "sup/modes/label-search-results-mode" require "sup/modes/search-results-mode" require "sup/modes/person-search-results-mode" require "sup/modes/inbox-mode" require "sup/modes/buffer-list-mode" -require "sup/modes/log-mode" require "sup/modes/poll-mode" require "sup/modes/file-browser-mode" require "sup/modes/completion-mode" -require "sup/logger" require "sup/sent" - -module Redwood - def log s; Logger.log s; end - module_function :log -end $:.each do |base| d = File.join base, "sup/share/modes/" Redwood::Mode.load_all_modes d if File.directory? d end