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 ]
10 ## labels which it nonetheless makes sense to search for by
11 LISTABLE_RESERVED_LABELS = [ :starred, :spam, :draft, :sent, :killed, :deleted ]
13 ## labels that will never be displayed to the user
14 HIDDEN_RESERVED_LABELS = [ :starred, :unread ]
20 IO.readlines(fn).map { |x| x.chomp.intern }
25 labels.each { |t| @labels[t] = true }
27 self.class.i_am_the_instance self
30 ## all listable (user-defined and system listable) labels, ordered
31 ## nicely and converted to pretty strings. use #label_for to recover
32 ## the original label.
33 def listable_label_strings
34 LISTABLE_RESERVED_LABELS.sort_by { |l| l.to_s }.map { |l| l.to_s.ucfirst } +
35 @labels.keys.map { |l| l.to_s }.sort
38 ## reverse the label->string mapping, for convenience!
40 string.downcase.intern
43 def << t; @labels[t] = true unless @labels.member?(t) || RESERVED_LABELS.member?(t); end
44 def delete t; @labels.delete t; end
46 File.open(@fn, "w") { |f| f.puts @labels.keys }