sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit 0b5bccf9b8f3373f4db80b00830de475c6c32931
parent 745703f0c65d2f93d560a212d7b37cfefc6d2355
Author: Rich Lane <rlane@club.cc.cmu.edu>
Date:   Fri,  4 Jun 2010 19:58:15 -0700

Merge branch 'master' into next

Diffstat:
M lib/sup/client.rb | 16 ++++++++++++++++
M lib/sup/server.rb | 15 +++++++++++++++
2 files changed, 31 insertions(+), 0 deletions(-)
diff --git a/lib/sup/client.rb b/lib/sup/client.rb
@@ -65,6 +65,22 @@ class Redwood::Client < EM::P::RedwoodClient
                  'labels' => labels
   end
 
+  def thread msg_id, raw, &b
+    tag = mktag do |type,tag,args|
+      if type == 'message'
+        b.call args
+      else
+        fail unless type == 'done'
+        b.call nil
+        rmtag tag
+      end
+    end
+
+    send_message 'thread', tag,
+                 'message_id' => msg_id,
+                 'raw' => raw
+  end
+
   def receive_message type, tag, args
     cb = @cbs[tag] or fail "invalid tag #{tag.inspect}"
     cb[type, tag, args]
diff --git a/lib/sup/server.rb b/lib/sup/server.rb
@@ -34,6 +34,13 @@ class Redwood::Server < EM::P::RedwoodServer
     send_message 'done', tag
   end
 
+  def request_thread tag, a
+    thread a['message_id'], a['raw'] do |r|
+      send_message 'message', tag, r
+    end
+    send_message 'done', tag
+  end
+
 private
 
   def result_from_message m, raw
@@ -89,4 +96,12 @@ private
     end
     nil
   end
+
+  def thread msg_id, raw
+    msg = Index.build_message msg_id
+    Index.each_message_in_thread_for msg do |id, builder|
+      m = builder.call
+      yield result_from_message(m, raw)
+    end
+  end
 end