have finaly found solution at Open*L* forum (thanks to Dima73)
the problem is Python method is too slow -
every time presing green key have to wait 9 seconds (red key spends 4sec)
dear developers please implement this important feature dirrectly into enigma2, at least something like len or count for eServiceReference
there few changes from the /usr/lib/enigma2/python/Screens/ChannelSelection.py
Code
.
..
...
def showAllServices(self):
if not self.pathChangeDisabled:
refstr = '%s ORDER BY name'%(self.service_types)
if not self.preEnterPath(refstr):
ref = eServiceReference(refstr)
currentRoot = self.getRoot()
if currentRoot is None or currentRoot != ref:
self.clearPath()
self.enterPath(ref)
# +
def getServicesCount(self, root_ref):
count = 0
serviceHandler = eServiceCenter.getInstance()
list = serviceHandler.list(root_ref)
if list is not None:
while True:
s = list.getNext()
if not s.valid(): break
count += 1
return count
# + END
def showSatellites(self):
if not self.pathChangeDisabled:
refstr = '%s FROM SATELLITES ORDER BY satellitePosition'%(self.service_types)
if not self.preEnterPath(refstr):
ref = eServiceReference(refstr)
justSet=False
prev = None
if self.isBasePathEqual(ref):
if self.isPrevPathEqual(ref):
justSet=True
prev = self.pathUp(justSet)
else:
currentRoot = self.getRoot()
if currentRoot is None or currentRoot != ref:
justSet=True
self.clearPath()
self.enterPath(ref, True)
if justSet:
serviceHandler = eServiceCenter.getInstance()
servicelist = serviceHandler.list(ref)
if not servicelist is None:
while True:
service = servicelist.getNext()
if not service.valid(): #check if end of list
break
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:
# - service_type = _("New")
# +
service_type = _("New") + " (%d)"%(self.getServicesCount(service))
# + END
elif service.getPath().find("numCAIDs") != -1:
# - service_type = _("Services") + " FTA"
# +
service_type = _("Services") + " FTA" + " (%d)"%(self.getServicesCount(service))
# + END
else:
# - service_type = _("Services")
# +
service_type = _("Services") + " (%d)"%(self.getServicesCount(service))
# + END
try:
# why we need this cast?
service_name = str(nimmanager.getSatDescription(orbpos))
except:
if unsigned_orbpos == 0xFFFF: #Cable
service_name = _("Cable")
elif unsigned_orbpos == 0xEEEE: #Terrestrial
service_name = _("Terrestrial")
else:
if orbpos > 1800: # west
orbpos = 3600 - orbpos
h = _("W")
else:
h = _("E")
service_name = ("%d.%d" + h) % (orbpos / 10, orbpos % 10)
service.setName("%s - %s" % (service_name, service_type))
self.servicelist.addService(service)
cur_ref = self.session.nav.getCurrentlyPlayingServiceReference()
if cur_ref:
pos = self.service_types.rfind(':')
refstr = '%s (channelID == %08x%04x%04x) && %s ORDER BY name' %(self.service_types[:pos+1],
cur_ref.getUnsignedData(4), # NAMESPACE
cur_ref.getUnsignedData(2), # TSID
cur_ref.getUnsignedData(3), # ONID
self.service_types[pos+1:])
ref = eServiceReference(refstr)
ref.setName(_("Current Transponder"))
self.servicelist.addService(ref)
self.servicelist.finishFill()
if prev is not None:
self.setCurrentSelection(prev)
...
..
.
Alles anzeigen