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

Modified Files:
        main.py rc.py 
Log Message:
move some code from main to rc, create main class

Index: rc.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/rc.py,v
retrieving revision 1.32
retrieving revision 1.33
diff -C2 -d -r1.32 -r1.33
*** rc.py       20 May 2004 18:26:27 -0000      1.32
--- rc.py       29 May 2004 19:06:26 -0000      1.33
***************
*** 10,13 ****
--- 10,16 ----
  # -----------------------------------------------------------------------
  # $Log$
+ # Revision 1.33  2004/05/29 19:06:26  dischi
+ # move some code from main to rc, create main class
+ #
  # Revision 1.32  2004/05/20 18:26:27  dischi
  # patch from Viggo
***************
*** 109,113 ****
  def callback(function, *arg):
      get_singleton().one_time_callbacks.append((function, arg))
!     
  
  # --------------------------------------------------------------------------------
--- 112,130 ----
  def callback(function, *arg):
      get_singleton().one_time_callbacks.append((function, arg))
! 
! 
! def register(object):
!     """
!     register an object to the main loop
!     """
!     get_singleton().register(object)
! 
! 
! def unregister(object):
!     """
!     unregister an object from the main loop
!     """
!     get_singleton().unregister(object)
! 
  
  # --------------------------------------------------------------------------------
***************
*** 306,310 ****
          self.event_callback           = None
          self.one_time_callbacks       = []
!         
  
      def set_app(self, app, context):
--- 323,327 ----
          self.event_callback           = None
          self.one_time_callbacks       = []
!         self.poll_objects             = []
  
      def set_app(self, app, context):
***************
*** 348,357 ****
          return Event(BUTTON, arg=key)
  
!     
      def poll(self):
          while len(self.one_time_callbacks) > 0:
              callback, arg = self.one_time_callbacks.pop(0)
              callback(*arg)
!         
          if len(self.queue):
              ret = self.queue[0]
--- 365,407 ----
          return Event(BUTTON, arg=key)
  
! 
!     def register(self, object):
!         """
!         register an object to the main loop
!         """
!         if not object in self.poll_objects:
!             self.poll_objects.append(object)
! 
!         
!     def unregister(self, object):
!         """
!         unregister an object from the main loop
!         """
!         if object in self.poll_objects:
!             self.poll_objects.remove(object)
! 
!         
      def poll(self):
+         """
+         main loop
+         """
+         # run all registered callbacks
          while len(self.one_time_callbacks) > 0:
              callback, arg = self.one_time_callbacks.pop(0)
              callback(*arg)
! 
!         # run all registered objects having a poll() function
!         # using poll_counter and poll_interval (if given)
!         for p in 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()
! 
!         # search for events in the queue
          if len(self.queue):
              ret = self.queue[0]
***************
*** 359,362 ****
--- 409,413 ----
              return ret
  
+         # search all input objects for new events
          for i in self.inputs:
              e = i.poll(self)

Index: main.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/main.py,v
retrieving revision 1.121
retrieving revision 1.122
diff -C2 -d -r1.121 -r1.122
*** main.py     9 May 2004 14:18:20 -0000       1.121
--- main.py     29 May 2004 19:06:26 -0000      1.122
***************
*** 11,14 ****
--- 11,17 ----
  # -----------------------------------------------------------------------
  # $Log$
+ # Revision 1.122  2004/05/29 19:06:26  dischi
+ # move some code from main to rc, create main class
+ #
  # Revision 1.121  2004/05/09 14:18:20  dischi
  # remove comments
***************
*** 23,50 ****
  # reworked rc.py to make several classes
  #
- # Revision 1.117  2004/02/23 19:27:07  dischi
- # fix mmpython init
- #
- # Revision 1.116  2004/02/14 13:05:03  dischi
- # do not call skin.get_singleton() anymore
- #
- # Revision 1.115  2004/02/12 17:16:35  dischi
- # again, fix watermark problem
- #
- # Revision 1.114  2004/02/12 16:26:57  dischi
- # fix watermark problem once and for all
- #
- # Revision 1.113  2004/02/11 11:09:40  dischi
- # cachetime checking not working right now
- #
- # Revision 1.112  2004/02/05 20:39:11  dischi
- # check mmpython cache version
- #
- # Revision 1.111  2004/02/01 17:11:51  dischi
- # make it possible to load cachefiles on startup
- #
- # Revision 1.110  2004/01/25 14:54:31  dischi
- # save parent after skin change
- #
  # -----------------------------------------------------------------------
  # Freevo - A Home Theater PC framework
--- 26,29 ----
***************
*** 233,236 ****
--- 212,216 ----
          self.text         = text
  
