]> git.cworth.org Git - sup/blob - lib/sup.rb
thread abort on exception moved
[sup] / lib / sup.rb
1 require 'rubygems'
2 require 'yaml'
3 require 'zlib'
4 require 'thread'
5 require 'fileutils'
6
7 class Object
8   ## this is for debugging purposes because i keep calling #id on the
9   ## wrong object and i want it to throw an exception
10   def id
11     raise "wrong id called"
12   end
13 end
14
15 module Redwood
16   VERSION = "0.0.2"
17
18   BASE_DIR   = File.join(ENV["HOME"], ".sup")
19   CONFIG_FN  = File.join(BASE_DIR, "config.yaml")
20   SOURCE_FN  = File.join(BASE_DIR, "sources.yaml")
21   LABEL_FN   = File.join(BASE_DIR, "labels.txt")
22   CONTACT_FN = File.join(BASE_DIR, "contacts.txt")
23   DRAFT_DIR  = File.join(BASE_DIR, "drafts")
24   SENT_FN    = File.join(BASE_DIR, "sent.mbox")
25
26   YAML_DOMAIN = "masanjin.net"
27   YAML_DATE = "2006-10-01"
28
29 ## one-stop shop for yamliciousness
30   def register_yaml klass, props
31     vars = props.map { |p| "@#{p}" }
32     path = klass.name.gsub(/::/, "/")
33     
34     klass.instance_eval do
35       define_method(:to_yaml_properties) { vars }
36       define_method(:to_yaml_type) { "!#{YAML_DOMAIN},#{YAML_DATE}/#{path}" }
37     end
38
39     YAML.add_domain_type("#{YAML_DOMAIN},#{YAML_DATE}", path) do |type, val|
40       klass.new(*props.map { |p| val[p] })
41     end
42   end
43
44   def save_yaml_obj object, fn, compress=false
45     if compress
46       Zlib::GzipWriter.open(fn) { |f| f.puts object.to_yaml }
47     else
48       File.open(fn, "w") { |f| f.puts object.to_yaml }
49     end
50   end
51
52   def load_yaml_obj fn, compress=false
53     if File.exists? fn
54       if compress
55         Zlib::GzipReader.open(fn) { |f| YAML::load f }
56       else
57         YAML::load_file fn
58       end
59     end
60   end
61
62   module_function :register_yaml, :save_yaml_obj, :load_yaml_obj
63 end
64
65 ## set up default configuration file
66 if File.exists? Redwood::CONFIG_FN
67   $config = Redwood::load_yaml_obj Redwood::CONFIG_FN
68 else
69   $config = {
70     :accounts => {
71       :default => {
72         :name => "Your Name Here",
73         :email => "your.email.here@domain.tld",
74         :alternates => [],
75         :sendmail => "/usr/sbin/sendmail -oem -ti",
76         :sig_file => File.join(ENV["HOME"], ".signature")
77       }
78     },
79     :editor => ENV["EDITOR"] || "/usr/bin/vi",
80   }
81   begin
82     FileUtils.mkdir_p Redwood::BASE_DIR
83     Redwood::save_yaml_obj $config, Redwood::CONFIG_FN
84   rescue StandardError => e
85     $stderr.puts "warning: #{e.message}"
86   end
87 end
88
89 require "sup/util"
90 require "sup/update"
91 require "sup/message"
92 require "sup/source"
93 require "sup/mbox"
94 require "sup/imap"
95 require "sup/person"
96 require "sup/account"
97 require "sup/thread"
98 require "sup/index"
99 require "sup/textfield"
100 require "sup/buffer"
101 require "sup/keymap"
102 require "sup/mode"
103 require "sup/colormap"
104 require "sup/label"
105 require "sup/contact"
106 require "sup/tagger"
107 require "sup/draft"
108 require "sup/poll"
109 require "sup/modes/scroll-mode"
110 require "sup/modes/text-mode"
111 require "sup/modes/line-cursor-mode"
112 require "sup/modes/help-mode"
113 require "sup/modes/edit-message-mode"
114 require "sup/modes/compose-mode"
115 require "sup/modes/resume-mode"
116 require "sup/modes/forward-mode"
117 require "sup/modes/reply-mode"
118 require "sup/modes/label-list-mode"
119 require "sup/modes/contact-list-mode"
120 require "sup/modes/thread-view-mode"
121 require "sup/modes/thread-index-mode"
122 require "sup/modes/label-search-results-mode"
123 require "sup/modes/search-results-mode"
124 require "sup/modes/person-search-results-mode"
125 require "sup/modes/inbox-mode"
126 require "sup/modes/buffer-list-mode"
127 require "sup/modes/log-mode"
128 require "sup/modes/poll-mode"
129 require "sup/logger"
130 require "sup/sent"
131
132 module Redwood
133   def log s; Logger.log s; end
134   module_function :log
135 end
136
137 $:.each do |base|
138   d = File.join base, "sup/share/modes/"
139   Redwood::Mode.load_all_modes d if File.directory? d
140 end