From: William Morgan Date: Tue, 26 May 2009 21:39:40 +0000 (-0700) Subject: enforce label uniqueness and internedness X-Git-Url: https://git.notmuchmail.org/git?a=commitdiff_plain;h=d47aacdda3ae3f356dd6658750bb4a5360e4d11c;p=sup enforce label uniqueness and internedness This fixes some bugs where sources have an "inbox" label specified, which was previously treated as different from the auto-applied :inbox label, etc. --- diff --git a/lib/sup/message.rb b/lib/sup/message.rb index bd20165..bedc03d 100644 --- a/lib/sup/message.rb +++ b/lib/sup/message.rb @@ -50,7 +50,7 @@ class Message @snippet = opts[:snippet] @snippet_contains_encrypted_content = false @have_snippet = !(opts[:snippet].nil? || opts[:snippet].empty?) - @labels = [] + (opts[:labels] || []) + @labels = (opts[:labels] || []).to_set_of_symbols @dirty = false @encrypted = false @chunks = nil @@ -172,7 +172,7 @@ class Message def has_label? t; @labels.member? t; end def add_label t return if @labels.member? t - @labels.push t + @labels = (@labels + [t]).to_set_of_symbols @dirty = true end def remove_label t @@ -186,7 +186,7 @@ class Message end def labels= l - @labels = l + @labels = l.to_set_of_symbols @dirty = true end diff --git a/lib/sup/util.rb b/lib/sup/util.rb index c54a2c0..c26b4db 100644 --- a/lib/sup/util.rb +++ b/lib/sup/util.rb @@ -403,6 +403,10 @@ class Array def last= e; self[-1] = e end def nonempty?; !empty? end + + def to_set_of_symbols + map { |x| x.is_a?(Symbol) ? x : x.intern }.uniq + end end class Time