5 class InboxMode < ThreadIndexMode
7 ## overwrite toggle_archived with archive
8 k.add :archive, "Archive thread (remove from inbox)", 'a'
9 k.add :read_and_archive, "Archive thread (remove from inbox) and mark read", 'A'
13 super [:inbox, :sent, :draft], { :label => :inbox, :skip_killed => true }
14 raise "can't have more than one!" if defined? @@instance
19 m.has_label?(:inbox) && ([:spam, :deleted, :killed] & m.labels).empty?
22 ## label-list-mode wants to be able to raise us if the user selects
23 ## the "inbox" label, so we need to keep our singletonness around
24 def self.instance; @@instance; end
25 def killable?; false; end
28 return unless cursor_thread
29 thread = cursor_thread # to make sure lambda only knows about 'old' cursor_thread
31 UndoManager.register "archiving thread" do
32 thread.apply_label :inbox
33 add_or_unhide thread.first
36 cursor_thread.remove_label :inbox
37 hide_thread cursor_thread
41 def multi_archive threads
42 UndoManager.register "archiving #{threads.size.pluralize 'thread'}" do
58 return unless cursor_thread
59 thread = cursor_thread # to make sure lambda only knows about 'old' cursor_thread
61 UndoManager.register "reading and archiving thread" do
62 thread.apply_label :inbox
63 thread.apply_label :unread
64 add_or_unhide thread.first
67 cursor_thread.remove_label :unread
68 cursor_thread.remove_label :inbox
69 hide_thread cursor_thread
73 def multi_read_and_archive threads
74 old_labels = threads.map { |t| t.labels.dup }
77 t.remove_label :unread
83 UndoManager.register "reading and archiving #{threads.size.pluralize 'thread'}" do
84 threads.zip(old_labels).each do |t, l|
93 def handle_unarchived_update sender, m
97 def handle_archived_update sender, m
98 t = thread_containing(m) or return
104 super + " #{Index.size} messages in index"