From 6d888368dec275e16e79791e53f0e231de81b0c0 Mon Sep 17 00:00:00 2001 From: Mike Stipicevic Date: Mon, 16 Feb 2009 00:40:39 -0500 Subject: [PATCH] Added undo for archive --- lib/sup/modes/inbox-mode.rb | 35 ++++++++++++++++++++++++++++++ lib/sup/modes/thread-index-mode.rb | 21 ++++++++++++++++-- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/lib/sup/modes/inbox-mode.rb b/lib/sup/modes/inbox-mode.rb index 559892d..21eb9ac 100644 --- a/lib/sup/modes/inbox-mode.rb +++ b/lib/sup/modes/inbox-mode.rb @@ -26,12 +26,28 @@ class InboxMode < ThreadIndexMode def archive return unless cursor_thread + thread = cursor_thread # to make sure lambda only knows about 'old' cursor_thread + + undo = lambda { + thread.apply_label :inbox + add_or_unhide thread.first + } + UndoManager.register("archiving thread #{thread.first.id}", undo) + cursor_thread.remove_label :inbox hide_thread cursor_thread regen_text 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} ) + threads.each do |t| t.remove_label :inbox hide_thread t @@ -41,6 +57,15 @@ class InboxMode < ThreadIndexMode def read_and_archive return unless cursor_thread + thread = cursor_thread # to make sure lambda only knows about 'old' cursor_thread + + undo = lambda { + thread.apply_label :inbox + thread.apply_label :unread + add_or_unhide thread.first + } + UndoManager.register("reading and archiving thread ", undo) + cursor_thread.remove_label :unread cursor_thread.remove_label :inbox hide_thread cursor_thread @@ -48,6 +73,16 @@ class InboxMode < ThreadIndexMode 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}) + threads.each do |t| t.remove_label :unread t.remove_label :inbox diff --git a/lib/sup/modes/thread-index-mode.rb b/lib/sup/modes/thread-index-mode.rb index ee30284..120acad 100644 --- a/lib/sup/modes/thread-index-mode.rb +++ b/lib/sup/modes/thread-index-mode.rb @@ -259,13 +259,27 @@ EOS end def actually_toggle_archived t + thread = t + pos = curpos if t.has_label? :inbox t.remove_label :inbox + undo = lambda { + thread.apply_label :inbox + update_text_for_line pos + UpdateManager.relay self,:unarchived, thread.first + } UpdateManager.relay self, :archived, t.first else t.apply_label :inbox + undo = lambda { + thread.remove_label :inbox + update_text_for_line pos + UpdateManager.relay self, :unarchived, thread.first + } UpdateManager.relay self, :unarchived, t.first end + + return undo end def actually_toggle_spammed t @@ -290,12 +304,15 @@ EOS def toggle_archived t = cursor_thread or return - actually_toggle_archived t + undo = [actually_toggle_archived(t), lambda {self.update_text_for_line curpos}] + UndoManager.register("deleting/undeleting thread #{t.first.id}",undo) update_text_for_line curpos end def multi_toggle_archived threads - threads.each { |t| actually_toggle_archived t } + undo = threads.map { |t| actually_toggle_archived t} + UndoManager.register("deleting/undeleting #{threads.size} #{threads.size.pluralize 'thread'}", + undo << lambda {self.regen_text}) regen_text end -- 2.45.2