]> git.cworth.org Git - sup/blobdiff - lib/sup/modes/label-list-mode.rb
Merge branch 'hook-local-vars'
[sup] / lib / sup / modes / label-list-mode.rb
index 132b654066a8f107e2e52d7d2622c722e1e65ea6..f65ec2e2080f2f823b1fa102fb77d2cc5f4cbae5 100644 (file)
@@ -48,12 +48,12 @@ protected
 
   def regen_text
     @text = []
-    labels = LabelManager.listable_labels
+    labels = LabelManager.all_labels
 
     counts = labels.map do |label|
       string = LabelManager.string_for label
       total = Index.num_results_for :label => label
-      unread = Index.num_results_for :labels => [label, :unread]
+      unread = (label == :unread)? total : Index.num_results_for(:labels => [label, :unread])
       [label, string, total, unread]
     end.sort_by { |l, s, t, u| s.downcase }
 
@@ -65,8 +65,15 @@ protected
 
     @labels = []
     counts.map do |label, string, total, unread|
-      if total == 0 && !LabelManager::RESERVED_LABELS.include?(label)
-        Redwood::log "no hits for label #{label}, deleting"
+      ## if we've done a search and there are no messages for this label, we can delete it from the
+      ## list. BUT if it's a brand-new label, the user may not have sync'ed it to the index yet, so
+      ## don't delete it in this case.
+      ##
+      ## this is all a hack. what should happen is:
+      ##   TODO make the labelmanager responsible for label counts
+      ## and then it can listen to labeled and unlabeled events, etc.
+      if total == 0 && !LabelManager::RESERVED_LABELS.include?(label) && !LabelManager.new_label?(label)
+        debug "no hits for label #{label}, deleting"
         LabelManager.delete label
         next
       end