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