-require 'thread'
+require 'sup'
module Redwood
@@instance = self
end
- def is_relevant? m
- m.has_label?(:inbox) && ([:spam, :deleted, :killed] & m.labels).empty?
- end
+ def is_relevant? m; (m.labels & [:spam, :deleted, :killed, :inbox]) == Set.new([:inbox]) end
## label-list-mode wants to be able to raise us if the user selects
## the "inbox" label, so we need to keep our singletonness around
return unless cursor_thread
thread = cursor_thread # to make sure lambda only knows about 'old' cursor_thread
- undo = lambda {
+ UndoManager.register "archiving thread" do
thread.apply_label :inbox
add_or_unhide thread.first
- }
- UndoManager.register("archiving thread #{thread.first.id}", undo)
+ end
cursor_thread.remove_label :inbox
hide_thread cursor_thread
end
def multi_archive threads
- undo = threads.map {|t|
- lambda{
- t.apply_label :inbox
- add_or_unhide t.first
- }}
- UndoManager.register("archiving #{threads.size} #{threads.size.pluralize 'thread'}",
- undo << lambda {regen_text} )
+ UndoManager.register "archiving #{threads.size.pluralize 'thread'}" do
+ threads.map do |t|
+ t.apply_label :inbox
+ add_or_unhide t.first
+ end
+ regen_text
+ end
threads.each do |t|
t.remove_label :inbox
return unless cursor_thread
thread = cursor_thread # to make sure lambda only knows about 'old' cursor_thread
- undo = lambda {
+ UndoManager.register "reading and archiving thread" do
thread.apply_label :inbox
thread.apply_label :unread
add_or_unhide thread.first
- }
- UndoManager.register("reading and archiving thread ", undo)
+ end
cursor_thread.remove_label :unread
cursor_thread.remove_label :inbox
end
def multi_read_and_archive threads
- undo = threads.map {|t|
- lambda {
- t.apply_label :inbox
- t.apply_label :unread
- add_or_unhide t.first
- }
- }
- UndoManager.register("reading and archiving #{threads.size} #{threads.size.pluralize 'thread'}",
- undo << lambda {regen_text})
+ old_labels = threads.map { |t| t.labels.dup }
threads.each do |t|
t.remove_label :unread
hide_thread t
end
regen_text
+
+ UndoManager.register "reading and archiving #{threads.size.pluralize 'thread'}" do
+ threads.zip(old_labels).each do |t, l|
+ t.labels = l
+ add_or_unhide t.first
+ end
+ regen_text
+ end
+
end
def handle_unarchived_update sender, m