Hi Matthieu, I've committed the code; please try it and let me know if it works for you.
Aubin On Fri, Aug 01, 2003 at 09:58:07AM +0300, Matthieu Weber wrote: > Here is a patch that handles repeated RC events. It allows to browse > faster long lists (i.e. directories containing lots of things, or the TV > Guide), by simply pressing continuously a button on the remote control. > Events buffered inside pyLirc are discarded, and only the most recent > event is taken into consideration (this avoids the ``inertia'' in the > movement, which would otherwise continue for some time when the RC's > button has been released). Another feature is also that the repeats are > progressively faster. > The number of times the event has been repeated is passed along with the > type of event, but this information is not used anywhere (I don't know > how to pass it to the various event handlers). > > Matthieu > -- > (~._.~) Matthieu Weber - Universit? de Jyv?skyl? (~._.~) > ( ? ) email : [EMAIL PROTECTED] ( ? ) > ()- -() public key id : 452AE0AD ()- -() > (_)-(_) "Humor ist, wenn man trotzdem lacht (Germain Muller)" (_)-(_) > Index: rc.py > =================================================================== > RCS file: /cvsroot/freevo/freevo/src/rc.py,v > retrieving revision 1.20 > diff -u -r1.20 rc.py > --- rc.py 24 Jul 2003 00:12:05 -0000 1.20 > +++ rc.py 1 Aug 2003 06:49:32 -0000 > @@ -90,6 +90,7 @@ > # ----------------------------------------------------------------------- */ > #endif > > +import copy > import socket > import config > import util > @@ -168,6 +169,17 @@ > self.app = None > self.context = 'menu' > self.queue = [] > + self.previous_returned_code = None > + self.previous_code = None; > + self.repeat_count = 0 > + > + # Take into consideration only 1 event out of ``modulo'' > + self.default_repeat_modulo = 4 # Config > + > + # After how many repeats do we decrease the modulo? > + self.repeat_modulo_decrease_threshhold = 5 # Config > + > + self.repeat_modulo = self.default_repeat_modulo > > > def set_app(self, app, context): > @@ -204,23 +216,56 @@ > print 'send button event BUTTON arg=%s' % key > return Event(BUTTON, arg=key) > > + def get_last_code(self): > + result = (None, None) # (Code, is_it_new?) > + if self.previous_code != None: > + # Let's empty the buffer and return the most recent code > + while 1: > + list = pylirc.nextcode(); > + if list != []: > + break > + else: > + list = pylirc.nextcode() > + if list == []: > + # It's a repeat, the flag is 0 > + list = self.previous_returned_code > + result = (list, 0) > + elif list != None: > + self.previous_returned_code = list > + # It's a new code (i.e. IR key was released), the flag is 1 > + result = (list, 1) > + self.previous_code = list > + return result > > def poll(self): > if len(self.queue): > ret = self.queue[0] > del self.queue[0] > - return ret > + return (ret, None) > > e = self.key_event_mapper(self.osd._cb()) > - if e: > - return e > + if e != None: > + return (e, None) > > if self.pylirc: > - list = pylirc.nextcode() > - if list: > + list, flag = self.get_last_code() > + if flag == 1: > + self.repeat_count = 0 > + self.repeat_modulo = self.default_repeat_modulo > + > + if list != None: > + if self.repeat_count > self.repeat_modulo_decrease_threshhold * \ > + (self.default_repeat_modulo - self.repeat_modulo + 1) \ > + and self.repeat_modulo > 1: > + self.repeat_modulo -= 1 > + if self.repeat_count % self.repeat_modulo != 0: > + list = [] > + self.repeat_count += 1 > + > for code in list: > - e = self.key_event_mapper(code) > - if not e: e = self.key_event_mapper(self.osd._cb) > + e = (self.key_event_mapper(code), self.repeat_count) > + > + if not e: e = (self.key_event_mapper(self.osd._cb), None) > if e: > return e > > @@ -236,4 +281,4 @@ > # No data available > pass > > - return None > + return (None, None) > Index: main.py > =================================================================== > RCS file: /cvsroot/freevo/freevo/src/main.py,v > retrieving revision 1.53 > diff -u -r1.53 main.py > --- main.py 13 Jul 2003 19:35:44 -0000 1.53 > +++ main.py 1 Aug 2003 06:49:32 -0000 > @@ -311,7 +311,8 @@ > # Get next command > while 1: > > - event = rc_object.poll() > + event, event_repeat_count = rc_object.poll() > + # OK, now we have a repeat_count... to whom could we give it? > if event: > break > > @@ -322,7 +323,7 @@ > p.poll_counter = 0 > p.poll() > > - time.sleep(0.1) > + time.sleep(0.01) > > for p in poll_plugins: > if not (rc_object.app and p.poll_menu_only): ------------------------------------------------------- This SF.Net email sponsored by: Free pre-built ASP.NET sites including Data Reports, E-commerce, Portals, and Forums are available now. Download today and enter to win an XBOX or Visual Studio .NET. http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01 _______________________________________________ Freevo-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/freevo-devel
