]> git.cworth.org Git - sup/blob - lib/sup/label.rb
fixed bug in label assignment for new messages and cleaned up logging messages
[sup] / lib / sup / label.rb
1 module Redwood
2
3 class LabelManager
4   include Singleton
5
6   ## labels that have special semantics. user will be unable to
7   ## add/remove these via normal label mechanisms.
8   RESERVED_LABELS = [ :starred, :spam, :draft, :unread, :killed, :sent ]
9
10   ## labels which it nonetheless makes sense to search for by
11   LISTABLE_LABELS = [ :starred, :spam, :draft, :sent ]
12
13   ## labels that will never be displayed to the user
14   HIDDEN_LABELS = [ :starred, :unread ]
15
16   def initialize fn
17     @fn = fn
18     labels = 
19       if File.exists? fn
20         IO.readlines(fn).map { |x| x.chomp.intern }
21       else
22         []
23       end
24     @labels = {}
25     labels.each { |t| @labels[t] = true }
26
27     self.class.i_am_the_instance self
28   end
29
30   def user_labels; @labels.keys; end
31
32   def << t; @labels[t] = true unless @labels.member?(t) || RESERVED_LABELS.member?(t); end
33
34   def delete t; @labels.delete t; end
35
36   def save
37     File.open(@fn, "w") { |f| f.puts @labels.keys }
38   end
39 end
40
41 end