sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit f4fd908dbe5ed6a8b256256d71f56d135c95f452
parent f6647b188d02b479b7b8806f4647922eb388e7ba
Author: wmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Date:   Sat, 24 Nov 2007 19:58:23 +0000

move module-style spawn_xxx to class method style



git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@716 5c8cc53c-5e98-4d25-b20a-d8db53a31250

Diffstat:
M bin/sup | 23 +++++------------------
M lib/sup/modes/compose-mode.rb | 24 +++++++++++-------------
M lib/sup/modes/forward-mode.rb | 22 ++++++++++------------
M lib/sup/modes/label-search-results-mode.rb | 14 ++++++++++++++
M lib/sup/modes/thread-index-mode.rb | 4 +---
M lib/sup/modes/thread-view-mode.rb | 5 +----
6 files changed, 42 insertions(+), 50 deletions(-)
diff --git a/bin/sup b/bin/sup
@@ -94,7 +94,6 @@ EOS
 end
 
 begin
-  extend CanSpawnComposeMode
   Redwood::start
   Index.load
 
@@ -225,27 +224,15 @@ begin
       when :list_labels
         labels = LabelManager.listable_labels.map { |l| LabelManager.string_for l }
         user_label = bm.ask_with_completions :label, "Show threads with label (enter for listing): ", labels
-        user_label =
-          case user_label
-          when nil, /^\s*$/
-            bm.spawn_modal("Label list", LabelListMode.new) if user_label && user_label.empty?
+        unless user_label.nil?
+          if user_label.empty?
+            bm.spawn_unless_exists("Label list") { LabelListMode.new } if user_label && user_label.empty?
           else
-            LabelManager.label_for user_label
+            LabelSearchResultsMode.spawn_nicely user_label
           end
-        
-        case user_label
-        when nil
-        when :inbox
-          BufferManager.raise_to_front InboxMode.instance.buffer
-        else
-          b = BufferManager.spawn_unless_exists("All threads with label '#{user_label}'") do
-            mode = LabelSearchResultsMode.new([user_label])
-          end
-          b.mode.load_threads :num => b.content_height
         end
-
       when :compose
-        spawn_compose_mode
+        ComposeMode.spawn_nicely
       when :poll
         reporting_thread { PollManager.poll }
       when :recall_draft
diff --git a/lib/sup/modes/compose-mode.rb b/lib/sup/modes/compose-mode.rb
@@ -1,18 +1,5 @@
 module Redwood
 
-module CanSpawnComposeMode
-  def spawn_compose_mode opts={}
-    to = opts[:to] || BufferManager.ask_for_contacts(:people, "To: ") or return
-    cc = opts[:cc] || BufferManager.ask_for_contacts(:people, "Cc: ") or return if $config[:ask_for_cc]
-    bcc = opts[:bcc] || BufferManager.ask_for_contacts(:people, "Bcc: ") or return if $config[:ask_for_bcc]
-    subj = opts[:subj] || BufferManager.ask(:subject, "Subject: ") or return if $config[:ask_for_subject]
-    
-    mode = ComposeMode.new :from => opts[:from], :to => to, :cc => cc, :bcc => bcc, :subj => subj
-    BufferManager.spawn "New Message", mode
-    mode.edit_message
-  end
-end
-
 class ComposeMode < EditMessageMode
   def initialize opts={}
     header = {}
@@ -31,6 +18,17 @@ class ComposeMode < EditMessageMode
     BufferManager.kill_buffer self.buffer unless edited
     edited
   end
+
+  def self.spawn_nicely opts={}
+    to = opts[:to] || BufferManager.ask_for_contacts(:people, "To: ") or return
+    cc = opts[:cc] || BufferManager.ask_for_contacts(:people, "Cc: ") or return if $config[:ask_for_cc]
+    bcc = opts[:bcc] || BufferManager.ask_for_contacts(:people, "Bcc: ") or return if $config[:ask_for_bcc]
+    subj = opts[:subj] || BufferManager.ask(:subject, "Subject: ") or return if $config[:ask_for_subject]
+    
+    mode = ComposeMode.new :from => opts[:from], :to => to, :cc => cc, :bcc => bcc, :subj => subj
+    BufferManager.spawn "New Message", mode
+    mode.edit_message
+  end
 end
 
 end
diff --git a/lib/sup/modes/forward-mode.rb b/lib/sup/modes/forward-mode.rb
@@ -1,17 +1,5 @@
 module Redwood
 
