Since there is no explicit sync any longer, any action that has an Index.save_thread must also repeat the save when the action is undone. Failure to do this will result in an exception upon quit when the index notices that there are still dirty messages. --- lib/sup/modes/inbox-mode.rb | 4 ++++ lib/sup/modes/thread-index-mode.rb | 18 ++++++++++++------ lib/sup/modes/thread-view-mode.rb | 4 ++++ 3 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/lib/sup/modes/inbox-mode.rb b/lib/sup/modes/inbox-mode.rb index 852ddb7..1b8eaed 100644 --- a/lib/sup/modes/inbox-mode.rb +++ b/lib/sup/modes/inbox-mode.rb @@ -37,6 +37,7 @@ class InboxMode < ThreadIndexMode UndoManager.register "archiving thread" do thread.apply_label :inbox add_or_unhide thread.first + Index.save_thread thread end cursor_thread.remove_label :inbox @@ -50,6 +51,7 @@ class InboxMode < ThreadIndexMode threads.map do |t| t.apply_label :inbox add_or_unhide t.first + Index.save_thread t end regen_text end @@ -71,6 +73,7 @@ class InboxMode < ThreadIndexMode thread.apply_label :inbox thread.apply_label :unread if was_unread add_or_unhide thread.first + Index.save_thread thread end cursor_thread.remove_label :unread @@ -94,6 +97,7 @@ class InboxMode < ThreadIndexMode threads.zip(old_labels).each do |t, l| t.labels = l add_or_unhide t.first + Index.save_thread t end regen_text end diff --git a/lib/sup/modes/thread-index-mode.rb b/lib/sup/modes/thread-index-mode.rb index a5bd344..28cb858 100644 --- a/lib/sup/modes/thread-index-mode.rb +++ b/lib/sup/modes/thread-index-mode.rb @@ -265,7 +265,7 @@ EOS def toggle_starred t = cursor_thread or return undo = actually_toggle_starred t - UndoManager.register "toggling thread starred status", undo + UndoManager.register "toggling thread starred status", undo, lambda { Index.save_thread t } update_text_for_line curpos cursor_down Index.save_thread t @@ -273,7 +273,8 @@ EOS def multi_toggle_starred threads UndoManager.register "toggling #{threads.size.pluralize 'thread'} starred status", - threads.map { |t| actually_toggle_starred t } + threads.map { |t| actually_toggle_starred t }, + lambda { threads.each { |t| Index.save_thread t } } regen_text threads.each { |t| Index.save_thread t } end @@ -351,14 +352,16 @@ EOS def toggle_archived t = cursor_thread or return undo = actually_toggle_archived t - UndoManager.register "deleting/undeleting thread #{t.first.id}", undo, lambda { update_text_for_line curpos } + UndoManager.register "deleting/undeleting thread #{t.first.id}", undo, lambda { update_text_for_line curpos }, + lambda { Index.save_thread t } update_text_for_line curpos Index.save_thread t end def multi_toggle_archived threads undos = threads.map { |t| actually_toggle_archived t } - UndoManager.register "deleting/undeleting #{threads.size.pluralize 'thread'}", undos, lambda { regen_text } + UndoManager.register "deleting/undeleting #{threads.size.pluralize 'thread'}", undos, lambda { regen_text }, + lambda { threads.each { |t| Index.save_thread t } } regen_text threads.each { |t| Index.save_thread t } end @@ -425,7 +428,7 @@ EOS undos = threads.map { |t| actually_toggle_spammed t } threads.each { |t| HookManager.run("mark-as-spam", :thread => t) } UndoManager.register "marking/unmarking #{threads.size.pluralize 'thread'} as spam", - undos, lambda { regen_text } + undos, lambda { regen_text }, lambda { threads.each { |t| Index.save_thread t } } regen_text threads.each { |t| Index.save_thread t } end @@ -439,7 +442,7 @@ EOS def multi_toggle_deleted threads undos = threads.map { |t| actually_toggle_deleted t } UndoManager.register "deleting/undeleting #{threads.size.pluralize 'thread'}", - undos, lambda { regen_text } + undos, lambda { regen_text }, lambda { threads.each { |t| Index.save_thread t } } regen_text threads.each { |t| Index.save_thread t } end @@ -455,6 +458,7 @@ EOS threads.each do |t| t.remove_label :killed add_or_unhide t.first + Index.save_thread t end regen_text end @@ -530,6 +534,7 @@ EOS thread.labels = old_labels update_text_for_line pos UpdateManager.relay self, :labeled, thread.first + Index.save_thread thread end UpdateManager.relay self, :labeled, thread.first @@ -567,6 +572,7 @@ EOS threads.zip(old_labels).map do |t, old_labels| t.labels = old_labels UpdateManager.relay self, :labeled, t.first + Index.save_thread t end regen_text end diff --git a/lib/sup/modes/thread-view-mode.rb b/lib/sup/modes/thread-view-mode.rb index 7c0b869..b08c819 100644 --- a/lib/sup/modes/thread-view-mode.rb +++ b/lib/sup/modes/thread-view-mode.rb @@ -279,6 +279,7 @@ EOS Index.save_thread @thread UndoManager.register "labeling thread" do @thread.labels = old_labels + Index.save_thread @thread UpdateManager.relay self, :labeled, @thread.first end end @@ -527,6 +528,7 @@ EOS Index.save_thread @thread UndoManager.register "archiving 1 thread" do @thread.apply_label :inbox + Index.save_thread @thread UpdateManager.relay self, :unarchived, @thread.first end end @@ -539,6 +541,7 @@ EOS Index.save_thread @thread UndoManager.register "marking 1 thread as spam" do @thread.remove_label :spam + Index.save_thread @thread UpdateManager.relay self, :unspammed, @thread.first end end @@ -551,6 +554,7 @@ EOS Index.save_thread @thread UndoManager.register "deleting 1 thread" do @thread.remove_label :deleted + Index.save_thread @thread UpdateManager.relay self, :undeleted, @thread.first end end -- 1.6.5 _______________________________________________ Sup-devel mailing list Sup-devel@rubyforge.org http://rubyforge.org/mailman/listinfo/sup-devel