[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[sup-devel] [PATCH 3/4] immediate thread indexing
---
lib/sup/modes/inbox-mode.rb | 4 +++
lib/sup/modes/thread-index-mode.rb | 40 +++++++++++++----------------------
lib/sup/modes/thread-view-mode.rb | 7 ++++++
3 files changed, 26 insertions(+), 25 deletions(-)
diff --git a/lib/sup/modes/inbox-mode.rb b/lib/sup/modes/inbox-mode.rb
index ba095da..9220925 100644
--- a/lib/sup/modes/inbox-mode.rb
+++ b/lib/sup/modes/inbox-mode.rb
@@ -34,6 +34,7 @@ class InboxMode < ThreadIndexMode
cursor_thread.remove_label :inbox
hide_thread cursor_thread
regen_text
+ Index.save_thread thread
end
def multi_archive threads
@@ -50,6 +51,7 @@ class InboxMode < ThreadIndexMode
hide_thread t
end
regen_text
+ threads.each { |t| Index.save_thread t }
end
def read_and_archive
@@ -66,6 +68,7 @@ class InboxMode < ThreadIndexMode
cursor_thread.remove_label :inbox
hide_thread cursor_thread
regen_text
+ Index.save_thread thread
end
def multi_read_and_archive threads
@@ -86,6 +89,7 @@ class InboxMode < ThreadIndexMode
regen_text
end
+ threads.each { |t| Index.save_thread t }
end
def handle_unarchived_update sender, m
diff --git a/lib/sup/modes/thread-index-mode.rb b/lib/sup/modes/thread-index-mode.rb
index f6ea27c..5393189 100644
--- a/lib/sup/modes/thread-index-mode.rb
+++ b/lib/sup/modes/thread-index-mode.rb
@@ -37,7 +37,6 @@ EOS
k.add :toggle_spam, "Mark/unmark thread as spam", 'S'
k.add :toggle_deleted, "Delete/undelete thread", 'd'
k.add :kill, "Kill thread (never to be seen in inbox again)", '&'
- k.add :save, "Save changes now", '$'
k.add :jump_to_next_new, "Jump to next new thread", :tab
k.add :reply, "Reply to latest message in a thread", 'r'
k.add :reply_all, "Reply to all participants of the latest message in a thread", 'G'
@@ -269,12 +268,14 @@ EOS
UndoManager.register "toggling thread starred status", undo
update_text_for_line curpos
cursor_down
+ Index.save_thread t
end
def multi_toggle_starred threads
UndoManager.register "toggling #{threads.size.pluralize 'thread'} starred status",
threads.map { |t| actually_toggle_starred t }
regen_text
+ threads.each { |t| Index.save_thread t }
end
## returns an undo lambda
@@ -352,12 +353,14 @@ EOS
undo = actually_toggle_archived t
UndoManager.register "deleting/undeleting thread #{t.first.id}", undo, lambda { update_text_for_line curpos }
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 }
regen_text
+ threads.each { |t| Index.save_thread t }
end
def toggle_new
@@ -365,11 +368,13 @@ EOS
t.toggle_label :unread
update_text_for_line curpos
cursor_down
+ Index.save_thread t
end
def multi_toggle_new threads
threads.each { |t| t.toggle_label :unread }
regen_text
+ threads.each { |t| Index.save_thread t }
end
def multi_toggle_tagged threads
@@ -385,6 +390,7 @@ EOS
def multi_join_threads threads
@ts.join_threads threads or return
+ threads.each { |t| Index.save_thread t }
@tags.drop_all_tags # otherwise we have tag pointers to invalid threads!
update
end
@@ -421,6 +427,7 @@ EOS
UndoManager.register "marking/unmarking #{threads.size.pluralize 'thread'} as spam",
undos, lambda { regen_text }
regen_text
+ threads.each { |t| Index.save_thread t }
end
def toggle_deleted
@@ -434,6 +441,7 @@ EOS
UndoManager.register "deleting/undeleting #{threads.size.pluralize 'thread'}",
undos, lambda { regen_text }
regen_text
+ threads.each { |t| Index.save_thread t }
end
def kill
@@ -458,29 +466,7 @@ EOS
regen_text
BufferManager.flash "#{threads.size.pluralize 'thread'} killed."
- end
-
- def save background=true
- if background
- Redwood::reporting_thread("saving thread") { actually_save }
- else
- actually_save
- end
- end
-
- def actually_save
- @save_thread_mutex.synchronize do
- BufferManager.say("Saving contacts...") { ContactManager.instance.save }
- dirty_threads = @mutex.synchronize { (@threads + @hidden_threads.keys).select { |t| t.dirty? } }
- next if dirty_threads.empty?
-
- BufferManager.say("Saving threads...") do |say_id|
- dirty_threads.each_with_index do |t, i|
- BufferManager.say "Saving modified thread #{i + 1} of #{dirty_threads.length}...", say_id
- Index.save_thread_async t
- end
- end
- end
+ threads.each { |t| Index.save_thread t }
end
def cleanup
@@ -492,7 +478,8 @@ EOS
sleep 0.1 # TODO: necessary?
BufferManager.erase_flash
end
- save false
+ dirty_threads = @mutex.synchronize { (@threads + @hidden_threads.keys).select { |t| t.dirty? } }
+ fail "dirty threads remain" unless dirty_threads.empty?
super
end
@@ -546,6 +533,7 @@ EOS
end
UpdateManager.relay self, :labeled, thread.first
+ Index.save_thread thread
end
def multi_edit_labels threads
@@ -582,6 +570,8 @@ EOS
end
regen_text
end
+
+ threads.each { |t| Index.save_thread t }
end
def reply type_arg=nil
diff --git a/lib/sup/modes/thread-view-mode.rb b/lib/sup/modes/thread-view-mode.rb
index 55d81b9..99abb04 100644
--- a/lib/sup/modes/thread-view-mode.rb
+++ b/lib/sup/modes/thread-view-mode.rb
@@ -131,6 +131,7 @@ EOS
@layout[earliest].state = :detailed if earliest.has_label?(:unread) || @thread.size == 1
@thread.remove_label :unread
+ Index.save_thread @thread
regen_text
end
@@ -258,6 +259,7 @@ EOS
new_labels.each { |l| LabelManager << l }
update
UpdateManager.relay self, :labeled, @thread.first
+ Index.save_thread @thread
UndoManager.register "labeling thread" do
@thread.labels = old_labels
UpdateManager.relay self, :labeled, @thread.first
@@ -284,6 +286,7 @@ EOS
## star to the display
update
UpdateManager.relay self, :single_message_labeled, m
+ Index.save_thread @thread
end
## called when someone presses enter when the cursor is highlighting
@@ -478,6 +481,7 @@ EOS
dispatch op do
@thread.remove_label :inbox
UpdateManager.relay self, :archived, @thread.first
+ Index.save_thread @thread
UndoManager.register "archiving 1 thread" do
@thread.apply_label :inbox
UpdateManager.relay self, :unarchived, @thread.first
@@ -489,6 +493,7 @@ EOS
dispatch op do
@thread.apply_label :spam
UpdateManager.relay self, :spammed, @thread.first
+ Index.save_thread @thread
UndoManager.register "marking 1 thread as spam" do
@thread.remove_label :spam
UpdateManager.relay self, :unspammed, @thread.first
@@ -500,6 +505,7 @@ EOS
dispatch op do
@thread.apply_label :deleted
UpdateManager.relay self, :deleted, @thread.first
+ Index.save_thread @thread
UndoManager.register "deleting 1 thread" do
@thread.remove_label :deleted
UpdateManager.relay self, :undeleted, @thread.first
@@ -511,6 +517,7 @@ EOS
dispatch op do
@thread.apply_label :unread
UpdateManager.relay self, :unread, @thread.first
+ Index.save_thread @thread
end
end
--
1.6.3.3
_______________________________________________
Sup-devel mailing list
Sup-devel@rubyforge.org
http://rubyforge.org/mailman/listinfo/sup-devel