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; regen_text; end
20 def load_in_background
21 Redwood::reporting_thread do
25 BufferManager.draw_screen
26 sleep 0.1 # ok, dirty trick.
30 BufferManager.draw_screen
38 BufferManager.draw_screen
44 @labels = LabelManager::LISTABLE_LABELS.sort_by { |t| t.to_s } +
45 LabelManager.user_labels.sort_by { |t| t.to_s }
47 counts = @labels.map do |t|
48 total = Index.num_results_for :label => t
49 unread = Index.num_results_for :labels => [t, :unread]
53 width = @labels.map { |t| t.to_s.length }.max
55 counts.map_with_index do |(t, total, unread), i|
56 if total == 0 && !LabelManager::LISTABLE_LABELS.include?(t)
57 Redwood::log "no hits for label #{t}, deleting"
65 when *LabelManager::LISTABLE_LABELS
70 @text << [[(unread == 0 ? :labellist_old_color : :labellist_new_color),
71 sprintf("%#{width + 1}s %5d %s, %5d unread", label, total, total == 1 ? " message" : "messages", unread)]]
72 yield i if block_given?
77 label = @labels[curpos]
79 BufferManager.raise_to_front BufferManager["inbox"]
81 b = BufferManager.spawn_unless_exists(label) do
82 mode = LabelSearchResultsMode.new [label]
84 b.mode.load_threads :num => b.content_height