Пример #1
0
 def readConfiguration(self):
     if not path.exists(CONFIG):
         return
     mtime = path.getmtime(CONFIG)
     if mtime == self.configMtime:
         return
     self.configMtime = mtime
     self.services[0].clear()
     self.services[1].clear()
     configuration = cet_parse(CONFIG).getroot()
     version = configuration.get("version", None)
     if version is None:
         factor = 60
     else:
         factor = 1
     for service in configuration.findall("service"):
         value = service.text
         if value:
             pos = value.rfind(':')
             # don't split alternative service
             if pos != -1 and not value.startswith('1:134:'):
                 value = value[:pos + 1]
             duration = service.get('duration', None)
             duration = duration and int(duration) * factor
             self.services[0].add(EPGRefreshService(value, duration))
     for bouquet in configuration.findall("bouquet"):
         value = bouquet.text
         if value:
             duration = bouquet.get('duration', None)
             duration = duration and int(duration)
             self.services[1].add(EPGRefreshService(value, duration))
    def render(self, req):
        req.setResponseCode(http.OK)
        req.setHeader('Content-type', 'application/xhtml+xml')
        req.setHeader('charset', 'UTF-8')

        if 'sref' in req.args:
            services = OrderedSet()
            bouquets = OrderedSet()
            for sref in req.args.get('sref'):
                sref = unquote(sref)
                ref = eServiceReference(sref)
                if not ref.valid():
                    services = bouquets = None
                    break
                elif (ref.flags & 7) == 7:
                    epgservice = EPGRefreshService(sref, None)
                    if epgservice not in bouquets:
                        bouquets.add(epgservice)
                else:
                    if not (ref.flags & eServiceReference.isGroup):
                        # strip all after last :
                        pos = sref.rfind(':')
                        if pos != -1:
                            if sref[pos - 1] == ':':
                                pos -= 1
                            sref = sref[:pos + 1]

                    epgservice = EPGRefreshService(sref, None)
                    if epgservice not in services:
                        services.add(epgservice)
            if services is not None and bouquets is not None:
                scanServices = epgrefresh.generateServicelist(
                    services, bouquets)
            else:
                scanServices = []
        else:
            scanServices = epgrefresh.generateServicelist(
                epgrefresh.services[0], epgrefresh.services[1])

        returnlist = [
            "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<e2servicelist>"
        ]
        extend = returnlist.extend
        for serviceref in scanServices:
            ref = ServiceReference(str(serviceref))
            returnlist.extend((
                ' <e2service>\n',
                '  <e2servicereference>',
                stringToXML(str(serviceref)),
                '</e2servicereference>\n',
                '  <e2servicename>',
                stringToXML(ref.getServiceName().replace('\xc2\x86',
                                                         '').replace(
                                                             '\xc2\x87', '')),
                '</e2servicename>\n',
                ' </e2service>\n',
            ))
        returnlist.append('\n</e2servicelist>')
        return ''.join(returnlist)
Пример #3
0
    def generateServicelist(self, services, bouquets):
        # This will hold services which are not explicitely in our list
        additionalServices = []
        additionalBouquets = []

        # See if we are supposed to read in autotimer services
        if config.plugins.epgrefresh.inherit_autotimer.value:
            removeInstance = False
            try:
                # Import Instance
                from Plugins.Extensions.AutoTimer.plugin import autotimer

                if autotimer is None:
                    removeInstance = True
                    # Create an instance
                    from Plugins.Extensions.AutoTimer.AutoTimer import AutoTimer
                    autotimer = AutoTimer()

                # Read in configuration
                autotimer.readXml()
            except Exception as e:
                print("[EPGRefresh] Could not inherit AutoTimer Services:", e)
            else:
                # Fetch services
                for timer in autotimer.getEnabledTimerList():
                    additionalServices.extend(
                        [EPGRefreshService(x, None) for x in timer.services])
                    additionalBouquets.extend(
                        [EPGRefreshService(x, None) for x in timer.bouquets])
            finally:
                # Remove instance if there wasn't one before
                if removeInstance:
                    autotimer = None

        scanServices = []
        channelIdList = []
        self.addServices(services, scanServices, channelIdList)

        serviceHandler = eServiceCenter.getInstance()
        for bouquet in bouquets.union(additionalBouquets):
            myref = eServiceReference(bouquet.sref)
            list = serviceHandler.list(myref)
            if list is not None:
                while 1:
                    s = list.getNext()
                    # TODO: I wonder if its sane to assume we get services here (and not just new lists)
                    if s.valid():
                        additionalServices.append(
                            EPGRefreshService(s.toString(), None))
                    else:
                        break
        del additionalBouquets[:]

        self.addServices(additionalServices, scanServices, channelIdList)
        del additionalServices[:]

        return scanServices
