X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=lib%2Fsup%2Flabel.rb;h=67474c2b79ed3393aa3321e458fdb4675225dfe1;hb=b505bce62b4a3fe21c0532a9299b81e403b326dd;hp=da14df668b23ec243b62e7dc1473efe385914343;hpb=a426c914c3734e67d161d459c23c916810755ccf;p=sup diff --git a/lib/sup/label.rb b/lib/sup/label.rb index da14df6..67474c2 100644 --- a/lib/sup/label.rb +++ b/lib/sup/label.rb @@ -7,9 +7,6 @@ class LabelManager ## add/remove these via normal label mechanisms. RESERVED_LABELS = [ :starred, :spam, :draft, :unread, :killed, :sent, :deleted, :inbox, :attachment ] - ## labels which it nonetheless makes sense to search for by - LISTABLE_RESERVED_LABELS = [ :starred, :spam, :draft, :sent, :killed, :deleted, :inbox, :attachment ] - ## labels that will typically be hidden from the user HIDDEN_RESERVED_LABELS = [ :starred, :unread, :attachment ] @@ -22,31 +19,32 @@ class LabelManager [] end @labels = {} + @new_labels = {} @modified = false labels.each { |t| @labels[t] = true } - - self.class.i_am_the_instance self end - ## all listable (just user-defined at the moment) labels, ordered + def new_label? l; @new_labels.include?(l) end + + ## all labels user-defined and system, ordered ## nicely and converted to pretty strings. use #label_for to recover ## the original label. - def listable_labels + def all_labels ## uniq's only necessary here because of certain upgrade issues - (LISTABLE_RESERVED_LABELS + @labels.keys).uniq + (RESERVED_LABELS + @labels.keys).uniq end - ## all apply-able (user-defined and system listable) labels, ordered + ## all user-defined labels, ordered ## nicely and converted to pretty strings. use #label_for to recover ## the original label. - def applyable_labels + def user_defined_labels @labels.keys end ## reverse the label->string mapping, for convenience! def string_for l if RESERVED_LABELS.include? l - l.to_s.ucfirst + l.to_s.capitalize else l.to_s end @@ -61,24 +59,26 @@ class LabelManager l end end - + def << t - t = t.intern unless t.is_a? Symbol + raise ArgumentError, "expecting a symbol" unless t.is_a? Symbol unless @labels.member?(t) || RESERVED_LABELS.member?(t) @labels[t] = true + @new_labels[t] = true @modified = true end end def delete t - if @labels.delete t + if @labels.delete(t) @modified = true end end def save return unless @modified - File.open(@fn, "w") { |f| f.puts @labels.keys.sort } + File.open(@fn, "w") { |f| f.puts @labels.keys.sort_by { |l| l.to_s } } + @new_labels = {} end end