From: wmorgan Date: Sat, 2 Dec 2006 00:34:19 +0000 (+0000) Subject: improved polling behavior X-Git-Url: https://git.notmuchmail.org/git?a=commitdiff_plain;h=59cb2add14f75a2b4977d7c59738ba0baeb2b517;p=sup improved polling behavior git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@59 5c8cc53c-5e98-4d25-b20a-d8db53a31250 --- diff --git a/bin/sup b/bin/sup index 9c71692..c5e54fa 100644 --- a/bin/sup +++ b/bin/sup @@ -99,15 +99,6 @@ begin log "initializing buffer manager" bm = BufferManager.new - if Index.usual_sources.any? { |s| !s.done? } - log "polling for new mail" - pmode = PollMode.new - pbuf = bm.spawn "load new messages", pmode - pmode.poll -# sleep 1 -# bm.kill_buffer pbuf - end - log "initializing mail index buffer" imode = InboxMode.new ibuf = bm.spawn "inbox", imode @@ -118,6 +109,8 @@ begin bm.draw_screen imode.load_more_threads ibuf.content_height + ::Thread.new { sleep 5; PollManager.poll } + until $exception bm.draw_screen c = Ncurses.nonblocking_getch @@ -168,10 +161,8 @@ begin bm.spawn "new message", mode mode.edit when :poll - b = BufferManager.spawn_unless_exists("load new messages") do - PollMode.new - end - b.mode.poll + BufferManager.raise_to_front PollManager.buffer + PollManager.poll when :nothing when :redraw bm.completely_redraw_screen @@ -193,21 +184,23 @@ end Index.save unless $exception # TODO: think about this if $exception - if $exception.is_a? IndexError + case $exception + when IndexError $stderr.puts <= DELAY - mbid = BufferManager.say "Polling for new messages..." - num, numi = poll { |s| BufferManager.say s, mbid } - BufferManager.clear mbid - BufferManager.flash "Loaded #{num} new messages, #{numi} to inbox." if num > 0 + poll end end end end + def buffer + BufferManager.spawn_unless_exists("", :hidden => true) do + PollMode.new + end + end + def poll + BufferManager.flash "Polling for new messages..." + num, numi = buffer.mode.poll + if num > 0 + BufferManager.flash "Loaded #{num} new messages, #{numi} to inbox." + else + BufferManager.flash "No new messages." + end + [num, numi] + end + + def do_poll return [0, 0] if @polling @polling = true found = {} @@ -41,7 +55,7 @@ class PollManager num_inbox = 0 source.each do |offset, labels| start_offset ||= offset - + yield " Found message at #{offset} with labels #{labels * ', '}" begin m = Redwood::Message.new source, offset, labels if found[m.id]