small fix
[enigma2.git] / mytest.py
index 86549f773aaf8ed440d068a8bf2df863599f30db..5bc08914afdab5ad1170ae8f1ce3fee90df9c939 100644 (file)
--- a/mytest.py
+++ b/mytest.py
@@ -1,5 +1,6 @@
 from Tools import RedirectOutput
-from enigma import *
+from enigma import runMainloop, eDVBDB, eTimer, quitMainloop, eDVBVolumecontrol, \
+       getDesktop, ePythonConfigQuery, eAVSwitch, eWindow
 from tools import *
 
 from Components.Language import language
@@ -10,12 +11,11 @@ def setEPGLanguage():
        
 language.addCallback(setEPGLanguage)
 
-import traceback
+from traceback import print_exc
 import Screens.InfoBar
 from Screens.SimpleSummary import SimpleSummary
 
-import sys
-import time
+from sys import stdout, exc_info
 
 import ServiceReference
 
@@ -27,7 +27,7 @@ from Navigation import Navigation
 from skin import readSkin, applyAllAttributes
 
 from Tools.Directories import InitFallbackFiles, resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
-from Components.config import config, ConfigText, configfile, ConfigSubsection, ConfigInteger
+from Components.config import config, configfile, ConfigText, ConfigSubsection, ConfigInteger
 InitFallbackFiles()
 eDVBDB.getInstance().reloadBouquets()
 
@@ -37,6 +37,9 @@ try:
        import e2reactor
        e2reactor.install()
        
+       import twisted.python.runtime
+       twisted.python.runtime.platform.supportsThreads = lambda: False
+       
        from twisted.internet import reactor
        
        def runReactor():
@@ -188,9 +191,9 @@ class Session:
                try:
                        return screen(self, *arguments, **kwargs)
                except:
-                       errstr = "Screen %s(%s, %s): %s" % (str(screen), str(arguments), str(kwargs), sys.exc_info()[0])
+                       errstr = "Screen %s(%s, %s): %s" % (str(screen), str(arguments), str(kwargs), exc_info()[0])
                        print errstr
-                       traceback.print_exc(file=sys.stdout)
+                       print_exc(file=stdout)
                        quitMainloop(5)
        
        def instantiateDialog(self, screen, *arguments, **kwargs):
@@ -211,7 +214,7 @@ class Session:
                except:
                        print 'EXCEPTION IN DIALOG INIT CODE, ABORTING:'
                        print '-'*60
-                       traceback.print_exc(file=sys.stdout)
+                       print_exc(file=stdout)
                        quitMainloop(5)
                        print '-'*60
                
@@ -332,45 +335,59 @@ class VolumeControl:
                self.hideVolTimer.timeout.get().append(self.volHide)
 
                vol = config.audio.volume.value
-               print "volume is", vol
                self.volumeDialog.setValue(vol)
-               eDVBVolumecontrol.getInstance().setVolume(vol, vol)
+               self.volctrl = eDVBVolumecontrol.getInstance()
+               self.volctrl.setVolume(vol, vol)
 
        def volSave(self):
-               config.audio.volume.value = eDVBVolumecontrol.getInstance().getVolume()
+               if self.volctrl.isMuted():
+                       config.audio.volume.value = 0
+               else:
+                       config.audio.volume.value = self.volctrl.getVolume()
                config.audio.volume.save()
 
-       def     volUp(self):
-               if (eDVBVolumecontrol.getInstance().isMuted()):
-                       self.volMute()
-               eDVBVolumecontrol.getInstance().volumeUp()
-               self.volumeDialog.show()
-               self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
-               self.volSave()
-               self.hideVolTimer.start(3000, True)
+       def volUp(self):
+               self.setVolume(+1)
+
+       def volDown(self):
+               self.setVolume(-1)
 
-       def     volDown(self):
-               if (eDVBVolumecontrol.getInstance().isMuted()):
-                       self.volMute()
-               eDVBVolumecontrol.getInstance().volumeDown()
+       def setVolume(self, direction):
+               oldvol = self.volctrl.getVolume()
+               if direction > 0:
+                       self.volctrl.volumeUp()
+               else:
+                       self.volctrl.volumeDown()
+               is_muted = self.volctrl.isMuted()
+               vol = self.volctrl.getVolume()
                self.volumeDialog.show()
