3 class LabelListMode < LineCursorMode
5 k.add :view_results, "View messages with the selected label", :enter
6 k.add :reload, "Discard results and reload", 'D'
15 def lines; @text.length; end
16 def [] i; @text[i]; end
18 def load_in_background
19 Redwood::reporting_thread do
20 BufferManager.say("Counting labels...") { regen_text }
21 BufferManager.draw_screen
29 BufferManager.draw_screen
35 @labels = (LabelManager::LISTABLE_LABELS + LabelManager.user_labels).sort_by { |t| t.to_s }
37 counts = @labels.map do |t|
38 total = Index.num_results_for :label => t
39 unread = Index.num_results_for :labels => [t, :unread]
43 width = @labels.map { |t| t.to_s.length }.max
45 counts.map_with_index do |(t, total, unread), i|
46 if total == 0 && !LabelManager::LISTABLE_LABELS.include?(t)
47 Redwood::log "no hits for label #{t}, deleting"
55 when *LabelManager::LISTABLE_LABELS
60 @text << [[(unread == 0 ? :labellist_old_color : :labellist_new_color),
61 sprintf("%#{width + 1}s %5d %s, %5d unread", label, total, total == 1 ? " message" : "messages", unread)]]
62 yield i if block_given?
69 label = @labels[curpos]
71 BufferManager.raise_to_front BufferManager["inbox"]
73 b = BufferManager.spawn_unless_exists(label) do
74 mode = LabelSearchResultsMode.new [label]
76 b.mode.load_threads :num => b.content_height