]> git.cworth.org Git - sup/blob - lib/sup/label.rb
tokenized subject field as text
[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, :deleted ]
9
10   ## labels which it nonetheless makes sense to search for by
11   LISTABLE_LABELS = [ :starred, :spam, :draft, :sent, :killed, :deleted ]
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   def << t; @labels[t] = true unless @labels.member?(t) || RESERVED_LABELS.member?(t); end
32   def delete t; @labels.delete t; end
33   def save
34     File.open(@fn, "w") { |f| f.puts @labels.keys }
35   end
36 end
37
38 end