store config in /etc/enigma2 and create the path if needed
[enigma2.git] / lib / python / Screens / InfoBarGenerics.py
index 8ab16c537313841a1cfb6f354779dc25eae8cd97..c1842796df28a327102c95644140adb40a6eec33 100644 (file)
@@ -6,7 +6,7 @@ from Components.config import configfile, configsequencearg
 from Components.config import config, configElement, ConfigSubsection, configSequence
 from ChannelSelection import ChannelSelection
 
-from Components.Pixmap import PixmapConditional
+from Components.Pixmap import Pixmap, PixmapConditional
 from Components.BlinkingPixmap import BlinkingPixmapConditional
 from Components.ServiceName import ServiceName
 from Components.EventInfo import EventInfo
@@ -20,6 +20,8 @@ from Screens.Mute import Mute
 from Screens.Standby import Standby
 from Screens.EventView import EventView
 
+from Tools import Notifications
+
 #from enigma import eTimer, eDVBVolumecontrol, quitMainloop
 from enigma import *
 
@@ -58,6 +60,8 @@ class InfoBarVolumeControl:
                config.audio.volume.save()
                
        def     volUp(self):
+               if (eDVBVolumecontrol.getInstance().isMuted()):
+                       self.volMute()
                eDVBVolumecontrol.getInstance().volumeUp()
                self.volumeDialog.instance.show()
                self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
@@ -65,6 +69,8 @@ class InfoBarVolumeControl:
                self.hideVolTimer.start(3000)
 
        def     volDown(self):
+               if (eDVBVolumecontrol.getInstance().isMuted()):
+                       self.volMute()
                eDVBVolumecontrol.getInstance().volumeDown()
                self.volumeDialog.instance.show()
                self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
@@ -246,7 +252,43 @@ class InfoBarNumberZap:
        def numberEntered(self, retval):
 #              print self.servicelist
                if retval > 0:
-                       self.servicelist.zapToNumber(retval)
+                       self.zapToNumber(retval)
+
+       def searchNumberHelper(self, serviceHandler, num, bouquet):
+               servicelist = serviceHandler.list(bouquet)
+               if not servicelist is None:
+                       while num:
+                               serviceIterator = servicelist.getNext()
+                               if not serviceIterator.valid(): #check end of list
+                                       break
+                               if serviceIterator.flags: #assume normal dvb service have no flags set
+                                       continue
+                               num -= 1;
+                       if not num: #found service with searched number ?
+                               return serviceIterator, 0
+               return None, num
+
+       def zapToNumber(self, number):
+               bouquet = self.servicelist.bouquet_root
+               service = None
+               serviceHandler = eServiceCenter.getInstance()
+               if bouquet.toString().find('FROM BOUQUET "bouquets.') == -1: #FIXME HACK
+                       service, number = self.searchNumberHelper(serviceHandler, number, bouquet)
+               else:
+                       bouquetlist = serviceHandler.list(bouquet)
+                       if not bouquetlist is None:
+                               while number:
+                                       bouquet = bouquetlist.getNext()
+                                       if not bouquet.valid(): #check end of list
+                                               break
+                                       if ((bouquet.flags & eServiceReference.flagDirectory) != eServiceReference.flagDirectory):
+                                               continue
+                                       service, number = self.searchNumberHelper(serviceHandler, number, bouquet)
+               if not service is None:
+                       self.session.nav.playService(service) #play service
+                       if self.servicelist.getRoot() != bouquet: #already in correct bouquet?
+                               self.servicelist.setRoot(bouquet)
+                       self.servicelist.setCurrentSelection(service) #select the service in servicelist
 
 class InfoBarChannelSelection:
        """ ChannelSelection - handles the channelSelection dialog and the initial 
@@ -396,7 +438,8 @@ class InfoBarInstantRecord:
                
                self["BlinkingPoint"] = BlinkingPixmapConditional()
                self.onShown.append(self["BlinkingPoint"].hidePixmap)
-
+               self["BlinkingPoint"].setConnect(self.session.nav.RecordTimer.isRecording)
+               
        def stopCurrentRecording(self): 
                self.session.nav.RecordTimer.removeEntry(self.recording)
                self.recording = None
@@ -418,7 +461,7 @@ class InfoBarInstantRecord:
                self.recording = self.session.nav.recordWithTimer(time.time(), time.time() + 3600, serviceref, epg, "instant record")
                self.recording.dontSave = True
                
-               self["BlinkingPoint"].setConnect(lambda: self.recording.isRunning())
+               #self["BlinkingPoint"].setConnect(lambda: self.recording.isRunning())
                
        def isInstantRecordRunning(self):
                if self.recording != None:
@@ -475,4 +518,30 @@ class InfoBarAdditionalInfo:
                
                self["FormatActive"] = PixmapConditional()
                # TODO: get the info from c++ somehow
-               self["FormatActive"].setConnect(lambda: False)
\ No newline at end of file
+               self["FormatActive"].setConnect(lambda: False)
+               
+               self["ButtonRed"] = Pixmap()
+               self["ButtonRedText"] = Label(_("Record"))
+               self["ButtonGreen"] = Pixmap()
+               self["ButtonYellow"] = Pixmap()
+               self["ButtonBlue"] = Pixmap()
+
+class InfoBarNotifications:
+       def __init__(self):
+               self.onExecBegin.append(self.checkNotifications)
+               Notifications.notificationAdded.append(self.checkNotificationsIfExecing)
+       
+       def checkNotificationsIfExecing(self):
+               if self.execing:
+                       self.checkNotifications()
+
+       def checkNotifications(self):
+               if len(Notifications.notifications):
+                       n = Notifications.notifications[0]
+                       Notifications.notifications = Notifications.notifications[1:]
+                       print "open",n
+                       cb = n[0]
+                       if cb is not None:
+                               self.session.openWithCallback(cb, *n[1:])
+                       else:
+                               self.session.open(*n[1:])