sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit 4988359eb09ed23b19ab9ecf99560cf5c381dd76
parent 359c7b75a0d5c9a131b117492776fa4ec9bcc390
Author: wmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Date:   Sun, 28 Oct 2007 17:38:45 +0000

bugfix: label viewing and editing in thread-view-mode not quite right

git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@641 5c8cc53c-5e98-4d25-b20a-d8db53a31250

Diffstat:
M lib/sup/label.rb | 6 +++---
M lib/sup/modes/thread-view-mode.rb | 7 +++++--
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/lib/sup/label.rb b/lib/sup/label.rb
@@ -5,12 +5,12 @@ class LabelManager
 
   ## labels that have special semantics. user will be unable to
   ## add/remove these via normal label mechanisms.
-  RESERVED_LABELS = [ :starred, :spam, :draft, :unread, :killed, :sent, :deleted ]
+  RESERVED_LABELS = [ :starred, :spam, :draft, :unread, :killed, :sent, :deleted, :inbox ]
 
   ## labels which it nonetheless makes sense to search for by
-  LISTABLE_RESERVED_LABELS = [ :starred, :spam, :draft, :sent, :killed, :deleted ]
+  LISTABLE_RESERVED_LABELS = [ :starred, :spam, :draft, :sent, :killed, :deleted, :inbox ]
 
-  ## labels that will never be displayed to the user
+  ## labels that will typically be hidden from the user
   HIDDEN_RESERVED_LABELS = [ :starred, :unread ]
 
   def initialize fn
diff --git a/lib/sup/modes/thread-view-mode.rb b/lib/sup/modes/thread-view-mode.rb
@@ -140,10 +140,12 @@ class ThreadViewMode < LineCursorMode
 
   def edit_labels
     m = @message_lines[curpos] or return
+
+    reserved_labels = m.labels.select { |l| LabelManager::RESERVED_LABELS.include? l }
     new_labels = BufferManager.ask_for_labels :label, "Labels for message: ", m.labels
 
     return unless new_labels
-    m.labels = new_labels
+    m.labels = (reserved_labels + new_labels).uniq
     new_labels.each { |l| LabelManager << l }
     ## TODO: don't recalculate EVERYTHING
     update
@@ -441,11 +443,12 @@ private
         rest += format_person_list "   Bcc: ", m.bcc
       end
 
+      show_labels = m.labels - LabelManager::HIDDEN_RESERVED_LABELS
       rest += [
         "   Date: #{m.date.strftime DATE_FORMAT} (#{m.date.to_nice_distance_s})",
         "   Subject: #{m.subj}",
         (parent ? "   In reply to: #{parent.from.mediumname}'s message of #{parent.date.strftime DATE_FORMAT}" : nil),
-        m.labels.empty? ? nil : "   Labels: #{m.labels.join(', ')}",
+        show_labels.empty? ? nil : "   Labels: #{show_labels.join(', ')}",
       ].compact
       
       from + rest.map { |l| [[color, prefix + "  " + l]] }