Пример #4
0
    def generateServicelist(self, services, bouquets):
        additionalServices = []
        additionalBouquets = []
        if config.plugins.epgrefresh.inherit_autotimer.value:
            try:
                from Plugins.Extensions.AutoTimer.plugin import autotimer
                if autotimer is None:
                    from Plugins.Extensions.AutoTimer.AutoTimer import AutoTimer
                    autotimer = AutoTimer()
                autotimer.readXml()
            except Exception as e:
                print("[EPGRefresh] Could not inherit AutoTimer Services:", e)
            else:
                for timer in autotimer.getEnabledTimerList():
                    additionalServices.extend(
                        [EPGRefreshService(x, None) for x in timer.services])
                    additionalBouquets.extend(
                        [EPGRefreshService(x, None) for x in timer.bouquets])
        scanServices = []
        channelIdList = []
        self.addServices(services, scanServices, channelIdList)
        serviceHandler = eServiceCenter.getInstance()
        for bouquet in bouquets.union(additionalBouquets):
            myref = eServiceReference(bouquet.sref)
            list = serviceHandler.list(myref)
            if list is not None:
                while 1:
                    s = list.getNext()
                    if s and s.valid() and s.type == eServiceReference.idDVB:
                        additionalServices.append(
                            EPGRefreshService(s.toString(), None))
                    else:
                        break
        del additionalBouquets[:]

        def sortServices(services):  # sort by positions - better for motor
            unsortedServices = []
            for service in services:
                ref = service.sref
                position = ref.split(":")[6][:-4]
                if not position:
                    position = "0"
                auxiliarySortParameter = int(position, 16)
                if auxiliarySortParameter > 1800:
                    auxiliarySortParameter = 3600 - auxiliarySortParameter
                unsortedServices.append((auxiliarySortParameter, service))
            unsortedServices.sort()
            sortedServices = []
            for service in unsortedServices:
                sortedServices.append(service[1])
            return sortedServices

        self.addServices(additionalServices, scanServices, channelIdList)
        scanServices = sortServices(scanServices)
        del additionalServices[:]
        return scanServices
Пример #5
0
    def readConfiguration(self):
        # Check if file exists
        if not path.exists(CONFIG):
            return

        # Check if file did not change
        mtime = path.getmtime(CONFIG)
        if mtime == self.configMtime:
            return

        # Keep mtime
        self.configMtime = mtime

        # Empty out list
        self.services[0].clear()
        self.services[1].clear()

        # Open file
        configuration = cet_parse(CONFIG).getroot()
        version = configuration.get("version", None)
        if version is None:
            factor = 60
        else:  #if version == "1"
            factor = 1

        # Add References
        for service in configuration.findall("service"):
            value = service.text
            if value:
                # strip all after last : (custom name)
                pos = value.rfind(':')
                # don't split alternative service
                if value.find('1:134:1') == -1 and pos != -1:
                    value = value[:pos + 1]

                duration = service.get('duration', None)
                duration = duration and int(duration) * factor

                self.services[0].add(EPGRefreshService(value, duration))
        for bouquet in configuration.findall("bouquet"):
            value = bouquet.text
            if value:
                duration = bouquet.get('duration', None)
                duration = duration and int(duration)
                self.services[1].add(EPGRefreshService(value, duration))
Пример #6
0
def eventinfo(session, servicelist, **kwargs):
    ref = session.nav.getCurrentlyPlayingServiceReference()
    if not ref:
        return
    sref = ref.toString()
    # strip all after last :
    pos = sref.rfind(':')
    if pos != -1:
        sref = sref[:pos + 1]

    epgrefresh.services[0].add(EPGRefreshService(str(sref), None))
	def finishedServiceSelection(self, *args):
		if args:
			list = self["config"].getList()
			list.append(getConfigListEntry(
				_("Refreshing"),
				NoSave(ConfigSelection(choices = [(
					EPGRefreshService(str(args[0].toString()), None),
					ServiceReference(args[0]).getServiceName().replace('\xc2\x86', '').replace('\xc2\x87', '')
				)]))
			))
			self["config"].setList(list)
