From mboxrd@z Thu Jan 1 00:00:00 1970 Received: by 10.213.7.146 with SMTP id d18cs28162ebd; Tue, 12 Jan 2010 06:51:13 -0800 (PST) Received: by 10.224.17.225 with SMTP id t33mr17576997qaa.150.1263307872717; Tue, 12 Jan 2010 06:51:12 -0800 (PST) Return-Path: Received: from rubyforge.org (rubyforge.org [205.234.109.19]) by mx.google.com with ESMTP id 7si662013qwf.54.2010.01.12.06.51.12; Tue, 12 Jan 2010 06:51:12 -0800 (PST) Received-SPF: pass (google.com: domain of sup-devel-bounces@rubyforge.org designates 205.234.109.19 as permitted sender) client-ip=205.234.109.19; Authentication-Results: mx.google.com; spf=pass (google.com: domain of sup-devel-bounces@rubyforge.org designates 205.234.109.19 as permitted sender) smtp.mail=sup-devel-bounces@rubyforge.org; dkim=neutral (body hash did not verify) header.i=@gmail.com Received: from rubyforge.org (rubyforge.org [127.0.0.1]) by rubyforge.org (Postfix) with ESMTP id 9314E1D788AC; Tue, 12 Jan 2010 09:51:11 -0500 (EST) Received: from mail-yw0-f183.google.com (mail-yw0-f183.google.com [209.85.211.183]) by rubyforge.org (Postfix) with ESMTP id 54A4F19782D4 for ; Tue, 12 Jan 2010 09:51:07 -0500 (EST) Received: by ywh13 with SMTP id 13so53977155ywh.29 for ; Tue, 12 Jan 2010 06:51:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:content-type:subject:from:to :in-reply-to:references:date:message-id:user-agent :content-transfer-encoding; bh=iY8cOUpDwxnEZ/A0AmOOE49rgurY2zhmXAQsbgwvzZc=; b=l0LKEu8kSmGRVqxQPwcLgJS4d1iXxNVGzhBVYj1vA3XQqUBuhHdHxpthFRtwUPl3qk MOmGZhwIB89hp1ltnKWmmRTwCtEX7Zv+8rXDGbfOarLP4exLAEeTNaARk8zbRR+vsgpN kiBZLESW2vq6AwjZP3VQIzqHAu+ZMkDXyPOjM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=content-type:subject:from:to:in-reply-to:references:date:message-id :user-agent:content-transfer-encoding; b=qTol2q0oe37XWGphCGgQPjJBXvZq2oMG/m8EcHDTuhO3AnwKfELwjIx8xC454fJUW0 17iVPQ3fUwJsVtZBm+c0AqsrKNoDU72FjBwbq49WLnskOtlL+Zjv69LSjpKHDh/rSFo8 +T6Y0v1yTYARME23cSSAYfAJvr/W0fgBOcI0c= Received: by 10.150.107.28 with SMTP id f28mr8903565ybc.57.1263307866690; Tue, 12 Jan 2010 06:51:06 -0800 (PST) Received: from localhost (c-76-98-110-216.hsd1.nj.comcast.net [76.98.110.216]) by mx.google.com with ESMTPS id 22sm10953356yxe.3.2010.01.12.06.51.03 (version=TLSv1/SSLv3 cipher=RC4-MD5); Tue, 12 Jan 2010 06:51:04 -0800 (PST) From: Eric Sherman To: sup-devel In-reply-to: <1262607214-sup-4535@changeling.local> References: <1262607214-sup-4535@changeling.local> Date: Tue, 12 Jan 2010 09:51:02 -0500 Message-Id: <1263307713-sup-7005@changeling.local> User-Agent: Sup/git Subject: Re: [sup-devel] [PATCHv2] [issue14] poll updates accumulate while idle X-BeenThere: sup-devel@rubyforge.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: Sup developer discussion List-Id: Sup developer discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: sup-devel-bounces@rubyforge.org Errors-To: sup-devel-bounces@rubyforge.org Excerpts from Eric Sherman's message of Mon Jan 04 07:14:33 -0500 2010: > If you were to leave sup running for a long time, this patch would > enable you to get a glance summary of new mail activity since sup was > last touched, by letting the poll update message accumulate its tally > while idle. > > On keystrokes, BufferManager sends an :unidle update if the last > keystroke occurred more than :idle_threshold seconds ago. PollManager > listens for :unidle updates to clear PollTally. It is also cleared on > each poll unless idle. > > * :idle_threshold defaults to 60 seconds if not defined in config.yaml > * presently no :idle update is sent when becoming idle > * but we can check for idleness with BufferManager.idle? > * after-poll behavior is unaffected > --- > lib/sup.rb | 3 ++- > lib/sup/buffer.rb | 5 +++++ > lib/sup/poll.rb | 24 ++++++++++++++++++++++-- > 3 files changed, 29 insertions(+), 3 deletions(-) > > diff --git a/lib/sup.rb b/lib/sup.rb > index 840b3fc..a6de0ab 100644 > --- a/lib/sup.rb > +++ b/lib/sup.rb > @@ -229,7 +229,8 @@ else > :confirm_top_posting => true, > :discard_snippets_from_encrypted_messages => false, > :default_attachment_save_dir => "", > - :sent_source => "sup://sent" > + :sent_source => "sup://sent", > + :idle_threshold => 60 > } > begin > FileUtils.mkdir_p Redwood::BASE_DIR > diff --git a/lib/sup/buffer.rb b/lib/sup/buffer.rb > index c826ab9..8bf666b 100644 > --- a/lib/sup/buffer.rb > +++ b/lib/sup/buffer.rb > @@ -212,6 +212,7 @@ EOS > @in_x = ENV["TERM"] =~ /(xterm|rxvt|screen)/ > @sigwinch_happened = false > @sigwinch_mutex = Mutex.new > + @idle_since = Time.now > end > > def sigwinch_happened!; @sigwinch_mutex.synchronize { @sigwinch_happened = true } end > @@ -269,6 +270,8 @@ EOS > @focus_buf.mode.cancel_search! > @focus_buf.mark_dirty > end > + UpdateManager.relay self, :unidle, Time.at(@idle_since) if idle? > + @idle_since = Time.now > @focus_buf.mode.handle_input c > end > end > @@ -761,6 +764,8 @@ EOS > @shelled = false > end > > + def idle?; Time.now.to_i - @idle_since.to_i >= ($config[:idle_threshold] || 60); end > + > private > > def default_status_bar buf > diff --git a/lib/sup/poll.rb b/lib/sup/poll.rb > index 4f30505..48228ca 100644 > --- a/lib/sup/poll.rb > +++ b/lib/sup/poll.rb > @@ -37,6 +37,8 @@ EOS > @polling = false > @poll_sources = nil > @mode = nil > + PollTally.init > + UpdateManager.register self > end > > def poll_with_sources > @@ -45,8 +47,10 @@ EOS > > BufferManager.flash "Polling for new messages..." > num, numi, from_and_subj, from_and_subj_inbox, loaded_labels = @mode.poll > - if num > 0 > - BufferManager.flash "Loaded #{num.pluralize 'new message'}, #{numi} to inbox. Labels: #{loaded_labels.map{|l| l.to_s}.join(', ')}" > + PollTally.clear unless BufferManager.idle? > + PollTally.add :num => num, :num_inbox => numi, :loaded_labels => loaded_labels > + if PollTally.num > 0 > + BufferManager.flash "Loaded #{PollTally.num.pluralize 'new message'}, #{PollTally.num_inbox} to inbox. Labels: #{PollTally.loaded_labels.map{|l| l.to_s}.join(', ')}" > else > BufferManager.flash "No new messages." > end > @@ -183,6 +187,22 @@ EOS > Index.add_message m > UpdateManager.relay self, :added, m > end > + > + def handle_unidle_update sender, idle_since; PollTally.clear; end > +end > + > +class PollTally > + include Singleton > + attr_reader :num, :num_inbox, :loaded_labels > + > + def initialize; @num = 0; @num_inbox = 0; @loaded_labels = Set.new; end > + def clear; @num = 0; @num_inbox = 0; @loaded_labels.clear; end > + > + def add opts={} > + @num += opts[:num]||0 > + @num_inbox += opts[:num_inbox]||0 > + @loaded_labels = Set.new(opts[:loaded_labels] || []) + @loaded_labels > + end > end > > end What manner of reimplementation would increase this patch's likelihood for inclusion? Or is my whole approach JustWrong for sup? * @idle_since should probably be renamed to @no_keystrokes_since * PollTally should probably be replaced by a hash Aside from its ugliness I'm happy with the result: running poll totals while idle. An alternative implementation with the above changes follows in reply, but it's probably still too ugly for inclusion. _______________________________________________ Sup-devel mailing list Sup-devel@rubyforge.org http://rubyforge.org/mailman/listinfo/sup-devel