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