-module CanSpawnForwardMode
-  def spawn_forward_mode m, opts={}
-    to = opts[:to] || BufferManager.ask_for_contacts(:people, "To: ") or return
-    cc = opts[:cc] || BufferManager.ask_for_contacts(:people, "Cc: ") or return if $config[:ask_for_cc]
-    bcc = opts[:bcc] || BufferManager.ask_for_contacts(:people, "Bcc: ") or return if $config[:ask_for_bcc]
-    
-    mode = ForwardMode.new m, :to => to, :cc => cc, :bcc => bcc
-    BufferManager.spawn "Forwarding #{m.subj}", mode
-    mode.edit_message
-  end
-end
-
 class ForwardMode < EditMessageMode
 
   ## todo: share some of this with reply-mode
@@ -28,6 +16,16 @@ class ForwardMode < EditMessageMode
     super :header => header, :body => forward_body_lines(m)
   end
 
+  def self.spawn_nicely m, opts={}
+    to = opts[:to] || BufferManager.ask_for_contacts(:people, "To: ") or return
+    cc = opts[:cc] || BufferManager.ask_for_contacts(:people, "Cc: ") or return if $config[:ask_for_cc]
+    bcc = opts[:bcc] || BufferManager.ask_for_contacts(:people, "Bcc: ") or return if $config[:ask_for_bcc]
+    
+    mode = ForwardMode.new m, :to => to, :cc => cc, :bcc => bcc
+    BufferManager.spawn "Forwarding #{m.subj}", mode
+    mode.edit_message
+  end
+
 protected
 
   def forward_body_lines m
diff --git a/lib/sup/modes/label-search-results-mode.rb b/lib/sup/modes/label-search-results-mode.rb
@@ -10,6 +10,20 @@ class LabelSearchResultsMode < ThreadIndexMode
   end
 
   def is_relevant? m; @labels.all? { |l| m.has_label? l }; end
+
+  def self.spawn_nicely label
+    label = LabelManager.label_for(label) unless label.is_a?(Symbol)
+    case label
+    when nil
+    when :inbox
+      BufferManager.raise_to_front InboxMode.instance.buffer
+    else
+      BufferManager.spawn_unless_exists("All threads with label '#{label}'") do
+        mode = LabelSearchResultsMode.new([label])
+        mode.load_threads :num => b.content_height
+      end
+    end
+  end
 end
 
 end
diff --git a/lib/sup/modes/thread-index-mode.rb b/lib/sup/modes/thread-index-mode.rb
@@ -4,8 +4,6 @@ module Redwood
 ## - is_relevant?
 
 class ThreadIndexMode < LineCursorMode
-  include CanSpawnForwardMode
-
   DATE_WIDTH = Time::TO_NICE_S_MAX_LEN
   MIN_FROM_WIDTH = 15
   LOAD_MORE_THREAD_NUM = 20
@@ -399,7 +397,7 @@ EOS
     m = t.latest_message
     return if m.nil? # probably won't happen
     m.load_from_source!
-    spawn_forward_mode m
+    ForwardMode.spawn_nicely m
   end
 
   def load_n_threads_background n=LOAD_MORE_THREAD_NUM, opts={}
diff --git a/lib/sup/modes/thread-view-mode.rb b/lib/sup/modes/thread-view-mode.rb
@@ -1,9 +1,6 @@
 module Redwood
 
 class ThreadViewMode < LineCursorMode
-  include CanSpawnComposeMode
-  include CanSpawnForwardMode
-
   ## this holds all info we need to lay out a message
   class MessageLayout
     attr_accessor :top, :bot, :prev, :next, :depth, :width, :state, :color, :star_color, :orig_new
@@ -113,7 +110,7 @@ class ThreadViewMode < LineCursorMode
   def subscribe_to_list
     m = @message_lines[curpos] or return
     if m.list_subscribe && m.list_subscribe =~ /<mailto:(.*?)\?(subject=(.*?))>/
-      spawn_compose_mode :from => AccountManager.account_for(m.recipient_email), :to => [PersonManager.person_for($1)], :subj => $3
+      ComposeMode.spawn_nicely :from => AccountManager.account_for(m.recipient_email), :to => [PersonManager.person_for($1)], :subj => $3
     else
       BufferManager.flash "Can't find List-Subscribe header for this message."
     end