Пример #8
0
def addtoEPGRefresh(self, add):
	ref = self.csel.servicelist.getCurrent()
	if not ref:
		return
	sref = ref.toString()
	pos = sref.rfind(':')
	if pos != -1 and not value.startswith('1:134:'):
		sref = sref[:pos+1]
	try:
		epgrefresh.services[0].add(EPGRefreshService(str(sref), None))
	except:
		pass
	try:
		epgrefresh.saveConfiguration()
	except:
		pass
	self.close()
Пример #9
0
def addtoEPGRefresh(self, add):
	ref = self.csel.servicelist.getCurrent()
	if not ref:
		return
	sref = ref.toString()
	# strip all after last :
	pos = sref.rfind(':')
	if pos != -1:
		sref = sref[:pos+1]
	try:
		epgrefresh.services[0].add(EPGRefreshService(str(sref), None))
	except:
		pass
	try:
		epgrefresh.saveConfiguration()
	except:
		pass
	self.close()
Пример #10
0
    def render(self, req):
        do_add = self.type == self.TYPE_ADD
        state = False

        if 'multi' in req.args:
            if epgrefresh.services[0]:
                epgrefresh.services[0].clear()
                state = True
            if epgrefresh.services[1]:
                epgrefresh.services[1].clear()
                state = True

        if 'sref' in req.args:
            duration = req.args.get("duration", None)
            try:
                duration = duration and int(duration)
            except ValueError as ve:
                output = 'invalid value for "duration": ' + str(duration)
            else:
                for sref in req.args.get('sref'):
                    sref = unquote(sref)
                    ref = eServiceReference(sref)
                    if not ref.valid():
                        output = 'invalid value for "sref": ' + str(sref)
                    elif (ref.flags & 7) == 7:
                        epgservice = EPGRefreshService(sref, duration)
                        # bouquet
                        if epgservice in epgrefresh.services[1]:
                            if do_add:
                                output = "bouquet already in list"
                            else:
                                epgrefresh.services[1].remove(epgservice)
                                output = "bouquet removed from list"
                                state = True
                        else:
                            if do_add:
                                epgrefresh.services[1].add(epgservice)
                                output = "bouquet added to list"
                                state = True
                            else:
                                output = "bouquet not in list"
                    else:
                        if not (ref.flags & eServiceReference.isGroup):
                            # strip all after last :
                            pos = sref.rfind(':')
                            if pos != -1:
                                if sref[pos - 1] == ':':
                                    pos -= 1
                                sref = sref[:pos + 1]

                        epgservice = EPGRefreshService(sref, duration)
                        # assume service
                        if epgservice in epgrefresh.services[0]:
                            if do_add:
                                output = "service already in list"
                            else:
                                epgrefresh.services[0].remove(epgservice)
                                output = "service removed from list"
                                state = True
                        else:
                            if do_add:
                                epgrefresh.services[0].add(epgservice)
                                output = "service added to list"
                                state = True
                            else:
                                output = "service not in list"

                # save if list changed
                if state:
                    epgrefresh.saveConfiguration()
        else:
            output = 'missing argument "sref"'

        if 'multi' in req.args:
            output = 'service restriction changed'

        req.setResponseCode(http.OK)
        req.setHeader('Content-type', 'application/xhtml+xml')
        req.setHeader('charset', 'UTF-8')

        return """<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
<e2simplexmlresult>
 <e2state>%s</e2state>
 <e2statetext>%s</e2statetext>
</e2simplexmlresult> """ % ('True' if state else 'False', output)
Пример #11
0
class EPGRefresh:
    """Simple Class to refresh EPGData"""
    def __init__(self):
        # Initialize
        self.services = (set(), set())
        self.previousService = None
        self.forcedScan = False
        self.session = None
        self.beginOfTimespan = 0

        # Mtime of configuration files
        self.configMtime = -1

        # Read in Configuration
        self.readConfiguration()

    def readConfiguration(self):
        # Check if file exists
        if not path.exists(CONFIG):
            return

        # Check if file did not change
        mtime = path.getmtime(CONFIG)
        if mtime == self.configMtime:
            return

        # Keep mtime
        self.configMtime = mtime

        # Empty out list
        self.services[0].clear()
        self.services[1].clear()

        # Open file
        configuration = cet_parse(CONFIG).getroot()

        # Add References
        for service in configuration.findall("service"):
            value = service.text
            if value:
                # strip all after last : (custom name)
                pos = value.rfind(':')
                if pos != -1:
                    value = value[:pos + 1]

                duration = service.get('duration', None)
                duration = duration and int(duration)

                self.services[0].add(EPGRefreshService(value, duration))
        for bouquet in configuration.findall("bouquet"):
            value = bouquet.text
            if value:
                duration = bouquet.get('duration', None)
                duration = duration and int(duration)
                self.services[1].add(EPGRefreshService(value, duration))

    def buildConfiguration(self, webif=False):
        list = ['<?xml version="1.0" ?>\n<epgrefresh>\n\n']

        if webif:
            TAGSERVICE = 'e2servicereference'
            TAGBOUQUET = 'e2servicereference'
            TAGNAME = 'e2servicename'
        else:
            TAGSERVICE = 'service'
            TAGBOUQUET = 'bouquet'
            TAGNAME = '!--'

        for service in self.services[0]:
            ref = ServiceReference(service.sref)
            list.extend((' <', TAGNAME, '>',
                         stringToXML(ref.getServiceName().replace(
                             '\xc2\x86',
                             '').replace('\xc2\x87',
                                         '')), '</', TAGNAME, '>\n'))
            list.extend((' <', TAGSERVICE))
            if service.duration is not None:
                list.extend((' duration="', str(service.duration), '"'))
            list.extend(
                ('>', stringToXML(service.sref), '</', TAGSERVICE, '>\n'))
        for bouquet in self.services[1]:
            ref = ServiceReference(bouquet.sref)
            list.extend((' <', TAGNAME, '>',
                         stringToXML(ref.getServiceName().replace(
                             '\xc2\x86',
                             '').replace('\xc2\x87',
                                         '')), '</', TAGNAME, '>\n'))
            list.extend((' <', TAGBOUQUET))
            if bouquet.duration is not None:
                list.extend((' duration="', str(bouquet.duration), '"'))
            list.extend(
                ('>', stringToXML(bouquet.sref), '</', TAGBOUQUET, '>\n'))

        list.append('\n</epgrefresh>')

        return list

    def saveConfiguration(self):
        file = open(CONFIG, 'w')
        file.writelines(self.buildConfiguration())

        file.close()

    def forceRefresh(self, session=None):
        print "[EPGRefresh] Forcing start of EPGRefresh"
        if self.session is None:
            if session is not None:
                self.session = session
            else:
                return False

        self.forcedScan = True
        self.prepareRefresh()
        return True

    def start(self, session=None):
        if session is not None:
            self.session = session

        epgrefreshtimer.setRefreshTimer(self.createWaitTimer)

    def stop(self):
        print "[EPGRefresh] Stopping Timer"
        epgrefreshtimer.clear()

    def prepareRefresh(self):
        print "[EPGRefresh] About to start refreshing EPG"

        # Keep service
        self.previousService = self.session.nav.getCurrentlyPlayingServiceReference(
        )

        # Maybe read in configuration
        try:
            self.readConfiguration()
        except Exception, e:
            print "[EPGRefresh] Error occured while reading in configuration:", e

        # This will hold services which are not explicitely in our list
        additionalServices = []
        additionalBouquets = []

        # See if we are supposed to read in autotimer services
        if config.plugins.epgrefresh.inherit_autotimer.value:
            removeInstance = False
            try:
                # Import Instance
                from Plugins.Extensions.AutoTimer.plugin import autotimer

                if autotimer is None:
                    removeInstance = True
                    # Create an instance
                    from Plugins.Extensions.AutoTimer.AutoTimer import AutoTimer
                    autotimer = AutoTimer()

                # Read in configuration
                autotimer.readXml()
            except Exception, e:
                print "[EPGRefresh] Could not inherit AutoTimer Services:", e
            else:
                # Fetch services
                for timer in autotimer.getEnabledTimerList():
                    additionalServices.extend(
                        [EPGRefreshService(x, None) for x in timer.services])
                    additionalBouquets.extend(
                        [EPGRefreshService(x, None) for x in timer.bouquets])
            finally:
