lib/sup/modes/inbox-mode.rb in sup-0.7 vs lib/sup/modes/inbox-mode.rb in sup-0.8

- old
+ new

@@ -24,37 +24,71 @@ def self.instance; @@instance; end def killable?; false; end def archive return unless cursor_thread + thread = cursor_thread # to make sure lambda only knows about 'old' cursor_thread + + UndoManager.register "archiving thread" do + thread.apply_label :inbox + add_or_unhide thread.first + end + cursor_thread.remove_label :inbox hide_thread cursor_thread regen_text end def multi_archive threads + 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 hide_thread t end regen_text end def read_and_archive return unless cursor_thread + thread = cursor_thread # to make sure lambda only knows about 'old' cursor_thread + + UndoManager.register "reading and archiving thread" do + thread.apply_label :inbox + thread.apply_label :unread + add_or_unhide thread.first + end + cursor_thread.remove_label :unread cursor_thread.remove_label :inbox hide_thread cursor_thread regen_text end def multi_read_and_archive threads + old_labels = threads.map { |t| t.labels.dup } + threads.each do |t| t.remove_label :unread t.remove_label :inbox 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 add_or_unhide m end