Subject: Re: [sup-devel] [PATCH] copy thread when spawning ThreadViewMode

From: Rich Lane <[email-masked]>
Date: Mon, 25 Jan 2010 11:21:41 -0500

This breaks ThreadIndexMode#launch_another_thread. I'll send a
new patch.
_______________________________________________
Sup-devel mailing list
[email-masked]
http://rubyforge.org/mailman/listinfo/sup-devel

---

From: Rich Lane <[email-masked]>
Date: Thu, 21 Jan 2010 20:25:16 -0800

Currently ThreadIndexMode just passes a reference to the selected thread when
spawning a ThreadViewMode. This is a problem because as long as the original
ThreadIndexMode is alive that thread will be updated with new messages, but
ThreadViewMode will not display them. This can lead to the user unknowingly
archiving a thread containing unread messages.
---
 lib/sup/modes/thread-index-mode.rb |   16 +++++++++++++---
 1 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/lib/sup/modes/thread-index-mode.rb b/lib/sup/modes/thread-index-mode.rb
index a6bb2b9..ca5e1f3 100644
--- a/lib/sup/modes/thread-index-mode.rb
+++ b/lib/sup/modes/thread-index-mode.rb
@@ -94,6 +94,18 @@ EOS
     load_threads :num => buffer.content_height
   end
 
+  def copy_thread t
+    ts = ThreadSet.new nil
+    t.each_with_index do |(m, *o), i|
+      next unless m
+      yield i
+      m.load_from_source!
+      ts.add_message m
+    end
+    fail unless ts.threads.size == 1
+    ts.threads.first
+  end
+
   ## open up a thread view window
   def select t=nil, when_done=nil
     t ||= cursor_thread or return
@@ -102,10 +114,8 @@ EOS
       num = t.size
       message = "Loading #{num.pluralize 'message body'}..."
       BufferManager.say(message) do |sid|
-        t.each_with_index do |(m, *o), i|
-          next unless m
+        t = copy_thread t do |i|
           BufferManager.say "#{message} (#{i}/#{num})", sid if t.size > 1
-          m.load_from_source! 
         end
       end
       mode = ThreadViewMode.new t, @hidden_labels, self
-- 
1.6.3.3