Пример #12
0
            finally:
                # Remove instance if there wasn't one before
                if removeInstance:
                    autotimer = None

        serviceHandler = eServiceCenter.getInstance()
        for bouquet in self.services[1].union(additionalBouquets):
            myref = eServiceReference(bouquet.sref)
            list = serviceHandler.list(myref)
            if list is not None:
                while 1:
                    s = list.getNext()
                    # TODO: I wonder if its sane to assume we get services here (and not just new lists)
                    if s.valid():
                        additionalServices.append(
                            EPGRefreshService(s.toString(), None))
                    else:
                        break
        del additionalBouquets[:]

        scanServices = []
        channelIdList = []
        for scanservice in self.services[0].union(additionalServices):
            service = eServiceReference(scanservice.sref)
            if not service.valid() \
             or (service.flags & (eServiceReference.isMarker|eServiceReference.isDirectory)):

                continue

            channelID = '%08x%04x%04x' % (
                service.getUnsignedData(4),  # NAMESPACE
Пример #13
0
	def render(self, req):
		do_add = self.type == self.TYPE_ADD
		state = False

		if 'multi' in req.args:
			if epgrefresh.services[0]:
				epgrefresh.services[0].clear()
				state = True
			if epgrefresh.services[1]:
				epgrefresh.services[1].clear()
				state = True

		if 'sref' in req.args:
			duration = req.args.get("duration", None)
			try:
				duration = duration and int(duration)
			except ValueError, ve:
				output = 'invalid value for "duration": ' + str(duration)
			else:
				for sref in req.args.get('sref'):
					sref = unquote(sref)
					ref = eServiceReference(sref)
					if not ref.valid():
						output = 'invalid value for "sref": ' + str(sref)
					elif (ref.flags & 7) == 7:
						epgservice = EPGRefreshService(sref, duration)
						# bouquet
						if epgservice in epgrefresh.services[1]:
							if do_add:
								output = "bouquet already in list"
							else:
								epgrefresh.services[1].remove(epgservice)
								output = "bouquet removed from list"
								state = True
						else:
							if do_add:
								epgrefresh.services[1].add(epgservice)
								output = "bouquet added to list"
								state = True
							else:
								output = "bouquet not in list"
					else:
						if not (ref.flags & eServiceReference.isGroup):
							# strip all after last :
							pos = sref.rfind(':')
							if pos != -1:
								if sref[pos-1] == ':':
									pos -= 1
								sref = sref[:pos+1]

						epgservice = EPGRefreshService(sref, duration)
						# assume service
						if epgservice in epgrefresh.services[0]:
							if do_add:
								output = "service already in list"
							else:
								epgrefresh.services[0].remove(epgservice)
								output = "service removed from list"
								state = True
						else:
							if do_add:
								epgrefresh.services[0].add(epgservice)
								output = "service added to list"
								state = True
							else:
								output = "service not in list"

				# save if list changed
				if state:
					epgrefresh.saveConfiguration()
Пример #14
0
    def prepareRefresh(self):
        print("[EPGRefresh] About to start refreshing EPG")

        # Maybe read in configuration
        try:
            self.readConfiguration()
        except Exception as e:
            print("[EPGRefresh] Error occured while reading in configuration:",
                  e)

        # This will hold services which are not explicitely in our list
        additionalServices = []
        additionalBouquets = []

        # See if we are supposed to read in autotimer services
        if config.plugins.epgrefresh.inherit_autotimer.value:
            removeInstance = False
            try:
                # Import Instance
                from Plugins.Extensions.AutoTimer.plugin import autotimer

                if autotimer is None:
                    removeInstance = True
                    # Create an instance
                    from Plugins.Extensions.AutoTimer.AutoTimer import AutoTimer
                    autotimer = AutoTimer()

                # Read in configuration
                autotimer.readXml()
            except Exception as e:
                print("[EPGRefresh] Could not inherit AutoTimer Services:", e)
            else:
                # Fetch services
                for timer in autotimer.getEnabledTimerList():
                    additionalServices.extend(
                        [EPGRefreshService(x, None) for x in timer.services])
                    additionalBouquets.extend(
                        [EPGRefreshService(x, None) for x in timer.bouquets])
            finally:
                # Remove instance if there wasn't one before
                if removeInstance:
                    autotimer = None

        scanServices = []
        channelIdList = []
        self.addServices(self.services[0], scanServices, channelIdList)

        serviceHandler = eServiceCenter.getInstance()
        for bouquet in self.services[1].union(additionalBouquets):
            myref = eServiceReference(bouquet.sref)
            list = serviceHandler.list(myref)
            if list is not None:
                while 1:
                    s = list.getNext()
                    # TODO: I wonder if its sane to assume we get services here (and not just new lists)
                    if s.valid():
                        additionalServices.append(
                            EPGRefreshService(s.toString(), None))
                    else:
                        break
        del additionalBouquets[:]

        self.addServices(additionalServices, scanServices, channelIdList)
        del additionalServices[:]

        # Debug
        print("[EPGRefresh] Services we're going to scan:",
              ', '.join([repr(x) for x in scanServices]))

        self.maybeStopAdapter()
        # NOTE: start notification is handled in adapter initializer
        if config.plugins.epgrefresh.adapter.value.startswith("pip"):
            hidden = config.plugins.epgrefresh.adapter.value == "pip_hidden"
            refreshAdapter = PipAdapter(self.session, hide=hidden)
        elif config.plugins.epgrefresh.adapter.value.startswith("record"):
            refreshAdapter = RecordAdapter(self.session)
        else:
            refreshAdapter = MainPictureAdapter(self.session)

        if (not refreshAdapter.backgroundCapable
                and Screens.Standby.inStandby) or not refreshAdapter.prepare():
            print(
                "[EPGRefresh] Adapter is not able to run in background or not available, falling back to MainPictureAdapter"
            )
            refreshAdapter = MainPictureAdapter(self.session)
            refreshAdapter.prepare()
        self.refreshAdapter = refreshAdapter

        self.scanServices = scanServices
        self.refresh()
Пример #15
0
    def render(self, req):
        do_add = self.type == self.TYPE_ADD
        state = False

        if 'sref' in req.args:
            sref = req.args["sref"][0]
            if do_add:
                # strip all after last : (custom name)
                pos = sref.rfind(':')
                if pos != -1:
                    sref = sref[:pos + 1]

            duration = req.args.get("duration", None)
            try:
                duration = duration and int(duration)
            except ValueError, ve:
                output = 'invalid value for "duration": ' + str(duration)
            else:
                epgservice = EPGRefreshService(sref, duration)

                if sref:
                    ref = eServiceReference(str(sref))
                    if not ref.valid():
                        output = 'invalid value for "sref": ' + str(sref)
                    elif (ref.flags & 7) == 7:
                        # bouquet
                        if epgservice in epgrefresh.services[1]:
                            if do_add:
                                output = "bouquet already in list"
                            else:
                                epgrefresh.services[1].remove(epgservice)
                                output = "bouquet removed from list"
                                state = True
                        else:
                            if do_add:
                                epgrefresh.services[1].add(epgservice)
                                output = "bouquet added to list"
                                state = True
                            else:
                                output = "bouquet not in list"
                    else:
                        # assume service
                        if epgservice in epgrefresh.services[0]:
                            if do_add:
                                output = "service already in list"
                            else:
                                epgrefresh.services[0].remove(epgservice)
                                output = "service removed from list"
                                state = True
                        else:
                            if do_add:
                                epgrefresh.services[0].add(epgservice)
                                output = "service added to list"
                                state = True
                            else:
                                output = "service not in list"

                    # save if list changed
                    if state:
                        epgrefresh.saveConfiguration()
                else:
                    output = 'invalid value for "sref": ' + str(sref)
Пример #16
0
					additionalBouquets.extend([EPGRefreshService(x, None) for x in timer.bouquets])
			finally:
				# Remove instance if there wasn't one before
				if removeInstance:
					autotimer = None

		serviceHandler = eServiceCenter.getInstance()
		for bouquet in self.services[1].union(additionalBouquets):
			myref = eServiceReference(bouquet.sref)
			list = serviceHandler.list(myref)
			if list is not None:
				while 1:
					s = list.getNext()
					# TODO: I wonder if its sane to assume we get services here (and not just new lists)
					if s.valid():
						additionalServices.append(EPGRefreshService(s.toString(), None))
					else:
						break
		del additionalBouquets[:]

		scanServices = []
		channelIdList = []
		for scanservice in self.services[0].union(additionalServices):
			service = eServiceReference(scanservice.sref)
			if not service.valid() \
				or (service.flags & (eServiceReference.isMarker|eServiceReference.isDirectory)):

				continue

			channelID = '%08x%04x%04x' % (
				service.getUnsignedData(4), # NAMESPACE