sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit 8bf448010797e06f22608b09e220ac068c619d09
parent bbe4f099f6ea03993557451a0803c6a36ec89000
Author: Rich Lane <rlane@club.cc.cmu.edu>
Date:   Fri, 14 Jan 2011 19:22:53 -0800

show progress in sup-sync

Diffstat:
M bin/sup-sync | 4 ++--
M lib/sup/maildir.rb | 8 ++++----
M lib/sup/mbox.rb | 9 +++------
M lib/sup/poll.rb | 6 +++---
M lib/sup/server.rb | 2 +-
5 files changed, 13 insertions(+), 16 deletions(-)
diff --git a/bin/sup-sync b/bin/sup-sync
@@ -120,7 +120,7 @@ begin
     num_added = num_updated = num_scanned = num_restored = 0
     last_info_time = start_time = Time.now
 
-    Redwood::PollManager.poll_from source do |action,m,old_m|
+    Redwood::PollManager.poll_from source do |action,m,old_m,progress|
       if action == :delete
         puts "Deleting #{m.id}"
       elsif action == :add
@@ -176,7 +176,7 @@ begin
         if Time.now - last_info_time > PROGRESS_UPDATE_INTERVAL
           last_info_time = Time.now
           elapsed = last_info_time - start_time
-          pctdone = 0.0 * 100.0
+          pctdone = progress * 100.0
           remaining = (100.0 - pctdone) * (elapsed.to_f / pctdone)
           printf "## read %dm (~%.0f%%) @ %.1fm/s. %s elapsed, ~%s remaining\n", num_scanned, pctdone, num_scanned / elapsed, elapsed.to_time_s, remaining.to_time_s
         end
diff --git a/lib/sup/maildir.rb b/lib/sup/maildir.rb
@@ -101,17 +101,17 @@ class Maildir < Source
       debug "#{old_ids.size} in index, #{new_ids.size} in filesystem"
       debug "#{added.size} added, #{deleted.size} deleted"
 
-      added.each do |id|
+      added.each_with_index do |id,i|
         yield :add,
           :info => File.join(d,id),
           :labels => @labels + maildir_labels(id) + [:inbox],
-          :progress => 0.0
+          :progress => i.to_f/(added.size+deleted.size)
       end
 
-      deleted.each do |id|
+      deleted.each_with_index do |id,i|
         yield :delete,
           :info => File.join(d,id),
-          :progress => 0.0
+          :progress => (i.to_f+added.size)/(added.size+deleted.size)
       end
     end
     nil
diff --git a/lib/sup/mbox.rb b/lib/sup/mbox.rb
@@ -112,22 +112,19 @@ class MBox < Source
     end
   end
 
-  def pct_done
-    0.0
-  end
-
   def default_labels
     [:inbox, :unread]
   end
 
   def poll
-    offset = first_new_message
+    first_offset = first_new_message
+		offset = first_offset
     end_offset = File.size @f
     while offset and offset < end_offset
       yield :add,
         :info => offset,
         :labels => (labels + default_labels),
-        :progress => 0.0
+        :progress => (offset - first_offset).to_f/end_offset
       offset = next_offset offset
     end
   end
diff --git a/lib/sup/poll.rb b/lib/sup/poll.rb
@@ -110,7 +110,7 @@ EOS
 
         num = 0
         numi = 0
-        poll_from source do |action,m,old_m|
+        poll_from source do |action,m,old_m,progress|
           if action == :delete
             yield "Deleting #{m.id}"
           elsif action == :add
@@ -164,7 +164,7 @@ EOS
           m.labels = old_m.labels + (m.labels - [:unread, :inbox]) if old_m
           m.locations = old_m.locations + m.locations if old_m
           HookManager.run "before-add-message", :message => m
-          yield :add, m, old_m if block_given?
+          yield :add, m, old_m, args[:progress] if block_given?
           Index.sync_message m, true
 
           ## We need to add or unhide the message when it either did not exist
@@ -176,7 +176,7 @@ EOS
         when :delete
           Index.each_message :location => [source.id, args[:info]] do |m|
             m.locations.delete Location.new(source, args[:info])
-            yield :delete, m, [source,args[:info]] if block_given?
+            yield :delete, m, [source,args[:info]], args[:progress] if block_given?
             Index.sync_message m, false
             #UpdateManager.relay self, :deleted, m
           end
diff --git a/lib/sup/server.rb b/lib/sup/server.rb
@@ -97,7 +97,7 @@ private
     SentManager.source.store_message Time.now, "test@example.com" do |io|
       io.write raw
     end
-    PollManager.poll_from SentManager.source do |sym,m,old_m|
+    PollManager.poll_from SentManager.source do |sym,m,old_m,progress|
       next unless sym == :add
       m.labels = labels
     end