+from Tools.Profile import profile
+
from Screen import Screen
from Components.Button import Button
from Components.ServiceList import ServiceList
from Components.ActionMap import NumberActionMap, ActionMap, HelpableActionMap
from Components.MenuList import MenuList
-from Components.ServiceEventTracker import ServiceEventTracker
+from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase
+profile("ChannelSelection.py 1")
from EpgSelection import EPGSelection
-from enigma import eServiceReference, eEPGCache, eServiceCenter, eTimer, eDVBDB, iPlayableService, iServiceInformation
+from enigma import eServiceReference, eEPGCache, eServiceCenter, eRCInput, eTimer, eDVBDB, iPlayableService, iServiceInformation, getPrevAsciiCode
from Components.config import config, ConfigSubsection, ConfigText
from Tools.NumericalTextInput import NumericalTextInput
+profile("ChannelSelection.py 2")
from Components.NimManager import nimmanager
-from Components.Sources.Source import ObsoleteSource
+profile("ChannelSelection.py 2.1")
from Components.Sources.RdsDecoder import RdsDecoder
+profile("ChannelSelection.py 2.2")
from Components.Sources.ServiceEvent import ServiceEvent
+profile("ChannelSelection.py 2.3")
from Components.Input import Input
+profile("ChannelSelection.py 3")
from Components.ParentalControl import parentalControl
-from Components.Pixmap import Pixmap
from Screens.InputBox import InputBox, PinInput
from Screens.MessageBox import MessageBox
from Screens.ServiceInfo import ServiceInfo
+profile("ChannelSelection.py 4")
from Screens.RdsDisplay import RassInteractive
from ServiceReference import ServiceReference
from Tools.BoundFunction import boundFunction
from re import compile
from os import remove
+profile("ChannelSelection.py after imports")
FLAG_SERVICE_NEW_FOUND = 64 #define in lib/dvb/idvb.h as dxNewFound = 64
EDIT_BOUQUET = 1
EDIT_ALTERNATIVES = 2
-def apend_when_current_valid(current, menu, args):
- if current and current.valid():
+def append_when_current_valid(current, menu, args, level = 0):
+ if current and current.valid() and level <= config.usage.setup_level.index:
menu.append(args)
class ChannelContextMenu(Screen):
def __init__(self, session, csel):
Screen.__init__(self, session)
+ #raise "we need a better summary screen here"
self.csel = csel
self.bsel = None
haveBouquets = config.usage.multibouquet.value
if not (len(current_sel_path) or current_sel_flags & (eServiceReference.isDirectory|eServiceReference.isMarker)):
- apend_when_current_valid(current, menu, (_("show transponder info"), self.showServiceInformations))
+ append_when_current_valid(current, menu, (_("show transponder info"), self.showServiceInformations), level = 2)
if csel.bouquet_mark_edit == OFF and not csel.movemode:
if not inBouquetRootList:
isPlayable = not (current_sel_flags & (eServiceReference.isMarker|eServiceReference.isDirectory))
if isPlayable:
if config.ParentalControl.configured.value:
if parentalControl.getProtectionLevel(csel.getCurrentSelection().toCompareString()) == -1:
- apend_when_current_valid(current, menu, (_("add to parental protection"), boundFunction(self.addParentalProtection, csel.getCurrentSelection())))
+ append_when_current_valid(current, menu, (_("add to parental protection"), boundFunction(self.addParentalProtection, csel.getCurrentSelection())), level = 0)
else:
- apend_when_current_valid(current, menu, (_("remove from parental protection"), boundFunction(self.removeParentalProtection, csel.getCurrentSelection())))
+ append_when_current_valid(current, menu, (_("remove from parental protection"), boundFunction(self.removeParentalProtection, csel.getCurrentSelection())), level = 0)
if haveBouquets:
- apend_when_current_valid(current, menu, (_("add service to bouquet"), self.addServiceToBouquetSelected))
+ append_when_current_valid(current, menu, (_("add service to bouquet"), self.addServiceToBouquetSelected), level = 0)
else:
- apend_when_current_valid(current, menu, (_("add service to favourites"), self.addServiceToBouquetSelected))
+ append_when_current_valid(current, menu, (_("add service to favourites"), self.addServiceToBouquetSelected), level = 0)
else:
+ if current_root.getPath().find('FROM SATELLITES') != -1:
+ append_when_current_valid(current, menu, (_("remove selected satellite"), self.removeSatelliteServices), level = 0)
if haveBouquets:
if not inBouquet and current_sel_path.find("PROVIDERS") == -1:
- apend_when_current_valid(current, menu, (_("copy to bouquets"), self.copyCurrentToBouquetList))
+ append_when_current_valid(current, menu, (_("copy to bouquets"), self.copyCurrentToBouquetList), level = 0)
if current_sel_path.find("flags == %d" %(FLAG_SERVICE_NEW_FOUND)) != -1:
- apend_when_current_valid(current, menu, (_("remove all new found flags"), self.removeAllNewFoundFlags))
+ append_when_current_valid(current, menu, (_("remove all new found flags"), self.removeAllNewFoundFlags), level = 0)
if inBouquet:
- apend_when_current_valid(current, menu, (_("remove entry"), self.removeCurrentService))
+ append_when_current_valid(current, menu, (_("remove entry"), self.removeCurrentService), level = 0)
if current_root and current_root.getPath().find("flags == %d" %(FLAG_SERVICE_NEW_FOUND)) != -1:
- apend_when_current_valid(current, menu, (_("remove new found flag"), self.removeNewFoundFlag))
+ append_when_current_valid(current, menu, (_("remove new found flag"), self.removeNewFoundFlag), level = 0)
else:
menu.append((_("add bouquet"), self.showBouquetInputBox))
- apend_when_current_valid(current, menu, (_("remove entry"), self.removeBouquet))
+ append_when_current_valid(current, menu, (_("remove entry"), self.removeBouquet), level = 0)
if inBouquet: # current list is editable?
if csel.bouquet_mark_edit == OFF:
if not csel.movemode:
- apend_when_current_valid(current, menu, (_("enable move mode"), self.toggleMoveMode))
+ append_when_current_valid(current, menu, (_("enable move mode"), self.toggleMoveMode), level = 1)
if not inBouquetRootList and current_root and not (current_root.flags & eServiceReference.isGroup):
menu.append((_("add marker"), self.showMarkerInputBox))
if haveBouquets:
- apend_when_current_valid(current, menu, (_("enable bouquet edit"), self.bouquetMarkStart))
+ append_when_current_valid(current, menu, (_("enable bouquet edit"), self.bouquetMarkStart), level = 0)
else:
- apend_when_current_valid(current, menu, (_("enable favourite edit"), self.bouquetMarkStart))
+ append_when_current_valid(current, menu, (_("enable favourite edit"), self.bouquetMarkStart), level = 0)
if current_sel_flags & eServiceReference.isGroup:
- apend_when_current_valid(current, menu, (_("edit alternatives"), self.editAlternativeServices))
- apend_when_current_valid(current, menu, (_("show alternatives"), self.showAlternativeServices))
- apend_when_current_valid(current, menu, (_("remove all alternatives"), self.removeAlternativeServices))
+ append_when_current_valid(current, menu, (_("edit alternatives"), self.editAlternativeServices), level = 2)
+ append_when_current_valid(current, menu, (_("show alternatives"), self.showAlternativeServices), level = 2)
+ append_when_current_valid(current, menu, (_("remove all alternatives"), self.removeAlternativeServices), level = 2)
elif not current_sel_flags & eServiceReference.isMarker:
- apend_when_current_valid(current, menu, (_("add alternatives"), self.addAlternativeServices))
+ append_when_current_valid(current, menu, (_("add alternatives"), self.addAlternativeServices), level = 2)
else:
- apend_when_current_valid(current, menu, (_("disable move mode"), self.toggleMoveMode))
+ append_when_current_valid(current, menu, (_("disable move mode"), self.toggleMoveMode), level = 0)
else:
if csel.bouquet_mark_edit == EDIT_BOUQUET:
if haveBouquets:
- apend_when_current_valid(current, menu, (_("end bouquet edit"), self.bouquetMarkEnd))
- apend_when_current_valid(current, menu, (_("abort bouquet edit"), self.bouquetMarkAbort))
+ append_when_current_valid(current, menu, (_("end bouquet edit"), self.bouquetMarkEnd), level = 0)
+ append_when_current_valid(current, menu, (_("abort bouquet edit"), self.bouquetMarkAbort), level = 0)
else:
- apend_when_current_valid(current, menu, (_("end favourites edit"), self.bouquetMarkEnd))
- apend_when_current_valid(current, menu, (_("abort favourites edit"), self.bouquetMarkAbort))
+ append_when_current_valid(current, menu, (_("end favourites edit"), self.bouquetMarkEnd), level = 0)
+ append_when_current_valid(current, menu, (_("abort favourites edit"), self.bouquetMarkAbort), level = 0)
else:
- apend_when_current_valid(current, menu, (_("end alternatives edit"), self.bouquetMarkEnd))
- apend_when_current_valid(current, menu, (_("abort alternatives edit"), self.bouquetMarkAbort))
+ append_when_current_valid(current, menu, (_("end alternatives edit"), self.bouquetMarkEnd), level = 0)
+ append_when_current_valid(current, menu, (_("abort alternatives edit"), self.bouquetMarkAbort), level = 0)
menu.append((_("back"), self.cancelClick))
self["menu"] = MenuList(menu)
self.session.open( ServiceInfo, self.csel.getCurrentSelection() )
def showBouquetInputBox(self):
- self.session.openWithCallback(self.bouquetInputCallback, InputBox, title=_("Please enter a name for the new bouquet"), text="bouquetname", maxSize=False, type=Input.TEXT)
+ self.session.openWithCallback(self.bouquetInputCallback, InputBox, title=_("Please enter a name for the new bouquet"), text="bouquetname", maxSize=False, visible_width = 56, type=Input.TEXT)
def bouquetInputCallback(self, bouquet):
if bouquet is not None:
if recursive:
self.close(False)
+ def removeSatelliteServices(self):
+ curpath = self.csel.getCurrentSelection().getPath()
+ idx = curpath.find("satellitePosition == ")
+ if idx != -1:
+ tmp = curpath[idx+21:]
+ idx = tmp.find(')')
+ if idx != -1:
+ satpos = int(tmp[:idx])
+ eDVBDB.getInstance().removeServices(-1, -1, -1, satpos)
+ self.close()
+
def copyCurrentToBouquetList(self):
self.csel.copyCurrentToBouquetList()
self.close()
self.close()
def showMarkerInputBox(self):
- self.session.openWithCallback(self.markerInputCallback, InputBox, title=_("Please enter a name for the new marker"), text="markername", maxSize=False, type=Input.TEXT)
+ self.session.openWithCallback(self.markerInputCallback, InputBox, title=_("Please enter a name for the new marker"), text="markername", maxSize=False, visible_width = 56, type=Input.TEXT)
def markerInputCallback(self, marker):
if marker is not None:
self["ServiceEvent"] = ServiceEvent()
self.servicelist.connectSelChanged(self.__selectionChanged)
self.timer = eTimer()
- self.timer.timeout.get().append(self.updateEventInfo)
+ self.timer.callback.append(self.updateEventInfo)
self.onShown.append(self.__selectionChanged)
def __selectionChanged(self):
if mutableBouquetList:
if self.mode == MODE_TV:
bName += " (TV)"
- str = '1:7:1:0:0:0:0:0:0:0:(type == 1) FROM BOUQUET \"userbouquet.%s.tv\" ORDER BY bouquet'%(self.buildBouquetID(bName))
+ str = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET \"userbouquet.%s.tv\" ORDER BY bouquet'%(self.buildBouquetID(bName))
else:
bName += " (Radio)"
- str = '1:7:2:0:0:0:0:0:0:0:(type == 2) FROM BOUQUET \"userbouquet.%s.radio\" ORDER BY bouquet'%(self.buildBouquetID(bName))
+ str = '1:7:2:0:0:0:0:0:0:0:FROM BOUQUET \"userbouquet.%s.radio\" ORDER BY bouquet'%(self.buildBouquetID(bName))
new_bouquet_ref = eServiceReference(str)
if not mutableBouquetList.addService(new_bouquet_ref):
mutableBouquetList.flushChanges()
MODE_RADIO = 1
# this makes it much simple to implement a selectable radio or tv mode :)
-service_types_tv = '1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25)'
+service_types_tv = '1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25) || (type == 134)'
service_types_radio = '1:7:2:0:0:0:0:0:0:0:(type == 2)'
class ChannelSelectionBase(Screen):
self.bouquetNumOffsetCache = { }
- self["ChannelSelectBaseActions"] = NumberActionMap(["ChannelSelectBaseActions", "NumberActions"],
+ self["ChannelSelectBaseActions"] = NumberActionMap(["ChannelSelectBaseActions", "NumberActions", "InputAsciiActions"],
{
"showFavourites": self.showFavourites,
"showAllServices": self.showAllServices,
"prevBouquet": self.prevBouquet,
"nextMarker": self.nextMarker,
"prevMarker": self.prevMarker,
+ "gotAsciiCode": self.keyAsciiCode,
"1": self.keyNumberGlobal,
"2": self.keyNumberGlobal,
"3": self.keyNumberGlobal,
service = servicelist.getNext()
if not service.valid(): #check if end of list
break
- orbpos = service.getUnsignedData(4) >> 16
+ unsigned_orbpos = service.getUnsignedData(4) >> 16
+ orbpos = service.getData(4) >> 16
+ if orbpos < 0:
+ orbpos += 3600
if service.getPath().find("FROM PROVIDER") != -1:
service_type = _("Providers")
elif service.getPath().find("flags == %d" %(FLAG_SERVICE_NEW_FOUND)) != -1:
# why we need this cast?
service_name = str(nimmanager.getSatDescription(orbpos))
except:
- if orbpos == 0xFFFF: #Cable
+ if unsigned_orbpos == 0xFFFF: #Cable
service_name = _("Cable")
- elif orbpos == 0xEEEE: #Terrestrial
+ elif unsigned_orbpos == 0xEEEE: #Terrestrial
service_name = _("Terrestrial")
else:
if orbpos > 1800: # west
if len(charstr) == 1:
self.servicelist.moveToChar(charstr[0])
+ def keyAsciiCode(self):
+ unichar = unichr(getPrevAsciiCode())
+ charstr = unichar.encode("utf-8")
+ if len(charstr) == 1:
+ self.servicelist.moveToChar(charstr[0])
+
def getRoot(self):
return self.servicelist.getRoot()
return self.servicelist.getCurrent()
def setCurrentSelection(self, service):
- servicepath = service.getPath()
- pos = servicepath.find(" FROM BOUQUET")
- if pos != -1:
- if self.mode == MODE_TV:
- servicepath = '(type == 1)' + servicepath[pos:]
- else:
- servicepath = '(type == 2)' + servicepath[pos:]
- service.setPath(servicepath)
self.servicelist.setCurrent(service)
def getBouquetList(self):
ChannelSelectionEPG.__init__(self)
SelectionEventInfo.__init__(self)
- self["CurrentTime"] = ObsoleteSource(new_source = "global.CurrentTime", removal_date = "2008-01")
-
self["actions"] = ActionMap(["OkCancelActions", "TvRadioActions"],
{
"cancel": self.cancel,
})
self.lastChannelRootTimer = eTimer()
- self.lastChannelRootTimer.timeout.get().append(self.__onCreate)
+ self.lastChannelRootTimer.callback.append(self.__onCreate)
self.lastChannelRootTimer.start(100,True)
self.history_tv = [ ]
self.revertMode = None
config.usage.multibouquet.addNotifier(self.multibouquet_config_changed)
self.new_service_played = False
+ self.onExecBegin.append(self.asciiOn)
+
+ def asciiOn(self):
+ rcinput = eRCInput.getInstance()
+ rcinput.setKeyboardMode(rcinput.kmAscii)
+
+ def asciiOff(self):
+ rcinput = eRCInput.getInstance()
+ rcinput.setKeyboardMode(rcinput.kmNone)
def multibouquet_config_changed(self, val):
self.recallBouquetMode()
root = self.getRoot()
if not root or not (root.flags & eServiceReference.isGroup):
self.zap()
+ self.asciiOff()
self.close(ref)
#called from infoBar and channelSelected
elif self.revertMode == MODE_RADIO:
self.setModeRadio()
self.revertMode = None
+ self.asciiOff()
self.close(None)
-from Screens.InfoBarGenerics import InfoBarEvent, InfoBarServiceName
-
-class RadioInfoBar(Screen, InfoBarEvent, InfoBarServiceName):
+class RadioInfoBar(Screen):
def __init__(self, session):
Screen.__init__(self, session)
- InfoBarEvent.__init__(self)
- InfoBarServiceName.__init__(self)
- self["CurrentTime"] = ObsoleteSource(new_source = "global.CurrentTime", removal_date = "2008-01")
self["RdsDecoder"] = RdsDecoder(self.session.nav)
- self["BlinkingPoint"] = Pixmap()
- self["BlinkingPoint"].hide()
-class ChannelSelectionRadio(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelectionEPG):
+class ChannelSelectionRadio(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelectionEPG, InfoBarBase):
ALLOW_SUSPEND = True
def __init__(self, session, infobar):
ChannelSelectionBase.__init__(self, session)
ChannelSelectionEdit.__init__(self)
ChannelSelectionEPG.__init__(self)
+ InfoBarBase.__init__(self)
self.infobar = infobar
self.onLayoutFinish.append(self.onCreate)
},-1)
self["RdsActions"].setEnabled(False)
infobar.rds_display.onRassInteractivePossibilityChanged.append(self.RassInteractivePossibilityChanged)
+ self.onClose.append(self.__onClose)
+
+ def __onClose(self):
+ lastservice=eServiceReference(config.tv.lastservice.value)
+ self.session.nav.playService(lastservice)
def startRassInteractive(self):
self.info.hide();
self.infobar.rds_display.onRassInteractivePossibilityChanged.remove(self.RassInteractivePossibilityChanged)
self.info.hide()
#set previous tv service
- lastservice=eServiceReference(config.tv.lastservice.value)
- self.session.nav.playService(lastservice)
self.close(None)
def __evServiceStart(self):