+ 
      def update_content(self):
          """
***************
*** 262,265 ****
--- 242,338 ----
  
  
+ class MainTread:
+     """
+     The main thread or loop of freevo
+     """
+     def __init__(self):
+         """
+         get the list of plugins wanting events
+         """
+         self.eventhandler_plugins  = []
+         self.eventlistener_plugins = []
+ 
+         for p in plugin.get('daemon_eventhandler'):
+             if hasattr(p, 'event_listener') and p.event_listener:
+                 self.eventlistener_plugins.append(p)
+             else:
+                 self.eventhandler_plugins.append(p)
+ 
+         
+     def eventhandler(self, event):
+         """
+         event handling function for the main loop
+         """
+         if event == OS_EVENT_POPEN2:
+             _debug_('popen2 %s' % event.arg[1])
+             event.arg[0].child = util.popen3.Popen3(event.arg[1])
+             return
+ 
+         _debug_('handling event %s' % str(event), 2)
+ 
+         for p in self.eventlistener_plugins:
+             p.eventhandler(event=event)
+ 
+         if event == FUNCTION_CALL:
+             event.arg()
+ 
+         elif event.handler:
+             event.handler(event=event)
+ 
+         # Send events to either the current app or the menu handler
+         elif rc_object.app:
+             if not rc_object.app(event):
+                 for p in self.eventhandler_plugins:
+                     if p.eventhandler(event=event):
+                         break
+                 else:
+                     _debug_('no eventhandler for event %s' % event, 2)
+ 
+         else:
+             app = osd.focused_app()
+             if app:
+                 try:
+                     if config.TIME_DEBUG:
+                         t1 = time.clock()
+                     app.eventhandler(event)
+                     if config.TIME_DEBUG:
+                         print time.clock() - t1
+ 
+                 except SystemExit:
+                     raise SystemExit
+ 
+                 except:
+                     if config.FREEVO_EVENTHANDLER_SANDBOX:
+                         traceback.print_exc()
+                         from gui import AlertBox
+                         pop = AlertBox(text=_('Event \'%s\' crashed\n\nPlease take a 
' \
+                                               'look at the logfile and report the 
bug to ' \
+                                               'the Freevo mailing list. The state of 
'\
+                                               'Freevo may be corrupt now and this 
error '\
+                                               'could cause more errors until you 
restart '\
+                                               'Freevo.\n\nLogfile: %s\n\n') % \
+                                        (event, sys.stdout.logfile),
+                                        width=osd.width-2*config.OSD_OVERSCAN_X-50)
+                         pop.show()
+                     else:
+                         raise 
+             else:
+                 _debug_('no target for events given')
+ 
+ 
+     def run(self):
+         """
+         the real main loop
+         """
+         while 1:
+             event = rc_object.poll()
+             if event:
+                 self.eventhandler(event)
+             else:
+                 osd.sleep(0.01)
+ 
+ 
+ 
+ 
  def signal_handler(sig, frame):
      """
***************
*** 298,302 ****
  
  
- 
  #
  # Freevo main function
--- 371,374 ----
***************
*** 345,352 ****
  
  
- os.umask(config.UMASK)
- 
- # start
  try:
      # signal handler
      signal.signal(signal.SIGTERM, signal_handler)
--- 417,424 ----
  
  
  try:
+     # set the umask
+     os.umask(config.UMASK)
+ 
      # signal handler
      signal.signal(signal.SIGTERM, signal_handler)
***************
*** 397,489 ****
      MainMenu().getcmd()
  
-     poll_plugins = plugin.get('daemon_poll')
-     eventhandler_plugins  = []
-     eventlistener_plugins = []
- 
-     for p in plugin.get('daemon_eventhandler'):
-         if hasattr(p, 'event_listener') and p.event_listener:
-             eventlistener_plugins.append(p)
-         else:
-             eventhandler_plugins.append(p)
-     
      # Kick off the main menu loop
      _debug_('Main loop starting...',2)
! 
!     from childapp import running_children
! 
!     while 1:
!         # Get next command
!         while 1:
! 
!             event = rc_object.poll()
! 
!             if event:
!                 if event == OS_EVENT_POPEN2:
!                     _debug_('popen2 %s' % event.arg[1])
!                     event.arg[0].child = util.popen3.Popen3(event.arg[1])
!                 else:
!                     _debug_('handling event %s' % str(event), 2)
!                     break
! 
!             for p in poll_plugins:
!                 if not (rc_object.app and p.poll_menu_only):
!                     p.poll_counter += 1
!                     if p.poll_counter == p.poll_interval:
!                         p.poll_counter = 0
!                         p.poll()
! 
!             for child in running_children:
!                 child.poll()
! 
!             osd.sleep(0.01)
! 
! 
!         for p in eventlistener_plugins:
!             p.eventhandler(event=event)
! 
!         if event == FUNCTION_CALL:
!             event.arg()
! 
!         elif event.handler:
!             event.handler(event=event)
!             
!         # Send events to either the current app or the menu handler
!         elif rc_object.app:
!             if not rc_object.app(event):
!                 for p in eventhandler_plugins:
!                     if p.eventhandler(event=event):
!                         break
!                 else:
!                     _debug_('no eventhandler for event %s' % event, 2)
! 
!         else:
!             app = osd.focused_app()
!             if app:
!                 try:
!                     if config.TIME_DEBUG:
!                         t1 = time.clock()
!                     app.eventhandler(event)
!                     if config.TIME_DEBUG:
!                         print time.clock() - t1
!                 except SystemExit:
!                     raise SystemExit
!                 except:
!                     if config.FREEVO_EVENTHANDLER_SANDBOX:
!                         traceback.print_exc()
!                         from gui import AlertBox
!                         pop = AlertBox(text=_('Event \'%s\' crashed\n\nPlease take a 
' \
!                                               'look at the logfile and report the 
bug to ' \
!                                               'the Freevo mailing list. The state of 
'\
!                                               'Freevo may be corrupt now and this 
error '\
!                                               'could cause more errors until you 
restart '\
!                                               'Freevo.\n\nLogfile: %s\n\n') % \
!                                        (event, sys.stdout.logfile),
!                                        width=osd.width-2*config.OSD_OVERSCAN_X-50)
!                         pop.show()
!                     else:
!                         raise 
!             else:
!                 _debug_('no target for events given')
! 
  
  
--- 469,475 ----
      MainMenu().getcmd()
  
      # Kick off the main menu loop
      _debug_('Main loop starting...',2)
!     MainTread().run()
  
  



-------------------------------------------------------
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