Update of /cvsroot/freevo/freevo/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4443

Modified Files:
        rc.py 
Log Message:
Again some interface changes. There is now only one function
handling all callbacks, including repeating calls with timer


Index: rc.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/rc.py,v
retrieving revision 1.34
retrieving revision 1.35
diff -C2 -d -r1.34 -r1.35
*** rc.py       30 May 2004 18:27:53 -0000      1.34
--- rc.py       31 May 2004 10:39:55 -0000      1.35
***************
*** 5,13 ****
  # $Id$
  #
! # Notes:
  # Todo:        
  #
  # -----------------------------------------------------------------------
  # $Log$
  # Revision 1.34  2004/05/30 18:27:53  dischi
  # More event / main loop cleanup. rc.py has a changed interface now
--- 5,17 ----
  # $Id$
  #
! # Notes: This is the only class to be thread safe!
  # Todo:        
  #
  # -----------------------------------------------------------------------
  # $Log$
+ # Revision 1.35  2004/05/31 10:39:55  dischi
+ # Again some interface changes. There is now only one function
+ # handling all callbacks, including repeating calls with timer
+ #
  # Revision 1.34  2004/05/30 18:27:53  dischi
  # More event / main loop cleanup. rc.py has a changed interface now
***************
*** 54,57 ****
--- 58,63 ----
  from event import Event, BUTTON
  
+ SHUTDOWN = -1
+ 
  PYLIRC     = False
  _singleton = None
***************
*** 100,108 ****
  
  
! def register(object, *arg):
      """
!     register an object to the main loop
      """
!     return get_singleton().register(object, *arg)
  
  
--- 106,116 ----
  
  
! def register(function, repeat, timer, *arg):
      """
!     register an function to be called
!     repeat: if true, call the function later again
!     timer:  timer * 0.01 seconds when to call the function
      """
!     return get_singleton().register(function, repeat, timer, *arg)
  
  
***************
*** 330,338 ****
          self.queue              = []
          self.event_callback     = None
!         self.one_time_callbacks = []
          self.poll_objects       = []
          # lock all critical parts
          self.lock               = thread.allocate_lock()
! 
  
      def set_app(self, app, context):
--- 338,349 ----
          self.queue              = []
          self.event_callback     = None
!         self.callbacks          = []
!         self.shutdown_callbacks = []
          self.poll_objects       = []
          # lock all critical parts
          self.lock               = thread.allocate_lock()
!         # last time we stopped sleeping
!         self.sleep_timer        = 0
!         
  
      def set_app(self, app, context):
***************
*** 394,416 ****
  
  
!     def register(self, object, *arg):
          """
!         register an object to the main loop
          """
          self.lock.acquire()
!         if type(object) in [ types.FunctionType, types.MethodType ]:
!             self.one_time_callbacks.append((object, arg))
!         elif not object in self.poll_objects:
!             self.poll_objects.append(object)
          self.lock.release()
  
          
!     def unregister(self, object):
          """
          unregister an object from the main loop
          """
          self.lock.acquire()
!         if object in self.poll_objects:
!             self.poll_objects.remove(object)
          self.lock.release()
  
--- 405,438 ----
  
  
!     def register(self, function, repeat, timer, *arg):
          """
!         register an function to be called
!         repeat: if true, call the function later again
!         timer:  timer * 0.01 seconds when to call the function
          """
          self.lock.acquire()
!         if timer == SHUTDOWN:
!             _debug_('register shutdown callback: %s' % function, 2)
!             self.shutdown_callbacks.append([ function, arg ])
!         else:
!             if repeat:
!                 _debug_('register callback: %s' % function, 2)
!             self.callbacks.append([ function, repeat, timer, 0, arg ])
          self.lock.release()
  
          
!     def unregister(self, function):
          """
          unregister an object from the main loop
          """
          self.lock.acquire()
!         for c in copy.copy(self.callbacks):
!             if c[0] == function:
!                 _debug_('unregister callback: %s' % function, 2)
!                 self.callbacks.remove(c)
!         for c in copy.copy(self.shutdown_callbacks):
!             if c[0] == function:
!                 _debug_('unregister shutdown callback: %s' % function, 2)
!                 self.shutdown_callbacks.remove(c)
          self.lock.release()
  
***************
*** 420,426 ****
          shutdown the rc
          """
!         for p in copy.copy(self.poll_objects):
!             if hasattr(p, 'stop'):
!                 p.stop()
  
  
--- 442,448 ----
          shutdown the rc
          """
!         for c in copy.copy(self.shutdown_callbacks):
!             _debug_('shutting down %s' % c[0], 2)
!             c[0](*c[1])
  
  
***************
*** 430,451 ****
          """
          # run all registered callbacks
!         while len(self.one_time_callbacks) > 0:
!             self.lock.acquire()
!             callback, arg = self.one_time_callbacks.pop(0)
!             self.lock.release()
!             callback(*arg)
! 
!         # run all registered objects having a poll() function
!         # using poll_counter and poll_interval (if given)
!         for p in copy.copy(self.poll_objects):
!             if hasattr(p, 'poll_counter'):
!                 if not (self.app and p.poll_menu_only):
!                     p.poll_counter += 1
!                     if p.poll_counter == p.poll_interval:
!                         p.poll_counter = 0
!                         p.poll()
              else:
!                 p.poll()
! 
  
  
--- 452,469 ----
          """
          # run all registered callbacks
!         for c in copy.copy(self.callbacks):
!             if c[2] == c[3]:
!                 # time is up, call it:
!                 c[0](*c[4])
!                 if not c[1]:
!                     # remove if it is no repeat callback:
!                     self.lock.acquire()
!                     self.callbacks.remove(c)
!                     self.lock.release()
!                 else:
!                     # reset counter for next run
!                     c[3] = 0
              else:
!                 c[3] += 1
  
  
***************
*** 463,469 ****
                  # poll everything
                  self.poll()
                  # wait some time
!                 time.sleep(0.01)
  
          # search for events in the queue
          if len(self.queue):
--- 481,492 ----
                  # poll everything
                  self.poll()
+ 
                  # wait some time
!                 duration = 0.01 - (time.time() - self.sleep_timer)
!                 if duration > 0:
!                     time.sleep(duration)
!                 self.sleep_timer = time.time()
  
+                 
          # search for events in the queue
          if len(self.queue):



-------------------------------------------------------
This SF.Net email is sponsored by: Oracle 10g
Get certified on the hottest thing ever to hit the market... Oracle 10g. 
Take an Oracle 10g class now, and we'll give you the exam FREE.
http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click
_______________________________________________
Freevo-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to