-               self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
+               if is_muted:
+                       self.volMute() # unmute
+               elif not vol:
+                       self.volMute(False, True) # mute but dont show mute symbol
+               if self.volctrl.isMuted():
+                       self.volumeDialog.setValue(0)
+               else:
+                       self.volumeDialog.setValue(self.volctrl.getVolume())
                self.volSave()
                self.hideVolTimer.start(3000, True)
 
        def volHide(self):
                self.volumeDialog.hide()
 
-       def     volMute(self):
-               eDVBVolumecontrol.getInstance().volumeToggleMute()
-               self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
-
-               if (eDVBVolumecontrol.getInstance().isMuted()):
-                       self.muteDialog.show()
-               else:
-                       self.muteDialog.hide()
+       def volMute(self, showMuteSymbol=True, force=False):
+               vol = self.volctrl.getVolume()
+               if vol or force:
+                       self.volctrl.volumeToggleMute()
+                       if self.volctrl.isMuted():
+                               if showMuteSymbol:
+                                       self.muteDialog.show()
+                               self.volumeDialog.setValue(0)
+                       else:
+                               self.muteDialog.hide()
+                               self.volumeDialog.setValue(vol)
 
-from Screens.Standby import Standby
+from Screens.Standby import Standby, TryQuitMainloop, inTryQuitMainloop
 
 class PowerKey:
        """ PowerKey stuff - handles the powerkey press and powerkey release actions"""
@@ -392,7 +409,9 @@ class PowerKey:
 
        def powertimer(self):   
                print "PowerOff - Now!"
-               self.quit()
+               global inTryQuitMainloop
+               if not inTryQuitMainloop:
+                       self.session.open(TryQuitMainloop, 1)
        
        def powerdown(self):
                self.standbyblocked = 0
@@ -406,11 +425,32 @@ class PowerKey:
 
        def standby(self):
                if self.session.current_dialog and self.session.current_dialog.ALLOW_SUSPEND:
-                       self.session.open(Standby, self)
+                       self.session.open(Standby)
 
-       def quit(self):
-               # halt
-               quitMainloop(1)
+from Screens.Scart import Scart
+
+class AutoScartControl:
+       def __init__(self, session):
+               self.force = False
+               self.current_vcr_sb = eAVSwitch.getInstance().getVCRSlowBlanking()
+               if self.current_vcr_sb and config.av.vcrswitch.value:
+                       self.scartDialog = session.instantiateDialog(Scart, True)
+               else:
+                       self.scartDialog = session.instantiateDialog(Scart, False)
+               config.av.vcrswitch.addNotifier(self.recheckVCRSb)
+               eAVSwitch.getInstance().vcr_sb_notifier.get().append(self.VCRSbChanged)
+
+       def recheckVCRSb(self, configElement):
+               self.VCRSbChanged(self.current_vcr_sb)
+
+       def VCRSbChanged(self, value):
+               #print "vcr sb changed to", value
+               self.current_vcr_sb = value
+               if config.av.vcrswitch.value or value > 2:
+                       if value:
+                               self.scartDialog.showMessageBox()
+                       else:
+                               self.scartDialog.switchToTV()
 
 def runScreenTest():
        plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
@@ -444,13 +484,16 @@ def runScreenTest():
        
        vol = VolumeControl(session)
        power = PowerKey(session)
-       
+
+       # we need session.scart to access it from within menu.xml
+       session.scart = AutoScartControl(session)
+
        runReactor()
        
        configfile.save()
-       
-       from Tools.DreamboxHardware import setFPWakeuptime
+
        from time import time
+       from Tools.DreamboxHardware import setFPWakeuptime
        nextRecordingTime = session.nav.RecordTimer.getNextRecordingTime()
        if nextRecordingTime != -1:
                if (nextRecordingTime - time() < 330): # no time to switch box back on
@@ -508,6 +551,6 @@ try:
 except:
        print 'EXCEPTION IN PYTHON STARTUP CODE:'
        print '-'*60
-       traceback.print_exc(file=sys.stdout)
+       print_exc(file=stdout)
        quitMainloop(5)
        print '-'*60