コード例 #1
0
	def setPiPService(self):
		if self.shown:
			service = self.source.getCurrentService()
			if self.currentRunningService is None or self.pipservice is None:
				self.currentRunningService = service
			# check, if tuner with the service is available
			service_center = eServiceCenter.getInstance()
			info = service_center.info(service)
			if info and info.isPlayable(service, self.currentRunningService):
				if service and (service.flags & eServiceReference.isGroup):
					ref = getBestPlayableServiceReference(service, eServiceReference())
				else:
					ref = service
				if ref and not (ref.flags & (eServiceReference.isMarker|eServiceReference.isDirectory)):
					if self.pipServiceRelation is not None:
						n_service = self.pipServiceRelation.get(ref.toString(),None)
						if n_service is not None:
							self.pipservice = eServiceCenter.getInstance().play(eServiceReference(n_service))
						else:
							self.pipservice = eServiceCenter.getInstance().play(ref)
					else:
						self.pipservice = eServiceCenter.getInstance().play(ref)
					if self.pipservice and not self.pipservice.setTarget(1):
						self.pipservice.start()
						return True
		self.pipservice = None
		return False
コード例 #2
0
	def getText(self):
		ref = self.source.service
		
		if ref is not None:
			if not isinstance(ref, iPlayableServicePtr):
				#bouquet or marker
				if ref.flags & (eServiceReference.isDirectory|eServiceReference.isMarker):
					info = eServiceCenter.getInstance().info(ref)
					if info:
						return info.getName(ref).replace(" ","_")
				#alternatives
				elif ref.flags & (eServiceReference.isGroup):
					if self.type == self.NAME:
						return eServiceCenter.getInstance().list(ref).getContent("N")[0].replace(" ","_")				
					return eServiceCenter.getInstance().list(ref).getContent("S")[0]
				#channel
				if self.type == self.NAME:
					info = eServiceCenter.getInstance().info(ref)
					if info:
						return info.getName(ref).replace(" ", "_")				
				return ref.toString()
			else:
				info = ref and ref.info()
				service = None
			
				if info:
					sRef = service and info.getInfoString(service, iServiceInformation.sServiceRef) or info.getInfoString(iServiceInformation.sServiceref)
					if sRef is None or sRef is "" or self.type == self.NAME:
						return info.getName().replace(" ","_")
					else:
						return sRef
		return ""
コード例 #3
0
	def playService(self, service):
		Notifications.RemovePopup("ZapPipError")
		if service is None:
			return False
		ref = self.resolveAlternatePipService(service)
		if ref:
			if SystemInfo["CanNotDoSimultaneousTranscodeAndPIP"] and StreamServiceList:
				self.pipservice = None
				self.currentService = None
				self.currentServiceReference = None
				if not config.usage.hide_zap_errors.value:
					Notifications.AddPopup(text = "PiP...\n" + _("Connected transcoding, limit - no PiP!"), type = MessageBox.TYPE_ERROR, timeout = 5, id = "ZapPipError")
				return False
			if self.isPlayableForPipService(ref):
				print "playing pip service", ref and ref.toString()
			else:
				if not config.usage.hide_zap_errors.value:
					Notifications.AddPopup(text = "PiP...\n" + _("No free tuner!"), type = MessageBox.TYPE_ERROR, timeout = 5, id = "ZapPipError")
				return False
			self.pipservice = eServiceCenter.getInstance().play(ref)
			if self.pipservice and not self.pipservice.setTarget(1, True):
				if hasattr(self, "dishpipActive") and self.dishpipActive is not None:
					self.dishpipActive.startPiPService(ref)
				self.pipservice.start()
				self.currentService = service
				self.currentServiceReference = ref
				return True
			else:
				self.pipservice = None
				self.currentService = None
				self.currentServiceReference = None
				if not config.usage.hide_zap_errors.value:
					Notifications.AddPopup(text = _("Incorrect type service for PiP!"), type = MessageBox.TYPE_ERROR, timeout = 5, id = "ZapPipError")
		return False
コード例 #4
0
def getBouquetEpg(ref, begintime=-1, endtime=None):
	ref = unquote(ref)
	ret = []
	services = eServiceCenter.getInstance().list(eServiceReference(ref))
	if not services:
		return { "events": ret, "result": False }

	search = ['IBDCTSERN']
	for service in services.getContent('S'):
		if endtime:
			search.append((service, 0, begintime, endtime))
		else:
			search.append((service, 0, begintime))

	epgcache = eEPGCache.getInstance()
	events = epgcache.lookupEvent(search)
	if events is not None:
		for event in events:
			ev = {}
			ev['id'] = event[0]
			ev['begin_timestamp'] = event[1]
			ev['duration_sec'] = event[2]
			ev['title'] = event[4]
			ev['shortdesc'] = convertDesc(event[5])
			ev['longdesc'] = convertDesc(event[6])
			ev['sref'] = event[7]
			ev['sname'] = filterName(event[8])
			ev['now_timestamp'] = event[3]
			ret.append(ev)

	return { "events": ret, "result": True }
コード例 #5
0
def removeMovie(session, sRef, Force=False):
    service = ServiceReference(sRef)
    result = False
    deleted = False
    message = "service error"

    if service is not None:
        serviceHandler = eServiceCenter.getInstance()
        offline = serviceHandler.offlineOperations(service.ref)
        info = serviceHandler.info(service.ref)
        name = info and info.getName(service.ref) or "this recording"

    if offline is not None:
        if Force == True:
            message = "force delete"
        elif hasattr(config.usage, "movielist_trashcan"):
            fullpath = service.ref.getPath()
            srcpath = "/".join(fullpath.split("/")[:-1]) + "/"
            # TODO: check trash
            # TODO: check enable trash default value
            if ".Trash" not in fullpath and config.usage.movielist_trashcan.value:
                result = False
                message = "trashcan"
                try:
                    import Tools.Trashcan

                    trash = Tools.Trashcan.createTrashFolder(srcpath)
                    if trash:
                        res = _moveMovie(session, sRef, destpath=trash)
                        result = res["result"]
                        message = res["message"]
                except ImportError:
                    message = "trashcan exception"
                    pass
                deleted = True
        elif hasattr(config.usage, "movielist_use_trash_dir"):
            fullpath = service.ref.getPath()
            srcpath = "/".join(fullpath.split("/")[:-1]) + "/"
            if TRASHDIRNAME not in fullpath and config.usage.movielist_use_trash_dir.value:
                message = "trashdir"
                try:
                    trash = _getTrashDir(fullpath)
                    if trash:
                        res = _moveMovie(session, sRef, destpath=trash)
                        result = res["result"]
                        message = res["message"]
                except ImportError:
                    message = "trashdir exception"
                    pass
                deleted = True
        if not deleted:
            if not offline.deleteFromDisk(0):
                result = True
    else:
        message = "no offline object"

    if result == False:
        return {"result": False, "message": "Could not delete Movie '%s' / %s" % (name, message)}
    else:
        return {"result": True, "message": "The movie '%s' has been deleted successfully" % name}
コード例 #6
0
ファイル: mvmChNumber.py プロジェクト: HDMU/Skins
	def changed(self, what):
		if not self.suspended:
			service = self.source.service
			info = service and service.info()
			if info is None:
				self.text = " "
				return
			markersOffset = 0
			myRoot = MYCHANSEL.getRoot()
			mySrv = MYCHANSEL.servicelist.getCurrent()
			chx = MYCHANSEL.servicelist.l.lookupService(mySrv)
			if not MYCHANSEL.inBouquet():
				pass
			else:
				serviceHandler = eServiceCenter.getInstance()
				mySSS = serviceHandler.list(myRoot)
				SRVList = mySSS and mySSS.getContent("SN", True)
				for i in range(len(SRVList)):
					if chx == i:
						break
					testlinet = SRVList[i]
					testline = testlinet[0].split(":")
					if testline[1] == "64":
						markersOffset = markersOffset + 1
			chx = (chx - markersOffset) + 1
			rx = MYCHANSEL.getBouquetNumOffset(myRoot)
			self.text = str(chx + rx)
コード例 #7
0
	def __init__(self, directory, showDirectories = True, showFiles = True, showMountpoints = True, matchingPattern = None, useServiceRef = False, inhibitDirs = False, inhibitMounts = False, isTop = False, enableWrapAround = False, additionalExtensions = None):
		MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent)
		self.additional_extensions = additionalExtensions
		self.mountpoints = []
		self.current_directory = None
		self.current_mountpoint = None
		self.useServiceRef = useServiceRef
		self.showDirectories = showDirectories
		self.showMountpoints = showMountpoints
		self.showFiles = showFiles
		if isTop:
			self.topDirectory = directory
		else:
			self.topDirectory = "/"
		# example: matching .nfi and .ts files: "^.*\.(nfi|ts)"
		if matchingPattern:
			self.matchingPattern = re.compile(matchingPattern)
		else:
			self.matchingPattern = None
		self.inhibitDirs = inhibitDirs or []
		self.inhibitMounts = inhibitMounts or []

		self.refreshMountpoints()
		self.changeDir(directory)
		font = skin.fonts.get("FileList", ("Regular", 18, 23))
		self.l.setFont(0, gFont(font[0], font[1]))
		self.l.setItemHeight(font[2])
		self.serviceHandler = eServiceCenter.getInstance()
コード例 #8
0
ファイル: Navigation.py プロジェクト: digidudeofdw/enigma2-1
	def __init__(self, nextRecordTimerAfterEventActionAuto=False):
		if NavigationInstance.instance is not None:
			raise NavigationInstance.instance

		NavigationInstance.instance = self
		self.ServiceHandler = eServiceCenter.getInstance()

		import Navigation as Nav
		Nav.navcore = self

		self.pnav = pNavigation()
		self.pnav.m_event.get().append(self.dispatchEvent)
		self.pnav.m_record_event.get().append(self.dispatchRecordEvent)
		self.event = [ ]
		self.record_event = [ ]
		self.currentlyPlayingServiceReference = None
		self.currentlyPlayingServiceOrGroup = None
		self.currentlyPlayingService = None
		self.RecordTimer = RecordTimer.RecordTimer()
		if getFPWasTimerWakeup():
			if nextRecordTimerAfterEventActionAuto:
				# We need to give the systemclock the chance to sync with the transponder time,
				# before we will make the decision about whether or not we need to shutdown
				# after the upcoming recording has completed
				self.recordshutdowntimer = eTimer()
				self.recordshutdowntimer.callback.append(self.checkShutdownAfterRecording)
				self.recordshutdowntimer.start(30000, True)
		self.SleepTimer = SleepTimer.SleepTimer()
コード例 #9
0
def getNumber(actservice):
	# actservice must be an instance of eServiceReference
	from Screens.InfoBar import InfoBar
	Servicelist = None
	if InfoBar and InfoBar.instance:
		Servicelist = InfoBar.instance.servicelist
	mask = (eServiceReference.isMarker | eServiceReference.isDirectory)
	number = 0
	bouquets = Servicelist and Servicelist.getBouquetList()
	if bouquets:
		#TODO get alternative for actbouquet
		actbouquet = Servicelist.getRoot()
		serviceHandler = eServiceCenter.getInstance()
		for name, bouquet in bouquets:
			if not bouquet.valid(): #check end of list
				break
			if bouquet.flags & eServiceReference.isDirectory:
				servicelist = serviceHandler.list(bouquet)
				if not servicelist is None:
					while True:
						service = servicelist.getNext()
						if not service.valid(): #check end of list
							break
						playable = not (service.flags & mask)
						if playable:
							number += 1
						if actbouquet:
							if actbouquet == bouquet and actservice == service:
								return number
						else:
							if actservice == service:
								return number
	return None
コード例 #10
0
	def __init__(self, session, service=None, event=None):
		Screen.__init__(self, session)
		
		global instance
		instance = self
		
		self.session = session
		self.skinName = [ "SeriesPluginInfoScreen" ]
		
		self["logo"] = Pixmap()
		self["cover"] = Pixmap()
		self["state"] = Pixmap()
		
		self["event_title"] = Label()
		self["event_episode"] = Label()
		self["event_description"] = ScrollLabel()
		self["datetime"] = Label()
		self["channel"] = Label()
		self["duration"] = Label()
		
		self["key_red"] = Button("")				# Rename or Record
		self["key_green"] = Button("")			# Trakt Seen / Not Seen
		self["key_yellow"] = Button("")			# Show all Episodes of current season
		self["key_blue"] = Button("")				# Show all Seasons
		
		self.redButtonFunction = None
		
		#TODO HelpableActionMap
		self["actions"] = ActionMap(["OkCancelActions", "EventViewActions", "DirectionActions", "ColorActions"],
		{
			"cancel":    self.close,
			"ok":        self.close,
			"up":        self["event_description"].pageUp,
			"down":      self["event_description"].pageDown,
			"red":       self.redButton,
			"prevEvent": self.prevEpisode,
			"nextEvent": self.nextEpisode,
			
			#TODO
			#"pageUp":    self.pageUp,
			#"pageDown":  self.pageDown,
			#"openSimilarList": self.openSimilarList
		})
		
		splog("SPI: SeriesPluginInfo", service, event)
		self.service = service
		self.event = event
		
		self.name = ""
		self.short = ""
		self.data = None
		
		self.path = None
		self.eservice = None
		
		self.epg = eEPGCache.getInstance()
		self.serviceHandler = eServiceCenter.getInstance()
		self.seriesPlugin = getInstance()
		
		self.onLayoutFinish.append( self.layoutFinished )
コード例 #11
0
 def __init__(self, enableWrapAround=False):
     MenuList.__init__(self, [], enableWrapAround, eListboxPythonMultiContent)
     self.l.setFont(0, gFont("Regular", 18))
     self.l.setItemHeight(23)
     self.currPlaying = -1
     self.oldCurrPlaying = -1
     self.serviceHandler = eServiceCenter.getInstance()
コード例 #12
0
ファイル: plugin.py プロジェクト: mrnamingo/enigma2-plugins
	def confirmed3(self, arg):
		serviceHandler = eServiceCenter.getInstance()
		info = serviceHandler.info(self.service)
		path = self.path
		self.name = info.getName(self.service)
		descr = info.getInfoString(self.service, iServiceInformation.sDescription)
		self.session.openWithCallback(self.advcutConfirmed, AdvancedCutInput, self.name, path, descr)
コード例 #13
0
ファイル: plugin.py プロジェクト: elshaca/enigma2
	def __init__(self, session, servicelist):
		Screen.__init__(self, session)
		ProtectedScreen.__init__(self)
		self.session = session
		
		self.servicelist = servicelist
		self.serviceHandler = eServiceCenter.getInstance()
		self.allowChanges = True
		
		self["list"] = ZapHistoryBrowserList([])
		self["key_red"] = Label(_("Clear"))
		self["key_green"] = Label(_("Delete"))
		self["key_yellow"] = Label(_("Zap+Close"))
		self["key_blue"] = Label(_("Config"))
		
		self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
			{
				"ok": self.zap,
				"cancel": self.close,
				"red": self.clear,
				"green": self.delete,
				"yellow": self.zapAndClose,
				"blue": self.config
			}, prio=-1)
		
		self.onLayoutFinish.append(self.buildList)
コード例 #14
0
	def getchannelnr(self):
		if InfoBar.instance is None:
			chnr = "---"
			return chnr
		MYCHANSEL = InfoBar.instance.servicelist
		markersOffset = 0
		myRoot = MYCHANSEL.getRoot()
		mySrv = MYCHANSEL.servicelist.getCurrent()
		chx = MYCHANSEL.servicelist.l.lookupService(mySrv)
		if not MYCHANSEL.inBouquet():
			pass
		else:
			serviceHandler = eServiceCenter.getInstance()
			mySSS = serviceHandler.list(myRoot)
			SRVList = mySSS and mySSS.getContent("SN", True)
			for i in range(len(SRVList)):
				if chx == i:
					break
				testlinet = SRVList[i]
				testline = testlinet[0].split(":")
				if testline[1] == "64":
					markersOffset = markersOffset + 1
		chx = (chx - markersOffset) + 1
		rx = MYCHANSEL.getBouquetNumOffset(myRoot)
		chnr = str(chx + rx)
		return chnr
コード例 #15
0
	def getAlternative(self, override_service):
		services = self.services
		if services:
			override = ':'.join(override_service.split(':')[3:])
			serviceHandler = eServiceCenter.getInstance()

			for service in services:
				myref = eServiceReference(str(service))
				if myref.flags & eServiceReference.isGroup:
					mylist = serviceHandler.list(myref)
					if mylist is not None:
						while 1:
							s = mylist.getNext()
							if s.valid():
								# strip all after last :
								value = s.toString()
								pos = value.rfind(':')
								if pos != -1:
									if value[pos-1] == ':':
										pos -= 1
									value = value[:pos+1]

								if ':'.join(value.split(':')[3:]) == override:
									return service
							else:
								break
		return override_service
コード例 #16
0
	def __init__(self):
		logDebug("Main: Init")
		self.thread = SeriesPluginWorker(self.gotResult)
		Modules.__init__(self)
		ChannelsBase.__init__(self)
		
		# Because of the same XMLFile base class we intantiate a new object
		self.xmltv = XMLTVBase()
		
		self.serviceHandler = eServiceCenter.getInstance()
		
		#http://bugs.python.org/issue7980
		datetime.strptime('2012-01-01', '%Y-%m-%d')
		
		self.identifier_elapsed = self.instantiateModuleWithName( config.plugins.seriesplugin.identifier_elapsed.value )
		#logDebug(self.identifier_elapsed)
		
		self.identifier_today = self.instantiateModuleWithName( config.plugins.seriesplugin.identifier_today.value )
		#logDebug(self.identifier_today)
		
		self.identifier_future = self.instantiateModuleWithName( config.plugins.seriesplugin.identifier_future.value )
		#logDebug(self.identifier_future)
		
		pattern = config.plugins.seriesplugin.pattern_title.value
		pattern = pattern.replace("{org:s}", "(.+)")
		pattern = re.sub('{season:?\d*d?}', '\d+', pattern)
		pattern = re.sub('{episode:?\d*d?}', '\d+', pattern)
		pattern = re.sub('{rawseason:s}', '.+', pattern)
		pattern = re.sub('{rawseason:s}', '.+', pattern)
		pattern = pattern.replace("{title:s}", ".+")
		self.compiledRegexpSeries = re.compile(pattern)
コード例 #17
0
ファイル: plugin.py プロジェクト: OpenVuPlus/dvbapp-plugin
	def __init__(self, session, service):
		self.session = session
		self.service = service
		self.serviceHandler = eServiceCenter.getInstance()
		self.info = self.serviceHandler.info(self.service)

		self.skin = MovieTagger.skin
		Screen.__init__(self, session)
		self["moviename"] = Label(self.info.getName(self.service))
		self["buttonred"] = Label(_("red"))
		self["buttongreen"] = Label(_("green"))
		self["buttonyellow"] = Label(_("yellow"))
		self["buttonblue"] = Label(_("blue"))
		self["cTaglist"] = MenuList([])
		self["aTaglist"] = TagMenuList([])
		self["actions"] = ActionMap(["WizardActions","MenuActions","ShortcutActions"],
            {
             "back": 	self.close,
             "red": 	self.keyRed,
             "green": 	self.keyGreen,
             "yellow": 	self.keyYellow,
             "blue": 	self.keyBlue,
             "up": 		self.up,
             "down": 	self.down,
             "left": 	self.left,
             "right": 	self.right,
             }, -1)
		self.loadPreTags()
		self.updateCurrentTagList()
		self.updateAllTagList()
		self.currList =self["aTaglist"]
		self.onLayoutFinish.append(self.keyBlue)
コード例 #18
0
ファイル: plugin.py プロジェクト: OpenVuPlus/dvbapp-plugin
	def updateCurrentTagList(self):
		print "updating cTagList"
		self.serviceHandler = eServiceCenter.getInstance()
		self.info = self.serviceHandler.info(self.service)
		self.tags = self.info.getInfoString(self.service, iServiceInformation.sTags).split(' ')
		self.tags.sort()
		self["cTaglist"].l.setList(self.tags)
コード例 #19
0
ファイル: ParentalControl.py プロジェクト: Adga52/enigma2
	def isServicePlayable(self, ref, callback, session=None):
		self.session = session
		if not config.ParentalControl.servicepinactive.value:
			return True
		#Check if configuration has already been read or if the significant values have changed.
		#If true: read the configuration
		if self.storeServicePin != config.ParentalControl.storeservicepin.value:
			self.getConfigValues()
		service = ref.toCompareString()
		info = eServiceCenter.getInstance().info(ref)
		age = 0
		if service.startswith("1:") and service.rsplit(":", 1)[1].startswith("/"):
			refstr = info and info.getInfoString(ref, iServiceInformation.sServiceref)
			service = refstr and eServiceReference(refstr).toCompareString()
		elif int(config.ParentalControl.age.value):
			event = info and info.getEvent(ref)
			rating = event and event.getParentalData()
			age = rating and rating.getRating()
			age = age and age <= 15 and age + 3 or 0
		if (age and age >= int(config.ParentalControl.age.value)) or service and self.blacklist.has_key(service):
			#Check if the session pin is cached
			if self.sessionPinCached:
				return True
			self.callback = callback
			title = 'FROM BOUQUET "userbouquet.' in service and _("this bouquet is protected by a parental control pin") or _("this service is protected by a parental control pin")
			if session:
				Notifications.RemovePopup("Parental control")
				if self.PinDlg:
					self.PinDlg.close()
				self.PinDlg = session.openWithCallback(boundFunction(self.servicePinEntered, ref), PinInput, triesEntry=config.ParentalControl.retries.servicepin, pinList=self.getPinList(), service=ServiceReference(ref).getServiceName(), title=title, windowTitle=_("Parental control"), simple=False)
			else:
				Notifications.AddNotificationParentalControl(boundFunction(self.servicePinEntered, ref), PinInput, triesEntry=config.ParentalControl.retries.servicepin, pinList=self.getPinList(), service=ServiceReference(ref).getServiceName(), title=title, windowTitle=_("Parental control"))
			return False
		else:
			return True
コード例 #20
0
def Partnerbox_EPGSelection__init__(self, session, service, zapFunc=None, eventid=None, bouquetChangeCB=None, serviceChangeCB=None):
	#check if alternatives are defined
	if isinstance(service, eServiceReference):
		if service.flags & (eServiceReference.isGroup):
			service = eServiceCenter.getInstance().list(eServiceReference("%s" %(service.toString()))).getContent("S")[0]
	baseEPGSelection__init__(self, session, service, zapFunc, eventid, bouquetChangeCB, serviceChangeCB)
	self.PartnerboxInit(True)
コード例 #21
0
	def getServiceList(bouquet, stime=-1, sRefOnly = False):
		services = [ ]
		servicelist = eServiceCenter.getInstance().list(bouquet)
		if not servicelist is None:
			while True:
				service = servicelist.getNext()
				if not service.valid(): # check if end of list
					break
				if service.flags & (eServiceReference.isDirectory | eServiceReference.isMarker): # ignore non playable services
					continue
				# alternative service?
				if service.flags & (eServiceReference.isGroup):
					altRoot = eServiceReference(service.toCompareString())
					altList = EpgCenterList.eServiceCenterInstance.list(altRoot)
					if altList:
						while True:
							nextService = altList.getNext()
							if not nextService.valid():
								break
							service = nextService
							break
							
				if sRefOnly:
					services.append(service.toCompareString())
				else:
					services.append((service.toCompareString(), 0, stime))
		return services
コード例 #22
0
	def getAllServices():
		allServices = {}
		index = 1
		EpgCenterList.lenChannelDigits = 0
		totalServices = 0 # the number of services in all bouquets
		for bouquetEntry in EpgCenterList.bouquetList:
			servicelist = eServiceCenter.getInstance().list(bouquetEntry[1])
			if not servicelist is None:
				numServices = 0
				while True:
					service = servicelist.getNext()
					if not service.valid(): # check if end of list
						break
					if service.flags & (eServiceReference.isDirectory | eServiceReference.isMarker): # ignore non playable services
						continue
					info = EpgCenterList.eServiceCenterInstance.info(service)
					serviceName = info.getName(service) or ServiceReference(service).getServiceName() or ""
					allServices[service.toCompareString()] = serviceName
					numServices += 1
				indexEntry = index
				index += numServices
				totalServices += numServices
				EpgCenterList.bouquetIndexRanges.append(indexEntry)
		EpgCenterList.lenChannelDigits = len(str(totalServices))
		return allServices
コード例 #23
0
ファイル: plugin.py プロジェクト: Haehnchen/enigma2-plugins
	def __evUpdatedInfo(self):
		if self.newService and config.plugins.threed.autothreed.value != "0" and self.session.nav.getCurrentlyPlayingServiceReference():
			self.newService = False
			ref = self.session.nav.getCurrentService() 
			serviceRef = self.session.nav.getCurrentlyPlayingServiceReference()
			spath = serviceRef.getPath()
			if spath:
				if spath[0] == '/':
					serviceHandler = eServiceCenter.getInstance()
					r = eServiceReference(ref.info().getInfoString(iServiceInformation.sServiceref))
					info = serviceHandler.info(r)
					if info:
						name = ServiceReference(info.getInfoString(r, iServiceInformation.sServiceref)).getServiceName().replace('\xc2\x86', '').replace('\xc2\x87', '')
					else:
						name = os_basename(spath) # filename
				else:
					name = serviceRef.getName() # partnerbox servicename
			else:
				name =  ServiceReference(ref.info().getInfoString(iServiceInformation.sServiceref)).getServiceName().replace('\xc2\x86', '').replace('\xc2\x87', '')
			if "3d" in name.lower():
				if config.plugins.threed.autothreed.value == "1":
					mode = THREE_D_SIDE_BY_SIDE
				else:
					mode = THREE_D_TOP_BOTTOM
			else:
				mode = THREE_D_OFF
			if self.lastmode != mode:
				switchmode(mode)
	def __init__(self, directory, showDirectories = True, showFiles = True, showMountpoints = True, matchingPattern = None, useServiceRef = False, inhibitDirs = False, inhibitMounts = False, isTop = False, enableWrapAround = True, additionalExtensions = None):
		MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent)
		self.additional_extensions = additionalExtensions
		self.mountpoints = []
		self.current_directory = None
		self.current_mountpoint = None
		self.useServiceRef = useServiceRef
		self.showDirectories = showDirectories
		self.showMountpoints = showMountpoints
		self.showFiles = showFiles
		self.isTop = isTop
		self.matchingPattern = matchingPattern
		self.inhibitDirs = inhibitDirs or []
		self.inhibitMounts = inhibitMounts or []
		self.refreshMountpoints()
		direct = directory
		if directory.endswith("/"):
			se = directory
		else:
			se = os_path.basename(directory)
			direct = directory+"/"
#		print "direct,se",direct,se
		self.changeDir(direct,se)
		self.l.setFont(0, gFont("Regular", 18))
		self.l.setItemHeight(26)
		self.serviceHandler = eServiceCenter.getInstance()
コード例 #25
0
ファイル: AutoTimer.py プロジェクト: Dog6574/enigma2-plugins
	def parseEPG(self, simulateOnly=False, uniqueId=None, callback=None):

		from plugin import AUTOTIMER_VERSION
		doLog("AutoTimer Version: " + AUTOTIMER_VERSION)

		if NavigationInstance.instance is None:
			doLog("Navigation is not available, can't parse EPG")
			return (0, 0, 0, [], [], [])

		new = 0
		modified = 0
		timers = []
		conflicting = []
		similars = []
		skipped = []

		if currentThread().getName() == 'MainThread':
			doBlockingCallFromMainThread = lambda f, *a, **kw: f(*a, **kw)
		else:
			doBlockingCallFromMainThread = blockingCallFromMainThread

		# NOTE: the config option specifies "the next X days" which means today (== 1) + X
		delta = timedelta(days = config.plugins.autotimer.maxdaysinfuture.value + 1)
		evtLimit = mktime((date.today() + delta).timetuple())
		checkEvtLimit = delta.days > 1
		del delta

		# Read AutoTimer configuration
		self.readXml()

		# Get E2 instances
		epgcache = eEPGCache.getInstance()
		serviceHandler = eServiceCenter.getInstance()
		recordHandler = NavigationInstance.instance.RecordTimer

		# Save Timer in a dict to speed things up a little
		# We include processed timers as we might search for duplicate descriptions
		# NOTE: It is also possible to use RecordTimer isInTimer(), but we won't get the timer itself on a match
		timerdict = defaultdict(list)
		doBlockingCallFromMainThread(self.populateTimerdict, epgcache, recordHandler, timerdict)

		# Create dict of all movies in all folders used by an autotimer to compare with recordings
		# The moviedict will be filled only if one AutoTimer is configured to avoid duplicate description for any recordings
		moviedict = defaultdict(list)

		# Iterate Timer
		for timer in self.getEnabledTimerList():
			if uniqueId == None or timer.id == uniqueId:
				tup = doBlockingCallFromMainThread(self.parseTimer, timer, epgcache, serviceHandler, recordHandler, checkEvtLimit, evtLimit, timers, conflicting, similars, skipped, timerdict, moviedict, simulateOnly=simulateOnly)
				if callback:
					callback(timers, conflicting, similars, skipped)
					del timers[:]
					del conflicting[:]
					del similars[:]
					del skipped[:]
				else:
					new += tup[0]
					modified += tup[1]

		return (len(timers), new, modified, timers, conflicting, similars)
コード例 #26
0
ファイル: EPG.py プロジェクト: FFTEAM/evolux-spark-sh4
	def getEPGofBouquet(self, param):
		print "[WebComponents.EPG] getting EPG for Bouquet", param

		if 'bRef' not in param:
			return ()
		
		time = -1
		
		if "time" in param:
			if not param["time"] is None:
				time = int(float(param["time"]))
				if time < 0:
					time = -1

		bRef = param['bRef']

		serviceHandler = eServiceCenter.getInstance()
		sl = serviceHandler.list(eServiceReference(bRef))
		services = sl and sl.getContent('S')

		search = ['IBDCTSERN']
		
		search.extend([(service, 0, time) for service in services])
		events = self.epgcache.lookupEvent(search)

		if events:
			return events
		return ()
コード例 #27
0
	def __init__(self, nextRecordTimerAfterEventActionAuto=False):
		if NavigationInstance.instance is not None:
			raise NavigationInstance.instance
		
		NavigationInstance.instance = self
		self.ServiceHandler = eServiceCenter.getInstance()
		
		import Navigation as Nav
		Nav.navcore = self
		
		self.pnav = pNavigation()
		self.pnav.m_event.get().append(self.dispatchEvent)
		self.pnav.m_record_event.get().append(self.dispatchRecordEvent)
		self.event = [ ]
		self.record_event = [ ]
		self.currentlyPlayingServiceReference = None
		self.currentlyPlayingService = None
		self.RecordTimer = RecordTimer.RecordTimer()
		if getFPWasTimerWakeup():
			clearFPWasTimerWakeup()
			if getFPWasTimerWakeup(): # sanity check to detect if the FP driver is working correct!
				print "buggy fp driver detected!!! please update drivers.... ignore timer wakeup!"
			elif nextRecordTimerAfterEventActionAuto and (len(self.getRecordings()) or abs(self.RecordTimer.getNextRecordingTime() - time()) <= 360):
				if not Screens.Standby.inTryQuitMainloop: # not a shutdown messagebox is open
					RecordTimer.RecordTimerEntry.TryQuitMainloop(False) # start shutdown handling
		self.SleepTimer = SleepTimer.SleepTimer()
コード例 #28
0
ファイル: plugin.py プロジェクト: OpenPE/openpliPC
    def deleteFile(self):
        if self.currList == "filelist":
            self.service = self.filelist.getServiceRef()
        else:
            self.service = self.playlist.getSelection()
        if self.service is None:
            return
        if self.service.type != 4098 and self.session.nav.getCurrentlyPlayingServiceReference() is not None:
            if self.service == self.session.nav.getCurrentlyPlayingServiceReference():
                self.stopEntry()

        serviceHandler = eServiceCenter.getInstance()
        offline = serviceHandler.offlineOperations(self.service)
        info = serviceHandler.info(self.service)
        name = info and info.getName(self.service)
        result = False
        if offline is not None:
            # simulate first
            if not offline.deleteFromDisk(1):
                result = True
        if result == True:
            self.session.openWithCallback(
                self.deleteConfirmed_offline, MessageBox, _("Do you really want to delete %s?") % (name)
            )
        else:
            self.session.openWithCallback(self.close, MessageBox, _("You cannot delete this!"), MessageBox.TYPE_ERROR)
コード例 #29
0
    def getProviderName(self, ref):
        if isinstance(ref, eServiceReference):
            from Screens.ChannelSelection import service_types_radio, service_types_tv

            typestr = ref.getData(0) in (2, 10) and service_types_radio or service_types_tv
            pos = typestr.rfind(":")
            rootstr = "%s (channelID == %08x%04x%04x) && %s FROM PROVIDERS ORDER BY name" % (
                typestr[: pos + 1],
                ref.getUnsignedData(4),
                ref.getUnsignedData(2),
                ref.getUnsignedData(3),
                typestr[pos + 1 :],
            )
            provider_root = eServiceReference(rootstr)
            serviceHandler = eServiceCenter.getInstance()
            providerlist = serviceHandler.list(provider_root)
            if providerlist is not None:
                while True:
                    provider = providerlist.getNext()
                    if not provider.valid():
                        break
                    if provider.flags & eServiceReference.isDirectory:
                        servicelist = serviceHandler.list(provider)
                        if servicelist is not None:
                            while True:
                                service = servicelist.getNext()
                                if not service.valid():
                                    break
                                if service == ref:
                                    info = serviceHandler.info(provider)
                                    return info and info.getName(provider) or "Unknown"

        return ""
コード例 #30
0
ファイル: Navigation.py プロジェクト: 0sc0d3r/enigma2-1
	def __init__(self):
		if NavigationInstance.instance is not None:
			raise NavigationInstance.instance

		NavigationInstance.instance = self
		self.ServiceHandler = eServiceCenter.getInstance()

		import Navigation as Nav
		Nav.navcore = self

		self.pnav = pNavigation()
		self.pnav.m_event.get().append(self.dispatchEvent)
		self.pnav.m_record_event.get().append(self.dispatchRecordEvent)
		self.event = [ ]
		self.record_event = [ ]
		self.currentlyPlayingServiceReference = None
		self.currentlyPlayingServiceOrGroup = None
		self.currentlyPlayingService = None
		self.RecordTimer = RecordTimer.RecordTimer()
		self.__wasTimerWakeup = getFPWasTimerWakeup()
		startup_to_standby = config.usage.startup_to_standby.value
		wakeup_time_type = config.misc.prev_wakeup_time_type.value
		if self.__wasTimerWakeup:
			RecordTimer.RecordTimerEntry.setWasInDeepStandby()
		if config.misc.RestartUI.value:
			config.misc.RestartUI.value = False
			config.misc.RestartUI.save()
			configfile.save()
		elif startup_to_standby == "yes" or self.__wasTimerWakeup and config.misc.prev_wakeup_time.value and ((wakeup_time_type == 0 or wakeup_time_type == 1) or ( wakeup_time_type == 3 and startup_to_standby == "except")):
			if not Screens.Standby.inTryQuitMainloop:
				Notifications.AddNotification(Screens.Standby.Standby)
		if config.misc.prev_wakeup_time.value:
			config.misc.prev_wakeup_time.value = 0
			config.misc.prev_wakeup_time.save()
			configfile.save()
コード例 #31
0
def getInfo(session=None, need_fullinfo=False):
    global STATICBOXINFO

    if not (STATICBOXINFO is None or need_fullinfo):
        return STATICBOXINFO

    info = {
        'brand': getMachineBrand(),
        'model': getMachineName(),
        'boxtype': getBoxType(),
        'machinebuild': getMachineBuild(),
        'tag_data': TAG_DATA,
    }

    chipset = "unknown"
    if os.path.isfile("/etc/.box"):
        f = open("/etc/.box", 'r')
        model = f.readline().strip().lower()
        f.close()
        if model.startswith("ufs") or model.startswith("ufc"):
            if model in ("ufs910", "ufs922", "ufc960"):
                chipset = "SH4 @266MHz"
            else:
                chipset = "SH4 @450MHz"
        elif model in ("topf", "tf7700hdpvr"):
            chipset = "SH4 @266MHz"
        elif model.startswith("azbox"):
            f = open("/proc/stb/info/model", 'r')
            model = f.readline().strip().lower()
            f.close()
            if model == "me":
                chipset = "SIGMA 8655"
            elif model == "minime":
                chipset = "SIGMA 8653"
            else:
                chipset = "SIGMA 8634"
        elif model.startswith("spark"):
            if model == "spark7162":
                chipset = "SH4 @540MHz"
            else:
                chipset = "SH4 @450MHz"
    elif os.path.isfile("/proc/stb/info/azmodel"):
        f = open("/proc/stb/info/model", 'r')
        model = f.readline().strip().lower()
        f.close()
        if model == "me":
            chipset = "SIGMA 8655"
        elif model == "minime":
            chipset = "SIGMA 8653"
        else:
            chipset = "SIGMA 8634"
    elif os.path.isfile("/proc/stb/info/model"):
        f = open("/proc/stb/info/model", 'r')
        model = f.readline().strip().lower()
        f.close()
        if model == "tf7700hdpvr":
            chipset = "SH4 @266MHz"
        elif model == "nbox":
            chipset = "STi7100 @266MHz"
        elif model == "arivalink200":
            chipset = "STi7109 @266MHz"
        elif model in ("adb2850", "adb2849", "dsi87"):
            chipset = "STi7111 @450MHz"
        elif model in ("sagemcom88", "esi88"):
            chipset = "STi7105 @450MHz"
        elif model.startswith("spark"):
            if model == "spark7162":
                chipset = "STi7162 @540MHz"
            else:
                chipset = "STi7111 @450MHz"

    if os.path.isfile("/proc/stb/info/chipset"):
        f = open("/proc/stb/info/chipset", 'r')
        chipset = f.readline().strip()
        f.close()

    info['chipset'] = chipset

    memFree = 0
    for line in open("/proc/meminfo", 'r'):
        parts = line.split(':')
        key = parts[0].strip()
        if key == "MemTotal":
            info['mem1'] = parts[1].strip().replace("kB", _("kB"))
        elif key in ("MemFree", "Buffers", "Cached"):
            memFree += int(parts[1].strip().split(' ', 1)[0])
    info['mem2'] = "%s %s" % (memFree, _("kB"))
    info['mem3'] = _("%s free / %s total") % (info['mem2'], info['mem1'])

    try:
        f = open("/proc/uptime", "rb")
        uptime = int(float(f.readline().split(' ', 2)[0].strip()))
        f.close()
        uptimetext = ''
        if uptime > 86400:
            d = uptime / 86400
            uptime = uptime % 86400
            uptimetext += '%dd ' % d
        uptimetext += "%d:%.2d" % (uptime / 3600, (uptime % 3600) / 60)
    except BaseException:
        uptimetext = "?"
    info['uptime'] = uptimetext

    info["webifver"] = TAG_DATA['owif_version']
    info['imagedistro'] = getImageDistro()
    info['friendlyimagedistro'] = getFriendlyImageDistro()
    info['oever'] = getOEVersion()
    info['imagever'] = getImageVersion()
    ib = getImageBuild()
    if ib:
        info['imagever'] = info['imagever'] + "." + ib
    info['enigmaver'] = getEnigmaVersionString()
    info['driverdate'] = getDriverDate()
    info['kernelver'] = about.getKernelVersionString()

    try:
        info['fp_version'] = getFPVersion()
    except BaseException:
        info['fp_version'] = None

    friendlychipsetdescription = _("Chipset")
    friendlychipsettext = info['chipset'].replace("bcm", "Broadcom ")
    if friendlychipsettext in ("7335", "7356", "7362", "73625", "7424", "7425",
                               "7429"):
        friendlychipsettext = "Broadcom " + friendlychipsettext

    if not (info['fp_version'] is None or info['fp_version'] == 0):
        friendlychipsetdescription += " (" + _("Frontprocessor Version") + ")"
        friendlychipsettext += " (" + str(info['fp_version']) + ")"

    info['friendlychipsetdescription'] = friendlychipsetdescription
    info['friendlychipsettext'] = friendlychipsettext

    info['tuners'] = []
    for i in range(0, nimmanager.getSlotCount()):
        ILOG.debug("tuner {!r} {!r} {!r}".format(
            i, nimmanager.getNimName(i),
            nimmanager.getNim(i).getSlotName()))
        info['tuners'].append({
            "name":
            nimmanager.getNim(i).getSlotName(),
            "type":
            nimmanager.getNimName(i) + " (" +
            nimmanager.getNim(i).getFriendlyType() + ")",
            "rec":
            "",
            "live":
            ""
        })

    info['ifaces'] = []
    ifaces = iNetwork.getConfiguredAdapters()
    for iface in ifaces:
        info['ifaces'].append({
            "name":
            iNetwork.getAdapterName(iface),
            "friendlynic":
            getFriendlyNICChipSet(iface),
            "linkspeed":
            getLinkSpeed(iface),
            "mac":
            iNetwork.getAdapterAttribute(iface, "mac"),
            "dhcp":
            iNetwork.getAdapterAttribute(iface, "dhcp"),
            "ipv4method":
            getIPv4Method(iface),
            "ip":
            formatIp(iNetwork.getAdapterAttribute(iface, "ip")),
            "mask":
            formatIp(iNetwork.getAdapterAttribute(iface, "netmask")),
            "v4prefix":
            sum([
                bin(int(x)).count('1') for x in formatIp(
                    iNetwork.getAdapterAttribute(iface, "netmask")).split('.')
            ]),
            "gw":
            formatIp(iNetwork.getAdapterAttribute(iface, "gateway")),
            "ipv6":
            getAdapterIPv6(iface)['addr'],
            "ipmethod":
            getIPMethod(iface),
            "firstpublic":
            getAdapterIPv6(iface)['firstpublic']
        })

    info['hdd'] = []
    for hdd in harddiskmanager.hdd:
        dev = hdd.findMount()
        if dev:
            stat = os.statvfs(dev)
            free = int((stat.f_bfree / 1024) * (stat.f_bsize / 1024))
        else:
            stat = (-1, -1, -1, -1, -1, -1, -1, -1, -1, -1)
            free = -1

        if free <= 1024:
            free = "%i %s" % (free, _("MB"))
        else:
            free = free / 1024.
            free = "%.1f %s" % (free, _("GB"))

        size = hdd.diskSize() * 1000000 / 1048576.
        if size > 1048576:
            size = "%.1f %s" % ((size / 1048576.), _("TB"))
        elif size > 1024:
            size = "%.1f %s" % ((size / 1024.), _("GB"))
        else:
            size = "%d %s" % (size, _("MB"))

        iecsize = hdd.diskSize()
        # Harddisks > 1000 decimal Gigabytes are labelled in TB
        if iecsize > 1000000:
            iecsize = (iecsize + 50000) // float(100000) / 10
            # Omit decimal fraction if it is 0
            if (iecsize % 1 > 0):
                iecsize = "%.1f %s" % (iecsize, _("TB"))
            else:
                iecsize = "%d %s" % (iecsize, _("TB"))
        # Round harddisk sizes beyond ~300GB to full tens: 320, 500, 640, 750GB
        elif iecsize > 300000:
            iecsize = "%d %s" % (((iecsize + 5000) // 10000 * 10), _("GB"))
        # ... be more precise for media < ~300GB (Sticks, SSDs, CF, MMC, ...):
        # 1, 2, 4, 8, 16 ... 256GB
        elif iecsize > 1000:
            iecsize = "%d %s" % (((iecsize + 500) // 1000), _("GB"))
        else:
            iecsize = "%d %s" % (iecsize, _("MB"))

        info['hdd'].append({
            "model":
            hdd.model(),
            "capacity":
            size,
            "labelled_capacity":
            iecsize,
            "free":
            free,
            "mount":
            dev,
            "friendlycapacity":
            _("%s free / %s total") % (free, size + ' ("' + iecsize + '")'),
            "_statvfs_result":
            tuple(stat),
        })

    info['shares'] = []
    autofiles = ('/etc/auto.network', '/etc/auto.network_vti')
    for autofs in autofiles:
        if os.path.isfile(autofs):
            method = "autofs"
            for line in file(autofs).readlines():
                if not line.startswith('#'):
                    # Replace escaped spaces that can appear inside
                    # credentials with underscores
                    # Not elegant but we wouldn't want to expose credentials
                    # on the OWIF anyways
                    tmpline = line.replace("\ ", "_")
                    tmp = tmpline.split()
                    if not len(tmp) == 3:
                        continue
                    name = tmp[0].strip()
                    kind = "unknown"
                    if "cifs" in tmp[1]:
                        # Linux still defaults to SMBv1
                        kind = "SMBv1.0"
                        settings = tmp[1].split(",")
                        for setting in settings:
                            if setting.startswith("vers="):
                                kind = setting.replace("vers=", "SMBv")
                    elif "nfs" in tmp[1]:
                        kind = "NFS"

                    # Default is r/w
                    mode = _("r/w")
                    settings = tmp[1].split(",")
                    for setting in settings:
                        if setting == "ro":
                            mode = _("r/o")

                    uri = tmp[2]
                    parts = tmp[2].split(':')
                    if parts[0] is "":
                        server = uri.split('/')[2]
                        uri = uri.strip()[1:]
                    else:
                        server = parts[0]

                    ipaddress = None
                    if server:
                        # Will fail on literal IPs
                        try:
                            # Try IPv6 first, as will Linux
                            if has_ipv6:
                                tmpaddress = None
                                tmpaddress = getaddrinfo(server, 0, AF_INET6)
                                if tmpaddress:
                                    ipaddress = "[" + \
                                                list(tmpaddress)[0][4][0] + "]"
                            # Use IPv4 if IPv6 fails or is not present
                            if ipaddress is None:
                                tmpaddress = None
                                tmpaddress = getaddrinfo(server, 0, AF_INET)
                                if tmpaddress:
                                    ipaddress = list(tmpaddress)[0][4][0]
                        except BaseException:
                            pass

                    friendlyaddress = server
                    if ipaddress is not None and not ipaddress == server:
                        friendlyaddress = server + " (" + ipaddress + ")"
                    info['shares'].append({
                        "name": name,
                        "method": method,
                        "type": kind,
                        "mode": mode,
                        "path": uri,
                        "host": server,
                        "ipaddress": ipaddress,
                        "friendlyaddress": friendlyaddress
                    })
    # TODO: fstab

    info['transcoding'] = False
    #: models transcoding feature
    TC_MODELS = ("Uno4K", "Ultimo4K", "Solo4K", "Solo²", "Duo²", "Solo SE",
                 "Quad", "Quad Plus")

    #: machinebuilds transcoding feature
    TC_MACHINEBUILD = ('inihdp', 'hd2400', 'et10000', 'et13000', 'sf5008',
                       'xpeedlx3', 'ew7356', 'dags7356', 'dags7252',
                       'formuler1tc', 'gb7356', 'gb7252', 'tiviaraplus',
                       '8100s')

    if info['model'] in TC_MODELS or info['machinebuild'] in TC_MACHINEBUILD:
        prefixes = (
            'enigma2/python/Plugins/SystemPlugins/TransCodingSetup',
            'enigma2/python/Plugins/SystemPlugins/TranscodingSetup',
            'enigma2/python/Plugins/SystemPlugins/MultiTransCodingSetup')
        for pfx in prefixes:
            path = '/'.join(('${libdir}', pfx, 'plugin.pyo'))
            if os.path.exists(eEnv.resolve(path)):
                info['transcoding'] = True
                break

    info['kinopoisk'] = False
    lang = ['ru', 'uk', 'lv', 'lt', 'et']
    current_language = language.getLanguage()
    for l in lang:
        if l in current_language:
            info['kinopoisk'] = True
            break

    info['EX'] = ''

    if session:
        try:
            recs = NavigationInstance.instance.getRecordings()
            if recs:
                # only one stream and only TV
                from ..stream import streamList
                s_name = ''

                ILOG.debug("streamList count {!r}".format(len(streamList)))
                if len(streamList) == 1:
                    from Screens.ChannelSelection import service_types_tv
                    service_handler = eServiceCenter.getInstance()
                    services = service_handler.list(
                        eServiceReference('%s ORDER BY name' %
                                          service_types_tv))
                    channels = services and services.getContent("SN", True)
                    s = streamList[0]
                    srefs = s.ref.toString()
                    for channel in channels:
                        if srefs == channel[0]:
                            s_name = channel[1] + ' (' + s.clientIP + ')'
                            break
                ILOG.debug("s_name {!r}".format(s_name))

                for stream in streamList:
                    srefs = stream.ref.toString()
                    ILOG.debug("srefs {!r}".format(srefs))

                sname = ''
                timers = []
                r_timers = NavigationInstance.instance.RecordTimer.timer_list
                for timer in r_timers:
                    if timer.isRunning() and not timer.justplay:
                        sname = timer.service_ref.getServiceName()
                        timers.append(
                            mangle_epg_text(
                                timer.service_ref.getServiceName()))
                        ILOG.debug("timer {!r}".format(s_name))
                # only one recording
                if len(timers) == 1:
                    sname = timers[0]

                if sname == '' and s_name != '':
                    sname = s_name

                ILOG.debug("recs count {!r}".format(len(recs)))

                for rec in recs:
                    feinfo = rec.frontendInfo()
                    frontend_data = feinfo and feinfo.getAll(True)
                    if frontend_data is not None:
                        cur_info = feinfo.getTransponderData(True)
                        if cur_info:
                            tno = info['tuners'][frontend_data['tuner_number']]
                            label = getOrbitalText(cur_info) + ' / ' + sname
                            tno['rec'] = mangle_epg_text(label)

            service = session.nav.getCurrentService()
            if service is not None:
                s_reference = session.nav.getCurrentlyPlayingServiceReference()
                service_information = service.info()
                sname = service_information.getName()
                feinfo = service.frontendInfo()
                frontend_data = feinfo and feinfo.getAll(True)

                if frontend_data is not None:
                    cur_info = feinfo.getTransponderData(True)
                    if cur_info:
                        tno = info['tuners'][frontend_data['tuner_number']]
                        label = getOrbitalText(cur_info) + ' / ' + sname
                        tno['live'] = mangle_epg_text(label)
                        tno['live_meta'] = {
                            'service_name': mangle_epg_text(sname),
                            KEY_SERVICE_REFERENCE: s_reference.toString()
                        }

        except Exception as error:
            info['EX'] = error

    STATICBOXINFO = info
    return info
コード例 #32
0
ファイル: movies.py プロジェクト: jenseneverest/OpenWebif
def _moveMovie(session, sRef, destpath=None, newname=None):
    service = ServiceReference(sRef)
    result = True
    errText = 'unknown Error'

    if destpath is not None and not destpath[-1] == '/':
        destpath = destpath + '/'

    if service is not None:
        serviceHandler = eServiceCenter.getInstance()
        info = serviceHandler.info(service.ref)
        name = info and info.getName(service.ref) or "this recording"
        fullpath = service.ref.getPath()
        srcpath = '/'.join(fullpath.split('/')[:-1]) + '/'
        fullfilename = fullpath.split('/')[-1]
        fileName, fileExt = os.path.splitext(fullfilename)
        if newname is not None:
            newfullpath = srcpath + newname + fileExt

        # TODO: check splitted recording
        # TODO: use FileTransferJob
        def domove():
            exists = os.path.exists
            move = os.rename
            errorlist = []
            if fileExt == '.ts':
                suffixes = ".ts.meta", ".ts.cuts", ".ts.ap", ".ts.sc", ".eit", ".ts", ".jpg", ".ts_mp.jpg"
            else:
                suffixes = "%s.ts.meta" % fileExt, "%s.cuts" % fileExt, fileExt, '.jpg', '.eit'

            for suffix in suffixes:
                src = srcpath + fileName + suffix
                if exists(src):
                    try:
                        if newname is not None:
                            # rename title in meta file
                            if suffix == '.ts.meta':
                                # todo error handling
                                lines = []
                                with open(src, "r") as fin:
                                    for line in fin:
                                        lines.append(line)
                                lines[1] = newname + '\n'
                                lines[4] = '\n'
                                with open(srcpath + newname + suffix,
                                          'w') as fout:
                                    fout.write(''.join(lines))
                                os.remove(src)
                            else:
                                move(src, srcpath + newname + suffix)
                        else:
                            move(src, destpath + fileName + suffix)
                    except IOError as e:
                        errorlist.append("I/O error({0})".format(e))
                        break
                    except OSError as ose:
                        errorlist.append(str(ose))
            return errorlist

        # MOVE
        if newname is None:
            if srcpath == destpath:
                result = False
                errText = 'Equal Source and Destination Path'
            elif not os.path.exists(fullpath):
                result = False
                errText = 'File not exist'
            elif not os.path.exists(destpath):
                result = False
                errText = 'Destination Path not exist'
            elif os.path.exists(destpath + fullfilename):
                errText = 'Destination File exist'
                result = False
        # rename
        else:
            if not os.path.exists(fullpath):
                result = False
                errText = 'File not exist'
            elif os.path.exists(newfullpath):
                result = False
                errText = 'New File exist'

        if result:
            errlist = domove()
            if not errlist:
                result = True
            else:
                errText = errlist[0]
                result = False

    etxt = "rename"
    if newname is None:
        etxt = "move"
    if result is False:
        return {
            "result":
            False,
            "message":
            "Could not %s recording '%s' Err: '%s'" % (etxt, name, errText)
        }
    else:
        return {
            "result":
            True,
            "message":
            "The recording '%s' has been %sd successfully" % (name, etxt)
        }
コード例 #33
0
ファイル: FileList.py プロジェクト: oostende/openspa1
    def changeDir(self, directory, select=None):
        self.list = []

        # if we are just entering from the list of mount points:
        if self.current_directory is None:
            if directory and self.showMountpoints:
                self.current_mountpoint = self.getMountpointLink(directory)
            else:
                self.current_mountpoint = None
        self.current_directory = directory
        directories = []
        files = []

        if directory is None and self.showMountpoints:  # present available mountpoints
            for p in harddiskmanager.getMountedPartitions():
                path = os.path.join(p.mountpoint, "")
                if path not in self.inhibitMounts and not self.inParentDirs(
                        path, self.inhibitDirs):
                    self.list.append(
                        MultiFileSelectEntryComponent(name=p.description,
                                                      absolute=path,
                                                      isDir=True))
            files = []
            directories = []
        elif directory is None:
            files = []
            directories = []
        elif self.useServiceRef:
            root = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + directory)
            if self.additional_extensions:
                root.setName(self.additional_extensions)
            serviceHandler = eServiceCenter.getInstance()
            list = serviceHandler.list(root)

            while 1:
                s = list.getNext()
                if not s.valid():
                    del list
                    break
                if s.flags & s.mustDescent:
                    directories.append(s.getPath())
                else:
                    files.append(s)
            directories.sort()
            files.sort()
        else:
            if fileExists(directory):
                try:
                    files = os.listdir(directory)
                except:
                    files = []
                files.sort()
                tmpfiles = files[:]
                for x in tmpfiles:
                    if os.path.isdir(directory + x):
                        directories.append(directory + x + "/")
                        files.remove(x)

        if self.showDirectories:
            if directory:
                if self.showMountpoints and directory == self.current_mountpoint:
                    self.list.append(
                        FileEntryComponent(name="<" +
                                           _("List of storage devices") + ">",
                                           absolute=None,
                                           isDir=True))
                elif (directory != self.topDirectory) and not (
                        self.inhibitMounts and self.getMountpoint(directory)
                        in self.inhibitMounts):
                    self.list.append(
                        FileEntryComponent(
                            name="<" + _("Parent directory") + ">",
                            absolute='/'.join(directory.split('/')[:-2]) + '/',
                            isDir=True))
            for x in directories:
                if not (self.inhibitMounts and self.getMountpoint(x)
                        in self.inhibitMounts) and not self.inParentDirs(
                            x, self.inhibitDirs):
                    name = x.split('/')[-2]
                    alreadySelected = (x in self.selectedFiles) or (
                        os.path.normpath(x) in self.selectedFiles)
                    self.list.append(
                        MultiFileSelectEntryComponent(
                            name=name,
                            absolute=x,
                            isDir=True,
                            selected=alreadySelected))

        if self.showFiles:
            for x in files:
                if self.useServiceRef:
                    path = x.getPath()
                    name = path.split('/')[-1]
                else:
                    path = directory + x
                    name = x
                if (self.matchingPattern is
                        None) or self.matchingPattern.search(path):
                    alreadySelected = False
                    for entry in self.selectedFiles:
                        if os.path.basename(entry) == x:
                            alreadySelected = True
                    self.list.append(
                        MultiFileSelectEntryComponent(
                            name=name,
                            absolute=x,
                            isDir=False,
                            selected=alreadySelected))

        self.l.setList(self.list)

        if select is not None:
            i = 0
            self.moveToIndex(0)
            for x in self.list:
                p = x[0][0]

                if isinstance(p, eServiceReference):
                    p = p.getPath()

                if p == select:
                    self.moveToIndex(i)
                i += 1
コード例 #34
0
ファイル: Alternatives.py プロジェクト: Akki01/dvbapp
def getAlternativeChannels(service):
	alternativeServices = eServiceCenter.getInstance().list(eServiceReference(service))
	return alternativeServices and alternativeServices.getContent("S", True)
コード例 #35
0
def movielist(session, service, **kwargs):
    serviceHandler = eServiceCenter.getInstance()
    info = serviceHandler.info(service)
    name = info and info.getName(service) or ''
    session.open(EPGSearch, name)
コード例 #36
0
    def getText(self):
        service = self.source.service
        try:
            info = service and service.info()
        except:
            try:
                info = eServiceCenter.getInstance().info(service)
            except:
                pass
        if not info:
            return ""

        Ret_Text = ""
        Sec_Text = ""
        Res_Text = ""
        showCryptoInfo = False

        if (self.type == self.SMART_INFO_H or self.type == self.SERVICE_INFO
                or self.type == self.CRYPTO_INFO
                or self.type == self.FREQUENCY_INFO):  # HORIZONTAL
            sep = "  "
            sep2 = " - "
        elif (self.type == self.SMART_INFO_V):  # VERTIKAL
            sep = "\n"
            sep2 = "\n"
        else:
            return ""  # unsupported orientation

        if (self.type == self.FREQUENCY_INFO):
            try:
                feinfo = (service and service.frontendInfo())
                prvd = info.getInfoString(iServiceInformation.sProvider)
                Ret_Text = self.short(prvd)
                frontendDataOrg = (feinfo and feinfo.getAll(True))
            except:
                try:
                    frontendDataOrg = info.getInfoObject(
                        service, iServiceInformation.sTransponderData)
                    prvd = info.getInfoString(service,
                                              iServiceInformation.sProvider)
                except:
                    pass

            if (frontendDataOrg is not None):
                frontendData = ConvertToHumanReadable(frontendDataOrg)
                if ((frontendDataOrg.get("tuner_type") == "DVB-S")
                        or (frontendDataOrg.get("tuner_type") == "DVB-C")):
                    frequency = (str(
                        (frontendData.get("frequency") / 1000)) + " MHz")
                    symbolrate = (str(
                        (frontendData.get("symbol_rate") / 1000)))
                    fec_inner = frontendData.get("fec_inner")
                    if (frontendDataOrg.get("tuner_type") == "DVB-S"):
                        Ret_Text += sep + frontendData.get("system")
                        orbital_pos = int(frontendDataOrg["orbital_position"])
                        if orbital_pos > 1800:
                            if orbital_pos == 3590:
                                orb_pos = 'Thor/Intelsat'
                            elif orbital_pos == 3560:
                                orb_pos = 'Amos (4'
                            elif orbital_pos == 3550:
                                orb_pos = 'Atlantic Bird'
                            elif orbital_pos == 3530:
                                orb_pos = 'Nilesat/Atlantic Bird'
                            elif orbital_pos == 3520:
                                orb_pos = 'Atlantic Bird'
                            elif orbital_pos == 3475:
                                orb_pos = 'Atlantic Bird'
                            elif orbital_pos == 3460:
                                orb_pos = 'Express'
                            elif orbital_pos == 3450:
                                orb_pos = 'Telstar'
                            elif orbital_pos == 3420:
                                orb_pos = 'Intelsat'
                            elif orbital_pos == 3380:
                                orb_pos = 'Nss'
                            elif orbital_pos == 3355:
                                orb_pos = 'Intelsat'
                            elif orbital_pos == 3325:
                                orb_pos = 'Intelsat'
                            elif orbital_pos == 3300:
                                orb_pos = 'Hispasat'
                            elif orbital_pos == 3285:
                                orb_pos = 'Intelsat'
                            elif orbital_pos == 3170:
                                orb_pos = 'Intelsat'
                            elif orbital_pos == 3150:
                                orb_pos = 'Intelsat'
                            elif orbital_pos == 3070:
                                orb_pos = 'Intelsat'
                            elif orbital_pos == 3045:
                                orb_pos = 'Intelsat'
                            elif orbital_pos == 3020:
                                orb_pos = 'Intelsat 9'
                            elif orbital_pos == 2990:
                                orb_pos = 'Amazonas'
                            elif orbital_pos == 2900:
                                orb_pos = 'Star One'
                            elif orbital_pos == 2880:
                                orb_pos = 'AMC 6 (72'
                            elif orbital_pos == 2875:
                                orb_pos = 'Echostar 6'
                            elif orbital_pos == 2860:
                                orb_pos = 'Horizons'
                            elif orbital_pos == 2810:
                                orb_pos = 'AMC5'
                            elif orbital_pos == 2780:
                                orb_pos = 'NIMIQ 4'
                            elif orbital_pos == 2690:
                                orb_pos = 'NIMIQ 1'
                            elif orbital_pos == 3592:
                                orb_pos = 'Thor/Intelsat'
                            elif orbital_pos == 2985:
                                orb_pos = 'Echostar 3,12'
                            elif orbital_pos == 2830:
                                orb_pos = 'Echostar 8'
                            elif orbital_pos == 2630:
                                orb_pos = 'Galaxy 19'
                            elif orbital_pos == 2500:
                                orb_pos = 'Echostar 10,11'
                            elif orbital_pos == 2502:
                                orb_pos = 'DirectTV 5'
                            elif orbital_pos == 2410:
                                orb_pos = 'Echostar 7 Anik F3'
                            elif orbital_pos == 2391:
                                orb_pos = 'Galaxy 23'
                            elif orbital_pos == 2390:
                                orb_pos = 'Echostar 9'
                            elif orbital_pos == 2412:
                                orb_pos = 'DirectTV 7S'
                            elif orbital_pos == 2310:
                                orb_pos = 'Galaxy 27'
                            elif orbital_pos == 2311:
                                orb_pos = 'Ciel 2'
                            elif orbital_pos == 2120:
                                orb_pos = 'Echostar 2'
                            else:
                                orb_pos = str(
                                    (float(3600 - orbital_pos)) / 10.0) + "W"
                        elif orbital_pos > 0:
                            if orbital_pos == 192:
                                orb_pos = 'Astra 1F'
                            elif orbital_pos == 130:
                                orb_pos = 'Hot Bird 6,7A,8'
                            elif orbital_pos == 235:
                                orb_pos = 'Astra 1E'
                            elif orbital_pos == 1100:
                                orb_pos = 'BSat 1A,2A'
                            elif orbital_pos == 1101:
                                orb_pos = 'N-Sat 110'
                            elif orbital_pos == 1131:
                                orb_pos = 'KoreaSat 5'
                            elif orbital_pos == 1440:
                                orb_pos = 'SuperBird 7,C2'
                            elif orbital_pos == 1006:
                                orb_pos = 'AsiaSat 2'
                            elif orbital_pos == 1030:
                                orb_pos = 'Express A2'
                            elif orbital_pos == 1056:
                                orb_pos = 'Asiasat 3S'
                            elif orbital_pos == 1082:
                                orb_pos = 'NSS 11'
                            elif orbital_pos == 881:
                                orb_pos = 'ST1'
                            elif orbital_pos == 900:
                                orb_pos = 'Yamal 201'
                            elif orbital_pos == 917:
                                orb_pos = 'Mesat'
                            elif orbital_pos == 950:
                                orb_pos = 'Insat 4B'
                            elif orbital_pos == 951:
                                orb_pos = 'NSS 6'
                            elif orbital_pos == 765:
                                orb_pos = 'Telestar'
                            elif orbital_pos == 785:
                                orb_pos = 'ThaiCom 5'
                            elif orbital_pos == 800:
                                orb_pos = 'Express'
                            elif orbital_pos == 830:
                                orb_pos = 'Insat 4A'
                            elif orbital_pos == 850:
                                orb_pos = 'Intelsat 709'
                            elif orbital_pos == 750:
                                orb_pos = 'Abs'
                            elif orbital_pos == 720:
                                orb_pos = 'Intelsat'
                            elif orbital_pos == 705:
                                orb_pos = 'Eutelsat W5'
                            elif orbital_pos == 685:
                                orb_pos = 'Intelsat'
                            elif orbital_pos == 620:
                                orb_pos = 'Intelsat 902'
                            elif orbital_pos == 600:
                                orb_pos = 'Intelsat 904'
                            elif orbital_pos == 570:
                                orb_pos = 'Nss'
                            elif orbital_pos == 530:
                                orb_pos = 'Express AM22'
                            elif orbital_pos == 480:
                                orb_pos = 'Eutelsat 2F2'
                            elif orbital_pos == 450:
                                orb_pos = 'Intelsat'
                            elif orbital_pos == 420:
                                orb_pos = 'Turksat 2A'
                            elif orbital_pos == 400:
                                orb_pos = 'Express AM1'
                            elif orbital_pos == 390:
                                orb_pos = 'Hellas Sat 2'
                            elif orbital_pos == 380:
                                orb_pos = 'Paksat 1'
                            elif orbital_pos == 360:
                                orb_pos = 'Eutelsat Sesat'
                            elif orbital_pos == 335:
                                orb_pos = 'Astra 1M'
                            elif orbital_pos == 330:
                                orb_pos = 'Eurobird 3'
                            elif orbital_pos == 328:
                                orb_pos = 'Galaxy 11'
                            elif orbital_pos == 315:
                                orb_pos = 'Astra 5A'
                            elif orbital_pos == 310:
                                orb_pos = 'Turksat'
                            elif orbital_pos == 305:
                                orb_pos = 'Arabsat'
                            elif orbital_pos == 285:
                                orb_pos = 'Eurobird 1'
                            elif orbital_pos == 284:
                                orb_pos = 'Eurobird/Astra'
                            elif orbital_pos == 282:
                                orb_pos = 'Eurobird/Astra'
                            elif orbital_pos == 1220:
                                orb_pos = 'AsiaSat'
                            elif orbital_pos == 1380:
                                orb_pos = 'Telstar 18'
                            elif orbital_pos == 260:
                                orb_pos = 'Badr 3/4'
                            elif orbital_pos == 255:
                                orb_pos = 'Eurobird 2'
                            elif orbital_pos == 215:
                                orb_pos = 'Eutelsat'
                            elif orbital_pos == 216:
                                orb_pos = 'Eutelsat W6'
                            elif orbital_pos == 210:
                                orb_pos = 'AfriStar 1'
                            elif orbital_pos == 160:
                                orb_pos = 'Eutelsat W2'
                            elif orbital_pos == 100:
                                orb_pos = 'Eutelsat W1'
                            elif orbital_pos == 90:
                                orb_pos = 'Eurobird 9'
                            elif orbital_pos == 70:
                                orb_pos = 'Eutelsat W3A'
                            elif orbital_pos == 50:
                                orb_pos = 'Sirius 4'
                            elif orbital_pos == 48:
                                orb_pos = 'Sirius 4'
                            elif orbital_pos == 30:
                                orb_pos = 'Telecom 2'
                            else:
                                orb_pos = str(
                                    (float(orbital_pos)) / 10.0) + "E"
                        Ret_Text += sep + orb_pos + "\n"
                        Ret_Text += frequency + sep + frontendData.get(
                            "polarization_abbreviation")
                        Ret_Text += sep + symbolrate
                        Ret_Text += sep + frontendData.get(
                            "modulation") + "-" + fec_inner
                    else:
                        Ret_Text += sep + "DVB-C " + frequency + " MHz" + sep + fec_inner + sep + symbolrate
                elif (frontendData.get("tuner_type") == "DVB-T"):
                    frequency = (str(
                        (frontendData.get("frequency") / 1000)) + " MHz")
                    Ret_Text = "Frequency: " + frequency

        if (self.type == self.SMART_INFO_H or self.type == self.SMART_INFO_V
                or self.type == self.SERVICE_INFO):

            xresol = info.getInfo(iServiceInformation.sVideoWidth)
            yresol = info.getInfo(iServiceInformation.sVideoHeight)
            feinfo = (service and service.frontendInfo())

            prvd = info.getInfoString(iServiceInformation.sProvider)
            Ret_Text = self.short(prvd)

            frontendDataOrg = (feinfo and feinfo.getAll(True))
            if (frontendDataOrg is not None):
                frontendData = ConvertToHumanReadable(frontendDataOrg)
                if ((frontendDataOrg.get("tuner_type") == "DVB-S")
                        or (frontendDataOrg.get("tuner_type") == "DVB-C")):
                    frequency = (str((frontendData.get("frequency") / 1000)))
                    symbolrate = (str(
                        (frontendData.get("symbol_rate") / 1000)))
                    fec_inner = frontendData.get("fec_inner")
                    if (frontendDataOrg.get("tuner_type") == "DVB-S"):
                        Ret_Text += sep + frontendData.get("system")
                        Ret_Text += sep + frequency + frontendData.get(
                            "polarization_abbreviation")
                        Ret_Text += sep + symbolrate
                        Ret_Text += sep + fec_inner + " " + frontendData.get(
                            "modulation")
                        orbital_pos = int(frontendDataOrg["orbital_position"])
                        if orbital_pos > 1800:
                            orb_pos = str(
                                (float(3600 - orbital_pos)) / 10.0) + "W"
                        elif orbital_pos > 0:
                            orb_pos = str((float(orbital_pos)) / 10.0) + "E"
                        Ret_Text += sep + orb_pos
                    else:
                        Ret_Text += sep + "DVB-C " + frequency + " MHz" + sep + fec_inner + sep + symbolrate
                elif (frontendDataOrg.get("tuner_type") == "DVB-T"):
                    frequency = (str((frontendData.get("frequency") / 1000)))
                    Ret_Text += sep + "DVB-T" + sep + "Frequency:" + sep + frequency + " MHz"

            if (feinfo is not None) and (xresol > 0):
                from Components.Converter.PliExtraInfo import codec_data
                Res_Text += codec_data.get(
                    self.info.getInfo(iServiceInformation.sVideoType), "N/A")
                Res_Text += str(xresol) + "x" + str(yresol)
                Res_Text += ("i", "p", "")[info.getInfo(
                    iServiceInformation.sProgressive)]
                Res_Text += str(
                    (info.getInfo(iServiceInformation.sFrameRate) + 500) /
                    1000)

        if (self.type == self.SMART_INFO_H or self.type == self.SMART_INFO_V
                or self.type == self.CRYPTO_INFO):

            decCI = "0"
            Sec_Text = ""
            if (info.getInfo(iServiceInformation.sIsCrypted) == 1):
                data = self.ecmdata.getEcmData()
                if not config.usage.show_cryptoinfo.value:
                    showCryptoInfo = True
                    Sec_Text = data[0] + "\n"
                decCI = data[1]
                provid = data[2]
                pid = data[3]

                if decCI != '0':
                    decCIfull = "%04x" % int(decCI, 16)
                    for idline in self.idnames:
                        if int(decCI, 16) >= int(idline[0], 16) and int(
                                decCI, 16) <= int(idline[1], 16):
                            decCIfull = idline[2] + ":" + decCIfull
                            break
                    Sec_Text += decCIfull
                    if provid != '0':
                        Sec_Text += ":%04x" % int(provid, 16)
                    else:
                        Sec_Text += ":"
                    if pid != '0':
                        Sec_Text += ":%04x:%04x" % (info.getInfo(
                            iServiceInformation.sSID), int(pid, 16))

            elif not config.usage.show_cryptoinfo.value:
                showCryptoInfo = True
                Sec_Text = "FTA"
            res = ""
            searchIDs = (info.getInfoObject(iServiceInformation.sCAIDs))
            for idline in self.idnames:
                if int(decCI, 16) >= int(idline[0], 16) and int(
                        decCI, 16) <= int(idline[1], 16):
                    color = "\c0000ff00"
                else:
                    color = "\c007f7f7f"
                    try:
                        for oneID in searchIDs:
                            if oneID >= int(idline[0], 16) and oneID <= int(
                                    idline[1], 16):
                                color = "\c00ffff00"
                    except:
                        pass
                res += color + idline[3] + " "

            if (self.type != self.CRYPTO_INFO):
                Ret_Text += "\n"
            Ret_Text += res + "\c00ffffff " + Sec_Text

        if Res_Text != "":
            if showCryptoInfo:
                Ret_Text += sep + Res_Text
            else:
                Ret_Text += "\n" + Res_Text

        return Ret_Text
コード例 #37
0
ファイル: movies.py プロジェクト: jenseneverest/OpenWebif
def getMovieDetails(sRef=None):

    service = ServiceReference(sRef)
    if service is not None:

        serviceref = service.ref
        length_minutes = 0
        txtdesc = ""
        fullpath = serviceref.getPath()
        filename = '/'.join(fullpath.split("/")[1:])
        filename = '/' + filename
        name, ext = os.path.splitext(filename)

        serviceHandler = eServiceCenter.getInstance()
        info = serviceHandler.info(serviceref)

        sourceRef = ServiceReference(
            info.getInfoString(serviceref, iServiceInformation.sServiceref))
        rtime = info.getInfo(serviceref, iServiceInformation.sTimeCreate)

        movie = {
            'filename':
            filename,
            'filename_stripped':
            filename.split("/")[-1],
            'serviceref':
            serviceref.toString(),
            'length':
            "?:??",
            'lastseen':
            0,
            'filesize_readable':
            '',
            'recordingtime':
            rtime,
            'begintime':
            'undefined',
            'eventname':
            service.getServiceName().replace('\xc2\x86',
                                             '').replace('\xc2\x87', ''),
            'servicename':
            sourceRef.getServiceName().replace('\xc2\x86',
                                               '').replace('\xc2\x87', ''),
            'tags':
            info.getInfoString(serviceref, iServiceInformation.sTags),
            'fullname':
            serviceref.toString(),
        }

        if rtime > 0:
            fuzzy_rtime = FuzzyTime(rtime)
            movie['begintime'] = fuzzy_rtime[0] + ", " + fuzzy_rtime[1]

        try:
            length_minutes = info.getLength(serviceref)
        except:  # noqa: E722
            pass

        if length_minutes:
            movie['length'] = "%d:%02d" % (length_minutes / 60,
                                           length_minutes % 60)
            movie['lastseen'] = _moviePlayState(filename + '.cuts', serviceref,
                                                length_minutes) or 0

        txtfile = name + '.txt'
        if ext.lower() != '.ts' and os.path.isfile(txtfile):
            with open(txtfile, "rb") as handle:
                txtdesc = six.ensure_str(b''.join(handle.readlines()))

        event = info.getEvent(serviceref)
        extended_description = event and event.getExtendedDescription() or ""
        if extended_description == '' and txtdesc != '':
            extended_description = txtdesc
        movie['descriptionExtended'] = ConvertDesc(extended_description)
        desc = info.getInfoString(serviceref, iServiceInformation.sDescription)
        movie['description'] = ConvertDesc(desc)

        size = 0
        sz = ''

        try:
            size = os.stat(filename).st_size
            if size > 1073741824:
                sz = "%.2f %s" % ((size / 1073741824.), _("GB"))
            elif size > 1048576:
                sz = "%.2f %s" % ((size / 1048576.), _("MB"))
            elif size > 1024:
                sz = "%.2f %s" % ((size / 1024.), _("kB"))
        except:  # noqa: E722
            pass

        movie['filesize'] = size
        movie['filesize_readable'] = sz

        return {"result": True, "movie": movie}
    else:
        return {
            "result": False,
        }
コード例 #38
0
 def __init__(self, ref):
     if not isinstance(ref, eServiceReference):
         self.ref = eServiceReference(ref or "")
     else:
         self.ref = ref
     self.serviceHandler = eServiceCenter.getInstance()
コード例 #39
0
    def confirm(self, confirmed):
        if confirmed and self.services:
            serviceHandler = eServiceCenter.getInstance()

            try:
                for service in self.services:

                    seriesPlugin = getInstance()

                    if isinstance(service, eServiceReference):
                        service = service
                    elif isinstance(service, ServiceReference):
                        service = service.ref
                    else:
                        logDebug("SPR: Wrong instance")
                        continue

                    servicepath = service.getPath()

                    if not os.path.exists(servicepath):
                        logDebug("SPR: File not exists: " + servicepath)
                        continue

                    info = serviceHandler.info(service)
                    if not info:
                        logDebug("SPR: No info available: " + servicepath)
                        continue

                    name = service.getName() or info.getName(service) or ""
                    if name[-2:] == 'ts':
                        name = name[:-2]
                    #logDebug("SPR: name", name)

                    short = ""
                    begin = None
                    end = None
                    duration = 0

                    event = info.getEvent(service)
                    if event:
                        short = event.getShortDescription()
                        begin = event.getBeginTime()
                        duration = event.getDuration() or 0
                        end = begin + duration or 0
                        # We got the exact start times, no need for margin handling

                    if not begin:
                        begin = info.getInfo(
                            service, iServiceInformation.sTimeCreate) or -1
                        if begin != -1:
                            end = begin + (info.getLength(service) or 0)
                        else:
                            end = os.path.getmtime(servicepath)
                            begin = end - (info.getLength(service) or 0)
                        #MAYBE we could also try to parse the filename
                        # We don't know the exact margins, we will assume the E2 default margins
                        begin -= (int(config.recording.margin_before.value) *
                                  60)
                        end += (int(config.recording.margin_after.value) * 60)

                    rec_ref_str = info.getInfoString(
                        service, iServiceInformation.sServiceref)
                    #channel = ServiceReference(rec_ref_str).getServiceName()

                    logDebug("SPR: getEpisode:", name, begin, end, rec_ref_str)
                    seriesPlugin.getEpisode(boundFunction(
                        self.renamerCallback, servicepath, name, short),
                                            name,
                                            begin,
                                            end,
                                            rec_ref_str,
                                            elapsed=True,
                                            rename=True)

                    #result = seriesPlugin.getEpisodeBlocking( name, begin, end, rec_ref_str, elapsed=True )
                    #self.renamerCallback( servicepath, name, short, result )

            except Exception as e:
                logDebug("SPR: Exception:", str(e))
コード例 #40
0
ファイル: movies.py プロジェクト: jenseneverest/OpenWebif
def removeMovie(session, sRef, Force=False):
    service = ServiceReference(sRef)
    result = False
    deleted = False
    message = "service error"

    if service is not None:
        serviceHandler = eServiceCenter.getInstance()
        offline = serviceHandler.offlineOperations(service.ref)
        info = serviceHandler.info(service.ref)
        name = info and info.getName(service.ref) or "this recording"

    if offline is not None:
        if Force is True:
            message = "force delete"
        elif hasattr(config.usage, 'movielist_trashcan'):
            fullpath = service.ref.getPath()
            srcpath = '/'.join(fullpath.split('/')[:-1]) + '/'
            # TODO: check trash
            # TODO: check enable trash default value
            if '.Trash' not in fullpath and config.usage.movielist_trashcan.value:
                result = False
                message = "trashcan"
                try:
                    import Tools.Trashcan
                    trash = Tools.Trashcan.createTrashFolder(srcpath)
                    MovieSelection.moveServiceFiles(service.ref, trash)
                    result = True
                    message = "The recording '%s' has been successfully moved to trashcan" % name
                except ImportError as e:
                    message = "trashcan exception"
                    pass
                except Exception as e:
                    message = "Failed to move to .Trash folder: %s" + str(e)
                    print(message)
                deleted = True
        elif hasattr(config.usage, 'movielist_use_trash_dir'):
            fullpath = service.ref.getPath()
            if TRASHDIRNAME not in fullpath and config.usage.movielist_use_trash_dir.value:
                message = "trashdir"
                try:
                    from Screens.MovieSelection import getTrashDir
                    from Components.FileTransfer import FileTransferJob
                    from Components.Task import job_manager
                    trash_dir = getTrashDir(fullpath)
                    if trash_dir:
                        src_file = str(fullpath)
                        dst_file = trash_dir
                        if dst_file.endswith("/"):
                            dst_file = trash_dir[:-1]
                        text = _("remove")
                        job_manager.AddJob(
                            FileTransferJob(src_file, dst_file, False, False,
                                            "%s : %s" % (text, src_file)))
                        # No Result because of async job
                        message = "The recording '%s' has been successfully moved to trashcan" % name
                        result = True
                    else:
                        message = _(
                            "Delete failed, because there is no movie trash !\nDisable movie trash in configuration to delete this item"
                        )
                except ImportError as e:
                    message = "trashdir exception"
                    pass
                except Exception as e:
                    message = "Failed to move to trashdir: %s" + str(e)
                    print(message)
                deleted = True
        if not deleted:
            if not offline.deleteFromDisk(0):
                result = True
    else:
        message = "no offline object"

    if result is False:
        return {
            "result": False,
            "message": "Could not delete Movie '%s' / %s" % (name, message)
        }
    else:
        return {
            "result": True,
            "message": "The movie '%s' has been deleted successfully" % name
        }
コード例 #41
0
def getStatusInfo(self):
    statusinfo = {}

    # Get Current Volume and Mute Status
    vcontrol = eDVBVolumecontrol.getInstance()

    statusinfo['volume'] = vcontrol.getVolume()
    statusinfo['muted'] = vcontrol.isMuted()

    # Get currently running Service
    event = None
    serviceref = self.session.nav.getCurrentlyPlayingServiceReference()
    if serviceref is not None:
        serviceHandler = eServiceCenter.getInstance()
        serviceHandlerInfo = serviceHandler.info(serviceref)

        service = self.session.nav.getCurrentService()
        serviceinfo = service and service.info()
        event = serviceinfo and serviceinfo.getEvent(0)
    else:
        event = None

    if event is not None:
        curEvent = parseEvent(event)
        statusinfo['currservice_name'] = curEvent[2].replace(
            '\xc2\x86', '').replace('\xc2\x87', '')
        statusinfo['currservice_serviceref'] = serviceref.toString()
        statusinfo['currservice_begin'] = strftime("%H:%M", (localtime(
            int(curEvent[0]) +
            (config.recording.margin_before.getValue() * 60))))
        statusinfo['currservice_end'] = strftime("%H:%M", (localtime(
            int(curEvent[1]) -
            (config.recording.margin_after.getValue() * 60))))
        statusinfo['currservice_description'] = curEvent[3]
        if len(curEvent[3].decode('utf-8')) > 220:
            statusinfo['currservice_description'] = curEvent[3].decode(
                'utf-8')[0:220].encode('utf-8') + "..."
        statusinfo['currservice_station'] = serviceHandlerInfo.getName(
            serviceref).replace('\xc2\x86', '').replace('\xc2\x87', '')
    else:
        statusinfo['currservice_name'] = "N/A"
        statusinfo['currservice_begin'] = ""
        statusinfo['currservice_end'] = ""
        statusinfo['currservice_description'] = ""
        if serviceref:
            statusinfo['currservice_serviceref'] = serviceref.toString()
            statusinfo['currservice_station'] = serviceHandlerInfo.getName(
                serviceref).replace('\xc2\x86', '').replace('\xc2\x87', '')

    # Get Standby State
    from Screens.Standby import inStandby
    if inStandby == None:
        statusinfo['inStandby'] = "false"
    else:
        statusinfo['inStandby'] = "true"

    # Get recording state
    recs = NavigationInstance.instance.getRecordings()
    if recs:
        statusinfo['isRecording'] = "true"
    else:
        statusinfo['isRecording'] = "false"

    return statusinfo
コード例 #42
0
	def __init__(self, wakeupData=None):
		if NavigationInstance.instance is not None:
			raise NavigationInstance.instance

		NavigationInstance.instance = self
		self.ServiceHandler = eServiceCenter.getInstance()

		import Navigation as Nav
		Nav.navcore = self

		self.pnav = pNavigation()
		self.pnav.m_event.get().append(self.dispatchEvent)
		self.pnav.m_record_event.get().append(self.dispatchRecordEvent)
		self.event = [ ]
		self.record_event = [ ]
		self.currentlyPlayingServiceReference = None
		self.currentlyPlayingServiceOrGroup = None
		self.currentlyPlayingService = None

		Screens.Standby.TVstate()
		self.skipWakeup = False

		self.RecordTimer = None
		self.isRecordTimerImageStandard = False
		for p in plugins.getPlugins(PluginDescriptor.WHERE_RECORDTIMER):
			self.RecordTimer = p()
			if self.RecordTimer:
				break
		if not self.RecordTimer:
			self.RecordTimer = RecordTimer.RecordTimer()
			self.isRecordTimerImageStandard = True

		self.PowerTimer = None
		self.PowerTimer = PowerTimer.PowerTimer()
		self.__wasTimerWakeup = False
		self.__wasRecTimerWakeup = False
		self.__wasPowerTimerWakeup = False

		#wakeup data
		now = time()
		try:
			self.lastshutdowntime, self.wakeuptime, self.timertime, self.wakeuptyp, self.getstandby, self.recordtime, self.forcerecord = [int(n) for n in wakeupData.split(',')]
		except:
			print "="*100
			print "[NAVIGATION] ERROR: can't read wakeup data"
			self.lastshutdowntime, self.wakeuptime, self.timertime, self.wakeuptyp, self.getstandby, self.recordtime, self.forcerecord = int(now),-1,-1,0,0,-1,0
		self.syncCount = 0
		hasFakeTime = (now <= 31536000 or now - self.lastshutdowntime <= 120) and self.getstandby < 2 #set hasFakeTime only if lower than values and was last shutdown to deep standby
		wasTimerWakeup, wasTimerWakeup_failure = getFPWasTimerWakeup(True)
		#TODO: verify wakeup-state for boxes where only after shutdown removed the wakeup-state (for boxes where "/proc/stb/fp/was_timer_wakeup" is not writable (clearFPWasTimerWakeup() in StbHardware.py has no effect -> after x hours and restart/reboot is wasTimerWakeup = True)

		if 0: #debug
			print "#"*100
			print "[NAVIGATION] timediff from last shutdown to now = %ds" %(now - self.lastshutdowntime)
			print "[NAVIGATION] shutdowntime: %s, wakeuptime: %s timertime: %s, recordtime: %s" %(ctime(self.lastshutdowntime), ctime(self.wakeuptime), ctime(self.timertime), ctime(self.recordtime))
			print "[NAVIGATION] wakeuptyp: %s, getstandby: %s, forcerecord: %s" %({0:"record-timer",1:"zap-timer",2:"power-timer",3:"plugin-timer"}[self.wakeuptyp],{0:"no standby",1:"standby",2:"no standby (box was not in deepstandby)"}[self.getstandby],self.forcerecord)
			print "#"*100

		print "="*100
		print "[NAVIGATION] was timer wakeup = %s" %wasTimerWakeup
		print "[NAVIGATION] current time is %s -> it's fake-time suspected: %s" %(ctime(now),hasFakeTime)
		print "-"*100

		thisBox = getBoxType()
		if not config.workaround.deeprecord.value and (wasTimerWakeup_failure or thisBox in ('ixussone', 'uniboxhd1', 'uniboxhd2', 'uniboxhd3', 'sezam5000hd', 'mbtwin', 'beyonwizt3', 'et8000') or getBrandOEM() in ('ebox', 'azbox', 'xp', 'ini', 'fulan', 'entwopia') or getMachineBuild() in ('dags7335' , 'dags7356', 'dags7362')):
			print"[NAVIGATION] FORCED DEEPSTANDBY-WORKAROUND FOR THIS BOXTYPE (%s)" %thisBox
			print "-"*100
			config.workaround.deeprecord.setValue(True)
			config.workaround.deeprecord.save()
			config.save()

		if config.workaround.deeprecord.value: #work-around for boxes where driver not sent was_timer_wakeup signal to e2
			print "[NAVIGATION] starting deepstandby-workaround"
			self.wakeupwindow_plus = self.timertime + 300
			self.wakeupwindow_minus = self.wakeuptime - (config.workaround.wakeupwindow.value * 60)
			wasTimerWakeup = False
			if not hasFakeTime and now >= self.wakeupwindow_minus and now <= self.wakeupwindow_plus: # if there is a recording sheduled, set the wasTimerWakeup flag
				wasTimerWakeup = True
				f = open("/tmp/was_timer_wakeup_workaround.txt", "w")
				file = f.write(str(wasTimerWakeup))
				f.close()
		else:
			#secure wakeup window to prevent a wrong 'wasTimerWakeup' value as timer wakeup detection
			self.wakeupwindow_plus = self.timertime + 900
			self.wakeupwindow_minus = self.wakeuptime - 3600

		if self.wakeuptime > 0:
			print "[NAVIGATION] wakeup time from deep-standby expected: *** %s ***" %(ctime(self.wakeuptime))
			if config.workaround.deeprecord.value:
				print "[NAVIGATION] timer wakeup detection window: %s - %s" %(ctime(self.wakeupwindow_minus),ctime(self.wakeupwindow_plus))
		else:
			print "[NAVIGATION] wakeup time was not set"
		print "-"*100

		if wasTimerWakeup:
			self.__wasTimerWakeup = True
			if not hasFakeTime:
				self.wakeupCheck()
				return

		if hasFakeTime and self.wakeuptime > 0: # check for NTP-time sync, if no sync, wait for transponder time
			if Screens.Standby.TVinStandby.getTVstandby('waitfortimesync') and not wasTimerWakeup:
				Screens.Standby.TVinStandby.setTVstate('power')
			self.savedOldTime = now
			self.timesynctimer = eTimer()
			self.timesynctimer.callback.append(self.TimeSynctimer)
			self.timesynctimer.start(5000, True)
			print"[NAVIGATION] wait for time sync"
			print "~"*100
		else:
			self.wakeupCheck(False)
コード例 #43
0
ファイル: ServiceList.py プロジェクト: henrylicious/test
 def getServiceList(self):
     serviceHandler = eServiceCenter.getInstance()
     return serviceHandler.list(self.root)
コード例 #44
0
	def getText(self):
		service = self.source.service
		if isinstance(service, iPlayableServicePtr):
			info = service and service.info()
			ref = None
		else: # reference
			info = service and self.source.info
			ref = service
		if not info: return ""
		if ref:
			refstr = ref.toString()
		else:
			refstr = info.getInfoString(iServiceInformation.sServiceref)
		if refstr is None:
			refstr = ''
		if self.AlternativeControl:
			if ref and refstr.startswith("1:134:") and self.ref is None:
				nref = self.resolveAlternate(ref)
				if nref:
					self.ref = nref
					self.info = eServiceCenter.getInstance().info(self.ref)
					self.refstr = self.ref.toString()
					if not self.info: return ""
		if self.IPTVcontrol:
			if '%3a//' in refstr or (self.refstr and '%3a//' in self.refstr) or refstr.startswith("4097:"):
				self.isStream = True
		if self.type == self.NAME:
			name = ref and (info.getName(ref) or 'N/A') or (info.getName() or 'N/A')
			prefix = ''
			if self.ref:
				prefix = " (alter)"
			name += prefix
			return name.replace('\xc2\x86', '').replace('\xc2\x87', '')
		elif self.type == self.NUMBER:
			try:
				service = self.source.serviceref
				num = service and service.getChannelNum() or None
			except:
				num = None
			if num:
				return str(num)
			else:
				num, bouq = self.getServiceNumber(ref or eServiceReference(info.getInfoString(iServiceInformation.sServiceref)))
				return num and str(num) or ''
		elif self.type == self.BOUQUET:
			num, bouq = self.getServiceNumber(ref or eServiceReference(info.getInfoString(iServiceInformation.sServiceref)))
			return bouq
		elif self.type == self.PROVIDER:
			if self.isStream:
				if self.refstr and ('%3a//' in self.refstr or '%3a//' in self.refstr):
					return self.getIPTVProvider(self.refstr)
				return self.getIPTVProvider(refstr)
			else:
				if self.ref:
					return self.getProviderName(self.ref)
				if ref:
					return self.getProviderName(ref)
				else:
					return info.getInfoString(iServiceInformation.sProvider) or ''
		elif self.type == self.REFERENCE:
			if self.refstr:
				return self.refstr
			return refstr
		elif self.type == self.ORBPOS:
			if self.isStream:
				return "Stream"
			else:
				if self.ref and self.info:
					return self.getTransponderInfo(self.info, self.ref, 'O')
				return self.getTransponderInfo(info, ref, 'O')
		elif self.type == self.TPRDATA:
			if self.isStream:
				return _("Streaming")
			else:
				if self.ref and self.info:
					return self.getTransponderInfo(self.info, self.ref, 'T')
				return self.getTransponderInfo(info, ref, 'T')
		elif self.type == self.SATELLITE:
			if self.isStream:
				return _("Internet")
			else:
				if self.ref:
					return self.getSatelliteName(self.ref)
			#test#
				return self.getSatelliteName(ref or eServiceReference(info.getInfoString(iServiceInformation.sServiceref)))
		elif self.type == self.ALLREF:
			tmpref = self.getReferenceType(refstr, ref)
			if 'Bouquet' in tmpref or 'Satellit' in tmpref or 'Provider' in tmpref:
				return ' '
			elif '%3a' in tmpref:
				return ':'.join(refstr.split(':')[:10])
			return tmpref
		elif self.type == self.FORMAT:
			num = bouq = ''
			tmp = self.sfmt[:].split("%")
			if tmp:
				ret = tmp[0]
				tmp.remove(ret)
			else:
				return ""
			for line in tmp:
				f = line[:1]
				if f == 'N':	# %N - Name
					name = ref and (info.getName(ref) or 'N/A') or (info.getName() or 'N/A')
					postfix = ''
					if self.ref:
						postfix = " (alter)"
					name += postfix
					ret += name.replace('\xc2\x86', '').replace('\xc2\x87', '')
				elif f == 'n':	# %n - Number
					try:
						service = self.source.serviceref
						num = service and service.getChannelNum() or None
					except:
						num = None
					if num:
						ret += str(num)
					else:
						num, bouq = self.getServiceNumber(ref or eServiceReference(info.getInfoString(iServiceInformation.sServiceref)))
						ret += num and str(num) or ''
				elif f == 'B':	# %B - Bouquet
					num, bouq = self.getServiceNumber(ref or eServiceReference(info.getInfoString(iServiceInformation.sServiceref)))
					ret += bouq
				elif f == 'P':	# %P - Provider
					if self.isStream:
						if self.refstr and '%3a//' in self.refstr:
							ret += self.getIPTVProvider(self.refstr)
						else:
							ret += self.getIPTVProvider(refstr)
					else:
						if self.ref:
							ret += self.getProviderName(self.ref)
						else:
							if ref:
								ret += self.getProviderName(ref)
							else:
								ret += info.getInfoString(iServiceInformation.sProvider) or ''
				elif f == 'R':	# %R - Reference
					if self.refstr:
						ret += self.refstr
					else:
						ret += refstr
				elif f == 'S':	# %S - Satellite
					if self.isStream:
						ret += _("Internet")
					else:
						if self.ref:
							ret += self.getSatelliteName(self.ref)
						else:
							ret += self.getSatelliteName(ref or eServiceReference(info.getInfoString(iServiceInformation.sServiceref)))
				elif f == 'A':	# %A - AllRef
					tmpref = self.getReferenceType(refstr, ref)
					if 'Bouquet' in tmpref or 'Satellit' in tmpref or 'Provider' in tmpref:
						ret += ' '
					elif '%3a' in tmpref:
						ret += ':'.join(refstr.split(':')[:10])
					else:
						ret += tmpref
				elif f in 'TtsFfiOMpYroclhmgbe':
					if self.ref:
						ret += self.getTransponderInfo(self.info, self.ref, f)
					else:
						ret += self.getTransponderInfo(info, ref, f)
				ret += line[1:]
			return '%s'%(ret.replace('N/A', '').strip())
コード例 #45
0
ファイル: Navigation.py プロジェクト: mytest-e2/ritest-e2
	def __init__(self, wakeupData=None):
		if NavigationInstance.instance is not None:
			raise NavigationInstance.instance

		NavigationInstance.instance = self
		self.ServiceHandler = eServiceCenter.getInstance()

		import Navigation as Nav
		Nav.navcore = self

		self.pnav = pNavigation()
		self.pnav.m_event.get().append(self.dispatchEvent)
		self.pnav.m_record_event.get().append(self.dispatchRecordEvent)
		self.event = [ ]
		self.record_event = [ ]
		self.currentlyPlayingServiceReference = None
		self.currentlyPlayingServiceOrGroup = None
		self.currentlyPlayingService = None

		self.RecordTimer = None
		self.isRecordTimerImageStandard = False
		for p in plugins.getPlugins(PluginDescriptor.WHERE_RECORDTIMER):
			self.RecordTimer = p()
			if self.RecordTimer:
				break
		if not self.RecordTimer:
			self.RecordTimer = RecordTimer.RecordTimer()
			self.isRecordTimerImageStandard = True

		self.PowerTimer = None
		self.PowerTimer = PowerTimer.PowerTimer()
		self.__wasTimerWakeup = False
		self.__wasRecTimerWakeup = False
		self.__wasPowerTimerWakeup = False

		#wakeup data
		try:
			self.wakeuptime, self.timertime, self.wakeuptyp, self.getstandby, self.recordtime, self.forcerecord = [int(n) for n in wakeupData.split(',')]
		except:
			print "="*100
			print "[NAVIGATION] ERROR: can't read wakeup data"
			self.wakeuptime, self.timertime, self.wakeuptyp, self.getstandby, self.recordtime, self.forcerecord = -1,-1,0,0,-1,0
		#print ctime(self.wakeuptime), ctime(self.timertime), self.wakeuptyp, self.getstandby, ctime(self.recordtime), self.forcerecord
		now = time()
		timediff_wakeup = self.wakeuptime - now
		timediff_timer = self.timertime - now
		self.syncCount = 0

		wasTimerWakeup = getFPWasTimerWakeup()
		#TODO: verify wakeup-state for boxes where only after shutdown removed the wakeup-state (for boxes where "/proc/stb/fp/was_timer_wakeup" is not writable (clearFPWasTimerWakeup() in StbHardware.py has no effect -> after x hours and restart/reboot is wasTimerWakeup = True)

		print "="*100
		thisBox = getBoxType()
		if not config.workaround.deeprecord.value and (thisBox in ('ixussone', 'uniboxhd1', 'uniboxhd2', 'uniboxhd3', 'sezam5000hd', 'mbtwin', 'beyonwizt3') or getBrandOEM() in ('ebox', 'azbox', 'xp', 'ini', 'dags', 'fulan', 'entwopia')):
			print"[NAVIGATION] FORCED DEEPSTANDBY-WORKAROUND FOR THIS BOXTYPE (%s)" %thisBox
			config.workaround.deeprecord.setValue(True)
			config.workaround.deeprecord.save()
			config.save()

		if config.workaround.deeprecord.value: #work-around for boxes where driver not sent was_timer_wakeup signal to e2
			wasTimerWakeup = False
			print "[NAVIGATION] starting deepstandby-workaround"
			if now <= 31536000: # check for NTP-time sync, if no sync, wait for transponder time
				self.timesynctimer = eTimer()
				self.timesynctimer.callback.append(self.TimeSynctimer)
				self.timesynctimer.start(5000, True)
				print"[NAVIGATION] wait for time sync"
				print "~"*100
			elif abs(timediff_wakeup) <= 600 or abs(timediff_timer) <= 600: # if there is a recording sheduled in the next 10 mins or starting before 10 mins, set the wasTimerWakeup flag (wakeup time is 5 min before timer starts, some boxes starts but earlier than is set)
				wasTimerWakeup = True
				f = open("/tmp/was_timer_wakeup_workaround.txt", "w")
				file = f.write(str(wasTimerWakeup))
				f.close()

		print "[NAVIGATION] was timer wakeup = %s" % wasTimerWakeup
		print "[NAVIGATION] current time is %s" % ctime(now)

		if wasTimerWakeup:
			self.__wasTimerWakeup = True
			print "-"*100
			if self.wakeuptime > 0:
				print "[NAVIGATION] wakeup time was %s" % ctime(self.wakeuptime)
			else:
				print "[NAVIGATION] wakeup time was not set"
			if now <= 31536000:
				self.timesynctimer = eTimer()
				self.timesynctimer.callback.append(self.TimeSynctimer)
				self.timesynctimer.start(5000, True)
				print"[NAVIGATION] wait for time sync"
				print "~"*100
			else:
				self.wakeupCheck()
		else:
			if now > 31536000:
				if self.timertime > 0:
					print "[NAVIGATION] next '%s' starts at %s" % ({0:"record-timer",1:"zap-timer",2:"power-timer",3:"plugin-timer"}[self.wakeuptyp], ctime(self.timertime))
				else:
					print "[NAVIGATION] no next timers"
				print "="*100
コード例 #46
0
def getStatusInfo(self):
	statusinfo = {}

	# Get Current Volume and Mute Status
	vcontrol = eDVBVolumecontrol.getInstance()

	statusinfo['volume'] = vcontrol.getVolume()
	statusinfo['muted'] = vcontrol.isMuted()
	statusinfo['transcoding'] = getTranscodingSupport()

	# Get currently running Service
	event = None
	serviceref = self.session.nav.getCurrentlyPlayingServiceReference()
	if serviceref is not None:
		serviceHandler = eServiceCenter.getInstance()
		serviceHandlerInfo = serviceHandler.info(serviceref)

		service = self.session.nav.getCurrentService()
		serviceinfo = service and service.info()
		event = serviceinfo and serviceinfo.getEvent(0)
	else:
		event = None

	statusinfo['currservice_filename'] = ""
	if event is not None:
		curEvent = parseEvent(event)
		statusinfo['currservice_name'] = curEvent[2].replace('\xc2\x86', '').replace('\xc2\x87', '')
		statusinfo['currservice_serviceref'] = serviceref.toString()
		statusinfo['currservice_begin'] = strftime("%H:%M", (localtime(int(curEvent[0])+(config.recording.margin_before.value*60))))
		statusinfo['currservice_end'] = strftime("%H:%M", (localtime(int(curEvent[1])-(config.recording.margin_after.value*60))))
		statusinfo['currservice_description'] = curEvent[3]
		if len(curEvent[3].decode('utf-8')) > 220:
			statusinfo['currservice_description'] = curEvent[3].decode('utf-8')[0:220].encode('utf-8') + "..."
		statusinfo['currservice_station'] = serviceHandlerInfo.getName(serviceref).replace('\xc2\x86', '').replace('\xc2\x87', '')
		if statusinfo['currservice_serviceref'].startswith('1:0:0'):
			statusinfo['currservice_filename'] = '/' + '/'.join(serviceref.toString().split("/")[1:])
		full_desc = statusinfo['currservice_name'] + '\n'
		full_desc += statusinfo['currservice_begin'] + " - " + statusinfo['currservice_end']  + '\n\n'
		full_desc += event.getExtendedDescription().replace('\xc2\x86', '').replace('\xc2\x87', '').replace('\xc2\x8a', '\n')
		statusinfo['currservice_fulldescription'] = full_desc
	else:
		statusinfo['currservice_name'] = "N/A"
		statusinfo['currservice_begin'] = ""
		statusinfo['currservice_end'] = ""
		statusinfo['currservice_description'] = ""
		statusinfo['currservice_fulldescription'] = "N/A"
		if serviceref:
			statusinfo['currservice_serviceref'] = serviceref.toString()
			if serviceHandlerInfo:
				statusinfo['currservice_station'] = serviceHandlerInfo.getName(serviceref).replace('\xc2\x86', '').replace('\xc2\x87', '')
			elif serviceref.toString().find("http") != -1:
				statusinfo['currservice_station'] = serviceref.toString().replace('%3a', ':')[serviceref.toString().find("http"):]
			else:
				statusinfo['currservice_station'] = "N/A"

	# Get Standby State
	from Screens.Standby import inStandby
	if inStandby == None:
		statusinfo['inStandby'] = "false"
	else:
		statusinfo['inStandby'] = "true"

	# Get recording state
	recs = NavigationInstance.instance.getRecordings()
	if recs:
		statusinfo['isRecording'] = "true"
		statusinfo['Recording_list'] = "\n"
		for timer in NavigationInstance.instance.RecordTimer.timer_list:
			if timer.state == TimerEntry.StateRunning:
				if not timer.justplay:
					statusinfo['Recording_list'] += timer.service_ref.getServiceName() + ": " + timer.name + "\n"
	else:
		statusinfo['isRecording'] = "false"

	return statusinfo
コード例 #47
0
 def __init__(self):
     global instance
     instance = eServiceCenter.getInstance()
     instance.info = self.info
コード例 #48
0
ファイル: Movie.py プロジェクト: xmasmc/enigma2-plugins
	def moveMovie(self, param):
		import os
		import threading
		if not param['sRef']:
			return False, _("Missing Parameter: sRef")
		elif not param['dirname']:
			return False, _("Missing Paramter: dirname")

		try:
			force = int(param['force']) if 'force' in param else False
		except Exception:
			force = False

		try:
			background = int(param['background']) if 'background' in param else False
		except Exception:
			background = False

		destdir = param['dirname']
		if not destdir[-1] == '/':
			destdir = destdir + '/'
		service = ServiceReference(param['sRef'])
		result = False

		if service is not None:
			serviceHandler = eServiceCenter.getInstance()
			info = serviceHandler.info(service.ref)
			path = service.ref.getPath()
			name = info and info.getName(service.ref) or _("this recording")
			basedir = '/'.join(path.split('/')[:-1]) + '/'
			basename = path.split('/')[-1]

			if basedir == destdir:
				return False, _("Source and destination folders are the same.")
			elif not os.path.exists(path):
				return False, _("'%s' does not exist in source directory.") % name
			elif not force and os.path.exists(destdir + basename):
				return False, _("'%s' already exists in destination directory '%s', set force=1 to move anyway.") % (basename, destdir)
			elif not os.path.exists(destdir):
				return False, _("Destination dir '%s' does not exist.") % destdir

			# remove known movie suffixes
			wasTs = False
			forcedSuffix = None
			if basename.endswith('.ts'):
				wasTs = True
				basename = basename[:-3]
			elif basename.endswith(('.avi', '.mkv', '.mpg', '.mp4', '.m4v', '.flv', '.mov', '.iso', '.vob')):
				forcedSuffix = basename[-4:]
				basename = basename[:-4]
			elif basename.endswith(('.divx', '.mpeg', '.m2ts')):
				forcedSuffix = basename[-5:]
				basename = basename[:-5]
			else:
				suffix = basename.split('.')[-1]
				return False, _("Movie '%s' has unknown suffix '%s'.") % (name, suffix)

			def moveFunc():
				exists = os.path.exists
				move = os.rename
				errorlist = []
				if wasTs:
					suffixes = ".ts.meta", ".ts.cuts", ".ts.ap", ".ts.sc", ".eit", ".ts", ".jpg"
				else:
					suffixes = "%s.ts.meta" % forcedSuffix, "%s.cuts" % forcedSuffix, forcedSuffix, '.jpg', '.eit'

				for suffix in suffixes:
					src = basedir + basename + suffix
					if exists(src):
						try:
							move(src, destdir + basename + suffix)
						except OSError as ose:
							errorlist.append(str(ose))
				return errorlist

			if background:
				class StupidThread(threading.Thread):
					def __init__(self, fnc):
						threading.Thread.__init__(self)
						self.fnc = fnc
						self.start()
					def run(self):
						self.fnc()
				StupidThread(moveFunc)
				return True, _("Moving Movie '%s' to '%s' in background.") % (name, destdir)
			else:
				errlist = moveFunc()
				if not errlist:
					return True, _("Movie '%s' moved to '%s' without errors.") % (name, destdir)
				else:
					return False, _("%d error while moving Movie '%s' to '%s': %s") % (len(errlist), name, destdir, ',\n'.join(errlist))
		return ( result, _("Illegal Parameter Value: sRef - '%s'") % param['sRef'] )
コード例 #49
0
 def getText(self):
     service = self.source.service
     if isinstance(service, iPlayableServicePtr):
         info = service and service.info()
         ref = None
     else:  # reference
         info = service and self.source.info
         ref = service
     if not info:
         return ""
     if ref:
         nref = resolveAlternate(ref)
         if nref:
             ref = nref
             info = eServiceCenter.getInstance().info(ref)
         transponderraw = info.getInfoObject(
             ref, iServiceInformation.sTransponderData)
         ref = ref.toString().replace("%3a", ":")
     else:
         transponderraw = info.getInfoObject(
             iServiceInformation.sTransponderData)
         ref = info.getInfoString(iServiceInformation.sServiceref)
     if transponderraw:
         transponderdata = ConvertToHumanReadable(transponderraw)
         # retreive onid and tsid from service reference
         [onid, tsid] = [int(x, 16) for x in ref.split(':')[4:6]]
         if not transponderdata["system"]:
             transponderdata["system"] = transponderraw.get(
                 "tuner_type", "None")
         try:
             if "DVB-T" in transponderdata["system"]:
                 return "%s %s-%s %s %d MHz %s" % (
                     transponderdata["system"], tsid, onid,
                     transponderdata["channel"],
                     transponderdata["frequency"] / 1000000 + 0.5,
                     transponderdata["bandwidth"])
             elif "DVB-C" in transponderdata["system"]:
                 return "%s %s-%s %d MHz %d %s %s" % (
                     transponderdata["system"], tsid, onid,
                     transponderdata["frequency"] / 1000 + 0.5,
                     transponderdata["symbol_rate"] / 1000 + 0.5,
                     transponderdata["fec_inner"],
                     transponderdata["modulation"])
             elif "ATSC" in transponderdata["system"]:
                 return "%s %s-%s %d MHz %s" % (
                     transponderdata["system"], tsid, onid,
                     transponderdata["frequency"] / 1000 + 0.5,
                     transponderdata["modulation"])
             return "%s %s-%s %d %s %d %s %s %s" % (
                 transponderdata["system"], tsid, onid,
                 transponderdata["frequency"] / 1000 + 0.5,
                 transponderdata["polarization_abbreviation"],
                 transponderdata["symbol_rate"] / 1000 + 0.5,
                 transponderdata["fec_inner"],
                 transponderdata["modulation"], transponderdata[
                     "detailed_satpos" in self.type and "orbital_position"
                     or "orb_pos"])
         except:
             return ""
     if "://" in ref:
         return _("Stream") + " " + ref.rsplit("://", 1)[1].split("/")[0]
     return ""
コード例 #50
0
def getServiceInfoValue(ref, what):
    info = eServiceCenter.getInstance().info(ref)
    v = ref and info.getInfo(ref, what) or info.getInfo(what)
    if v != iServiceInformation.resIsString:
        return ''
    return ref and info.getInfoString(ref, what) or info.getInfoString(what)
コード例 #51
0
ファイル: ServiceInfo.py プロジェクト: Toysoft/Enigma2-ViX
	def __init__(self, session, menu_path="", serviceref=None):
		Screen.__init__(self, session)
		self.menu_path = menu_path

		self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
		{
			"ok": self.close,
			"cancel": self.close,
			"red": self.close,
			"green": self.ShowECMInformation,
			"yellow": self.ShowServiceInformation,
			"blue": self.ShowTransponderInformation
		}, -1)

		self["infolist"] = ServiceInfoList([])
		self["key_red"] = self["red"] = Label(_("Exit"))
		self["key_green"] = self["green"] = Label(_("ECM Info"))

		self.transponder_info = self.info = self.feinfo = None
		play_service = session.nav.getCurrentlyPlayingServiceReference()
		if serviceref and not play_service and play_service != serviceref:
			screentitle = _("Transponder Information")
			self.type = TYPE_TRANSPONDER_INFO
			self.skinName="ServiceInfoSimple"
			self.transponder_info = eServiceCenter.getInstance().info(serviceref).getInfoObject(serviceref, iServiceInformation.sTransponderData)
			# info is a iStaticServiceInformation, not a iServiceInformation
		else:
			screentitle = _("Service")
			self.type = TYPE_SERVICE_INFO
			service = session.nav.getCurrentService()
			if service:
				self.transponder_info = None
				self.info = service.info()
				self.feinfo = service.frontendInfo()
				if self.feinfo and not self.feinfo.getAll(True):
					self.feinfo = None
					serviceref = play_service
					self.transponder_info = serviceref and eServiceCenter.getInstance().info(serviceref).getInfoObject(serviceref, iServiceInformation.sTransponderData)
			if self.feinfo or self.transponder_info:
				self["actions2"] = ActionMap(["ColorActions"],
				{
					"yellow": self.ShowServiceInformation,
					"blue": self.ShowTransponderInformation
				}, -1)
				self["key_yellow"] = self["yellow"] = Label(_("Service & PIDs"))
				self["key_blue"] = self["blue"] = Label(_("Tuner settings values"))
			else:
				self.skinName="ServiceInfoSimple"

		if config.usage.show_menupath.value == 'large':
			self.menu_path += screentitle
			title = self.menu_path
			self["menu_path_compressed"] = StaticText("")
			self.menu_path += ' / '
		elif config.usage.show_menupath.value == 'small':
			title = screentitle
			condtext = ""
			if self.menu_path and not self.menu_path.endswith(' / '):
				condtext = self.menu_path + " >"
			elif self.menu_path:
				condtext = self.menu_path[:-3] + " >"
			self["menu_path_compressed"] = StaticText(condtext)
			self.menu_path += screentitle + ' / '
		else:
			title = screentitle
			self["menu_path_compressed"] = StaticText("")
		Screen.setTitle(self, title)

		tlist = [ ]
		self.onShown.append(self.ShowServiceInformation)
コード例 #52
0
ファイル: plugin.py プロジェクト: gmonti1/enigma2
    def playEntry(self):
        if len(self.playlist.getServiceRefList()):
            needsInfoUpdate = False
            currref = self.playlist.getServiceRefList()[
                self.playlist.getCurrentIndex()]
            if self.session.nav.getCurrentlyPlayingServiceReference(
            ) is None or currref != self.session.nav.getCurrentlyPlayingServiceReference(
            ) or self.playlist.isStopped():
                self.session.nav.playService(self.playlist.getServiceRefList()[
                    self.playlist.getCurrentIndex()])
                info = eServiceCenter.getInstance().info(currref)
                description = info and info.getInfoString(
                    currref, iServiceInformation.sDescription) or ""
                self["title"].setText(description)
                # display just playing musik on LCD
                idx = self.playlist.getCurrentIndex()
                currref = self.playlist.getServiceRefList()[idx]
                text = self.getIdentifier(currref)
                self.ext = os.path.splitext(text)[1].lower()
                text = ">" + text
                # FIXME: the information if the service contains video (and we should hide our window) should com from the service instead
                if self.ext not in AUDIO_EXTENSIONS and not self.isAudioCD:
                    self.hideAndInfoBar()
                else:
                    needsInfoUpdate = True
                self.summaries.setText(text, 1)

                # get the next two entries
                idx += 1
                if idx < len(self.playlist):
                    currref = self.playlist.getServiceRefList()[idx]
                    text = self.getIdentifier(currref)
                    self.summaries.setText(text, 3)
                else:
                    self.summaries.setText(" ", 3)

                idx += 1
                if idx < len(self.playlist):
                    currref = self.playlist.getServiceRefList()[idx]
                    text = self.getIdentifier(currref)
                    self.summaries.setText(text, 4)
                else:
                    self.summaries.setText(" ", 4)
            else:
                idx = self.playlist.getCurrentIndex()
                currref = self.playlist.getServiceRefList()[idx]
                text = currref.getPath()
                ext = os.path.splitext(text)[1].lower()
                if self.ext not in AUDIO_EXTENSIONS and not self.isAudioCD:
                    self.hideAndInfoBar()
                else:
                    needsInfoUpdate = True

            self.unPauseService()
            if needsInfoUpdate:
                path = self.playlist.getServiceRefList()[
                    self.playlist.getCurrentIndex()].getPath()
                self["coverArt"].updateCoverArt(path)
            else:
                self["coverArt"].showDefaultCover()
            self.readTitleInformation()
コード例 #53
0
    def zap(self):
        def serviceInBouquet(bouquet, serviceHandler, ref):
            servicelist = serviceHandler.list(bouquet)
            if servicelist is not None:
                serviceIterator = servicelist.getNext()
                while serviceIterator.valid():
                    if ref == serviceIterator:
                        # Servicerefs from the EPG don't (can't) have the
                        # channel number set
                        ref.setChannelNum(serviceIterator.getChannelNum())
                        return True
                    serviceIterator = servicelist.getNext()
            return False

        ChannelSelectionInstance = ChannelSelection.instance
        foundService = False
        if ChannelSelectionInstance:
            self.service_types = ChannelSelectionInstance.service_types
            serviceHandler = eServiceCenter.getInstance()
            bqrootstr = ChannelSelectionInstance.bouquet_rootstr
            if config.usage.multibouquet.value:
                rootbouquet = eServiceReference(bqrootstr)
                currentBouquet = ChannelSelectionInstance.getRoot()
                for searchCurrent in (True, False):
                    bouquet = eServiceReference(bqrootstr)
                    bouquetlist = serviceHandler.list(bouquet)
                    if bouquetlist is not None:
                        bouquet = bouquetlist.getNext()
                        while bouquet.valid():
                            if bouquet.flags & (
                                    eServiceReference.isDirectory
                                    | eServiceReference.isInvisible
                            ) == eServiceReference.isDirectory and (
                                    currentBouquet is None or
                                (currentBouquet == bouquet) == searchCurrent):
                                ChannelSelectionInstance.clearPath()
                                ChannelSelectionInstance.setRoot(bouquet)
                                foundService = serviceInBouquet(
                                    bouquet, serviceHandler,
                                    self.currentService.ref)
                                if foundService:
                                    break
                            bouquet = bouquetlist.getNext()
                        if foundService:
                            break
            else:
                rootbouquet = eServiceReference(bqrootstr)
                bouquet = eServiceReference(bqrootstr)
                if bouquet.valid() and bouquet.flags & (
                        eServiceReference.isDirectory | eServiceReference.
                        isInvisible) == eServiceReference.isDirectory:
                    foundService = serviceInBouquet(bouquet, serviceHandler,
                                                    self.currentService.ref)

        if foundService:
            ChannelSelectionInstance.enterPath(rootbouquet)
            ChannelSelectionInstance.enterPath(bouquet)
            ChannelSelectionInstance.saveRoot()
            ChannelSelectionInstance.saveChannel(self.currentService.ref)
            ChannelSelectionInstance.addToHistory(self.currentService.ref)
            NavigationInstance.instance.playService(self.currentService.ref)
        self.close()
コード例 #54
0
ファイル: Navigation.py プロジェクト: trunca/malasuerte
    def __init__(self, nextRecordTimerAfterEventActionAuto=False):
        if NavigationInstance.instance is not None:
            raise NavigationInstance.instance

        NavigationInstance.instance = self
        self.ServiceHandler = eServiceCenter.getInstance()

        import Navigation as Nav
        Nav.navcore = self

        self.pnav = pNavigation()
        self.pnav.m_event.get().append(self.dispatchEvent)
        self.pnav.m_record_event.get().append(self.dispatchRecordEvent)
        self.event = []
        self.record_event = []
        self.currentlyPlayingServiceReference = None
        self.currentlyPlayingServiceOrGroup = None
        self.currentlyPlayingService = None
        self.RecordTimer = None
        for p in plugins.getPlugins(PluginDescriptor.WHERE_RECORDTIMER):
            self.RecordTimer = p()
            if self.RecordTimer:
                break
        if not self.RecordTimer:
            self.RecordTimer = RecordTimer.RecordTimer()
        self.nextRecordTimerAfterEventActionAuto = nextRecordTimerAfterEventActionAuto
        self.__wasTimerWakeup = False
        self.__wasRecTimerWakeup = False
        self.syncCount = 0
        self.__isRestartUI = config.misc.RestartUI.value
        startup_to_standby = config.usage.startup_to_standby.value
        wakeup_time_type = config.misc.prev_wakeup_time_type.value

        wasTimerWakeup = getFPWasTimerWakeup()
        if not wasTimerWakeup:  #work-around for boxes where driver not sent was_timer_wakeup signal to e2
            print "[NAVIGATION] getNextRecordingTime= %s" % self.RecordTimer.getNextRecordingTime(
            )
            print "[NAVIGATION] current Time=%s" % time()
            print "[NAVIGATION] timediff=%s" % abs(
                self.RecordTimer.getNextRecordingTime() - time())

            if time(
            ) <= 31536000:  # check for NTP-time sync, if no sync, wait for transponder time
                self.timesynctimer = eTimer()
                self.timesynctimer.callback.append(self.TimeSynctimer)
                self.timesynctimer.start(5000, True)
                print "[NAVIGATION] wait for time sync"

            elif abs(
                    self.RecordTimer.getNextRecordingTime() - time()
            ) <= 360:  # if there is a recording sheduled in the next 5 mins, set the wasTimerWakeup flag
                wasTimerWakeup = True
                f = open("/tmp/was_timer_wakeup_workaround.txt", "w")
                file = f.write(str(wasTimerWakeup))
                f.close()

        print "[NAVIGATION] wasTimerWakeup = %s" % wasTimerWakeup

        if wasTimerWakeup:
            self.__wasTimerWakeup = True
            if time() <= 31536000:
                self.timesynctimer = eTimer()
                self.timesynctimer.callback.append(self.TimeSynctimer)
                self.timesynctimer.start(5000, True)
                print "[NAVIGATION] wait for time sync"

            elif nextRecordTimerAfterEventActionAuto and abs(
                    self.RecordTimer.getNextRecordingTime() - time()) <= 360:
                self.__wasRecTimerWakeup = True
                print 'RECTIMER: wakeup to standby detected.'
                f = open("/tmp/was_rectimer_wakeup", "w")
                f.write('1')
                f.close()
                # as we woke the box to record, place the box in standby.
                self.standbytimer = eTimer()
                self.standbytimer.callback.append(self.gotostandby)
                self.standbytimer.start(15000, True)
        if config.usage.remote_fallback_import_restart.value:
            ImportChannels()
        if config.misc.RestartUI.value:
            config.misc.RestartUI.value = False
            config.misc.RestartUI.save()
            configfile.save()
        else:
            if config.usage.remote_fallback_import.value and not config.usage.remote_fallback_import_restart.value:
                ImportChannels()
            if startup_to_standby == "yes" or self.__wasTimerWakeup and config.misc.prev_wakeup_time.value and (
                (wakeup_time_type == 0 or wakeup_time_type == 1) or
                (wakeup_time_type == 3 and startup_to_standby == "except")):
                if not Screens.Standby.inTryQuitMainloop:
                    Notifications.AddNotification(Screens.Standby.Standby)
        if config.misc.prev_wakeup_time.value:
            config.misc.prev_wakeup_time.value = 0
            config.misc.prev_wakeup_time.save()
            configfile.save()
コード例 #55
0
ファイル: plugin.py プロジェクト: VytenisP/enigma2-plugins-1
    def updateStatus(self):
        print "[TVCharts] Status Update ..."
        self.DBStatusTimer.stop()

        if not config.plugins.tvcharts.enabled.value or Screens.Standby.inStandby:
            return

        # Get Channelname
        sref = self.session.nav.getCurrentlyPlayingServiceReference()
        if sref is not None:
            ref = eServiceReference(sref.toString())
            ref.setName("")
            serviceHandler = eServiceCenter.getInstance()
            info = serviceHandler.info(ref)
            channel_name = info and info.getName(ref).replace(
                '\xc2\x86', '').replace('\xc2\x87', '').decode(
                    "utf-8", "ignore").encode("utf-8") or ""
            self.serviceref = ref.toString()
        else:
            channel_name = ""
            self.serviceref = ""

        # Get Event Info
        service = self.session.nav.getCurrentService()
        info = service and service.info()
        event = info and info.getEvent(0)
        event_name = event and event.getEventName() or ""
        event_description = ""
        event_begin = 0

        if event is not None:
            curEvent = parseEvent(event)
            event_begin = int(
                curEvent[0]) + (config.recording.margin_before.getValue() * 60)
            event_description = event.getExtendedDescription()

        # Get Box Info
        self.BoxID = iNetwork.getAdapterAttribute("eth0", "mac")
        self.DeviceName = HardwareInfo().get_device_name()
        try:
            from enigma import getEnigmaVersionString
            from boxbranding import getImageVersion, getImageBuild
            self.EnigmaVersion = getEnigmaVersionString()
            self.ImageVersion = getImageVersion() + '.' + getImageBuild()
        except:
            self.EnigmaVersion = about.getEnigmaVersionString()
            self.ImageVersion = about.getVersionString()

        # Get TimerList
        self.timerlist = ""
        if config.plugins.tvcharts.submittimers.value and self.LastTimerlistUpdate <= (
                time() - 1800):
            self.LastTimerlistUpdate = time()
            try:
                for timer in self.recordtimer.timer_list:
                    if timer.disabled == 0 and timer.justplay == 0:
                        self.timerlist += "%s|%s|%s|%s|%s|%s|%s\n" % (
                            timer.eit,
                            str(
                                int(timer.begin) +
                                (config.recording.margin_before.getValue() *
                                 60)),
                            str(
                                int(timer.end) -
                                (config.recording.margin_after.getValue() *
                                 60)), str(timer.service_ref), timer.name,
                            timer.service_ref.getServiceName().replace(
                                '\xc2\x86', '').replace('\xc2\x87', '').decode(
                                    "utf-8",
                                    "ignore").encode("utf-8"), timer.repeated)
            except Exception:
                print "[TVCharts] Error loading timers!"

        # Get Pluginlist
        if config.plugins.tvcharts.submitplugins.value and self.pluginlist == "":
            try:
                os_system(
                    "opkg list_installed | grep enigma2-plugin- > /tmp/plugins.txt"
                )
                for plugin in open('/tmp/plugins.txt', 'r'):
                    self.pluginlist += plugin[0:plugin.find(' - ')] + "\n"
                os_system("rm -f /tmp/plugins.txt")
            except Exception:
                print "[TVCharts] Error loading plugins!"

        # Status Update
        getPage(
            url='http://www.dreambox-plugins.de/feeds/TVCharts/status.php',
            agent="Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)",
            timeout=60,
            method='POST',
            headers={
                'Content-Type': 'application/x-www-form-urlencoded'
            },
            postdata=urlencode({
                'boxid': self.BoxID,
                'devicename': self.DeviceName,
                'imageversion': self.ImageVersion,
                'enigmaversion': self.EnigmaVersion,
                'lastchannel': channel_name,
                'lastevent': event_name,
                'eventdescr': event_description,
                'lastbegin': event_begin,
                'lastserviceref': self.serviceref,
                'timerlist': self.timerlist,
                'pluginlist': self.pluginlist
            })).addErrback(self.updateError)

        # Restart Timer
        self.DBStatusTimer.start(900000, True)
コード例 #56
0
ファイル: FileListmod.py プロジェクト: kingvuplus/o-guitools
    def changeDir(self, directory, select=None):
        self.list = []
        if self.current_directory is None:
            if directory and self.showMountpoints:
                self.current_mountpoint = self.getMountpointLink(directory)
            else:
                self.current_mountpoint = None
        self.current_directory = directory
        directories = []
        files = []
        if directory is None and self.showMountpoints:
            for p in harddiskmanager.getMountedPartitions():
                path = os_path.join(p.mountpoint, '')
                if path not in self.inhibitMounts and not self.inParentDirs(
                        path, self.inhibitDirs):
                    self.list.append(
                        MultiFileSelectEntryComponent(name=p.description,
                                                      absolute=path,
                                                      isDir=True))

            files = []
            directories = []
        elif directory is None:
            files = []
            directories = []
        elif self.useServiceRef:
            root = eServiceReference('2:0:1:0:0:0:0:0:0:0:' + directory)
            if self.additional_extensions:
                root.setName(self.additional_extensions)
            serviceHandler = eServiceCenter.getInstance()
            list = serviceHandler.list(root)
            while 1:
                s = list.getNext()
                if not s.valid():
                    del list
                    break
                if s.flags & s.mustDescent:
                    directories.append(s.getPath())
                else:
                    files.append(s)

            directories.sort()
            files.sort()
        elif fileExists(directory):
            try:
                files = listdir(directory)
            except:
                files = []

            files.sort()
            tmpfiles = files[:]
            for x in tmpfiles:
                if os_path.isdir(directory + x):
                    directories.append(directory + x + '/')
                    files.remove(x)

        if directory is not None and self.showDirectories and not self.isTop:
            if directory == self.current_mountpoint and self.showMountpoints:
                self.list.append(
                    MultiFileSelectEntryComponent(
                        name='<' + _('List of Storage Devices') + '>',
                        absolute=None,
                        isDir=True))
            elif directory != '/' and not (self.inhibitMounts
                                           and self.getMountpoint(directory)
                                           in self.inhibitMounts):
                self.list.append(
                    MultiFileSelectEntryComponent(
                        name='<' + _('Parent Directory') + '>',
                        absolute='/'.join(directory.split('/')[:-2]) + '/',
                        isDir=True))
        if self.showDirectories:
            for x in directories:
                if not (self.inhibitMounts and self.getMountpoint(x)
                        in self.inhibitMounts) and not self.inParentDirs(
                            x, self.inhibitDirs):
                    name = x.split('/')[-2]
                    alreadySelected = False
                    testname = x[:-1]
                    if os_path.islink(testname):
                        my_isLink = True
                    else:
                        my_isLink = False
                    for entry in self.selectedFiles:
                        if entry == x:
                            alreadySelected = True

                    if alreadySelected:
                        self.list.append(
                            MultiFileSelectEntryComponent(name=name,
                                                          absolute=x,
                                                          isDir=True,
                                                          isLink=my_isLink,
                                                          selected=True))
                    else:
                        self.list.append(
                            MultiFileSelectEntryComponent(name=name,
                                                          absolute=x,
                                                          isDir=True,
                                                          isLink=my_isLink,
                                                          selected=False))

        if self.showFiles:
            for x in files:
                if self.useServiceRef:
                    path = x.getPath()
                    name = path.split('/')[-1]
                else:
                    path = directory + x
                    name = x
                if self.matchingPattern is None or re_compile(
                        self.matchingPattern).search(path):
                    alreadySelected = False
                    for entry in self.selectedFiles:
                        if os_path.basename(entry) == x:
                            alreadySelected = True

                    if alreadySelected:
                        self.list.append(
                            MultiFileSelectEntryComponent(name=name,
                                                          absolute=x,
                                                          isDir=False,
                                                          selected=True))
                    else:
                        self.list.append(
                            MultiFileSelectEntryComponent(name=name,
                                                          absolute=x,
                                                          isDir=False,
                                                          selected=False))

        self.l.setList(self.list)
        if select is not None:
            i = 0
            self.moveToIndex(0)
            for x in self.list:
                p = x[0][0]
                if isinstance(p, eServiceReference):
                    p = p.getPath()
                if p == select:
                    self.moveToIndex(i)
                i += 1
コード例 #57
0
 def getInfo(self):
     return self.service and eServiceCenter.getInstance().info(self.service)
コード例 #58
0
    def getServiceNumber(self, ref):

        def searchHelper(serviceHandler, num, bouquet):
            servicelist = serviceHandler.list(bouquet)
            if servicelist is not None:
                while True:
                    s = servicelist.getNext()
                    if not s.valid():
                        break
                    if not s.flags & (eServiceReference.isMarker | eServiceReference.isDirectory):
                        num += 1
                        if s == ref:
                            return (s, num)

            return (None, num)

        if isinstance(ref, eServiceReference):
            isRadioService = ref.getData(0) in (2, 10)
            lastpath = isRadioService and config.radio.lastroot.value or config.tv.lastroot.value
            if lastpath.find('FROM BOUQUET') == -1:
                if 'FROM PROVIDERS' in lastpath:
                    return ('P', 'Provider')
                if 'FROM SATELLITES' in lastpath:
                    return ('S', 'Satellites')
                if ') ORDER BY name' in lastpath:
                    return ('A', 'All Services')
                return (0, 'N/A')
            try:
                acount = config.plugins.NumberZapExt.enable.value and config.plugins.NumberZapExt.acount.value
            except:
                acount = False

            rootstr = ''
            for x in lastpath.split(';'):
                if x != '':
                    rootstr = x

            serviceHandler = eServiceCenter.getInstance()
            if acount is True or not config.usage.multibouquet.value:
                bouquet = eServiceReference(rootstr)
                service, number = searchHelper(serviceHandler, 0, bouquet)
            else:
                if isRadioService:
                    bqrootstr = '1:7:2:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.radio" ORDER BY bouquet'
                else:
                    bqrootstr = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.tv" ORDER BY bouquet'
                number = 0
                cur = eServiceReference(rootstr)
                bouquet = eServiceReference(bqrootstr)
                bouquetlist = serviceHandler.list(bouquet)
                if bouquetlist is not None:
                    while True:
                        bouquet = bouquetlist.getNext()
                        if not bouquet.valid():
                            break
                        if bouquet.flags & eServiceReference.isDirectory:
                            service, number = searchHelper(serviceHandler, number, bouquet)
                            if service is not None and cur == bouquet:
                                break

            if service is not None:
                info = serviceHandler.info(bouquet)
                name = info and info.getName(bouquet) or ''
                return (number, name)
        return (0, '')
コード例 #59
0
	def load(self, root, filter_tags):
		# this lists our root service, then building a
		# nice list
		self.list = [ ]
		serviceHandler = eServiceCenter.getInstance()
		numberOfDirs = 0

		reflist = serviceHandler.list(root)
		if reflist is None:
			print "listing of movies failed"
			return
		realtags = set()
		tags = {}
		rootPath = os.path.normpath(root.getPath())
		parent = None
		# Don't navigate above the "root"
		if len(rootPath) > 1 and (os.path.realpath(rootPath) != config.movielist.root.value):
			parent = os.path.split(os.path.normpath(rootPath))[0]
			currentfolder = os.path.normpath(rootPath) + '/'
			if parent and (parent not in defaultInhibitDirs) and not currentfolder.endswith(config.usage.default_path.value):
				# enigma wants an extra '/' appended
				if not parent.endswith('/'):
					parent += '/'
				ref = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + parent)
				ref.flags = eServiceReference.flagDirectory
				self.list.append((ref, None, 0, -1))
				numberOfDirs += 1
		while 1:
			serviceref = reflist.getNext()
			if not serviceref.valid():
				break
			if config.ParentalControl.servicepinactive.value and config.ParentalControl.storeservicepin.value != "never":
				from Components.ParentalControl import parentalControl
				if not parentalControl.sessionPinCached and parentalControl.isProtected(serviceref):
					continue
			info = serviceHandler.info(serviceref)
			if info is None:
				info = justStubInfo
			begin = info.getInfo(serviceref, iServiceInformation.sTimeCreate)
			if serviceref.flags & eServiceReference.mustDescent:
				dirname = info.getName(serviceref)
				if not dirname.endswith('.AppleDouble/') and not dirname.endswith('.AppleDesktop/') and not dirname.endswith('.AppleDB/') and not dirname.endswith('Network Trash Folder/') and not dirname.endswith('Temporary Items/'):
					self.list.append((serviceref, info, begin, -1))
					numberOfDirs += 1
				continue
			# convert space-seperated list of tags into a set
			this_tags = info.getInfoString(serviceref, iServiceInformation.sTags).split(' ')
			name = info.getName(serviceref)

			# OSX put a lot of stupid files ._* everywhere... we need to skip them
			if name[:2] == "._":
				continue

			if this_tags == ['']:
				# No tags? Auto tag!
				this_tags = name.replace(',',' ').replace('.',' ').replace('_',' ').replace(':',' ').split()
			else:
				realtags.update(this_tags)
			for tag in this_tags:
				if len(tag) >= 4:
					if tags.has_key(tag):
						tags[tag].append(name)
					else:
						tags[tag] = [name]
			# filter_tags is either None (which means no filter at all), or
			# a set. In this case, all elements of filter_tags must be present,
			# otherwise the entry will be dropped.
			if filter_tags is not None:
				this_tags_fullname = [" ".join(this_tags)]
				this_tags_fullname = set(this_tags_fullname)
				this_tags = set(this_tags)
				if not this_tags.issuperset(filter_tags) and not this_tags_fullname.issuperset(filter_tags):
# 					print "Skipping", name, "tags=", this_tags, " filter=", filter_tags
					continue

			self.list.append((serviceref, info, begin, -1))

		self.firstFileEntry = numberOfDirs
		self.parentDirectory = 0
		
		self.list.sort(key=self.buildBeginTimeSortKey)
		if self.sort_type == MovieList.SORT_ALPHANUMERIC:
			self.list = sorted(self.list[:numberOfDirs], key=self.buildAlphaNumericSortKey) + sorted(self.list[numberOfDirs:], key=self.buildAlphaNumericSortKey)
		elif self.sort_type == MovieList.SORT_ALPHANUMERIC_REVERSE:
			self.list = sorted(self.list[:numberOfDirs], key=self.buildAlphaNumericSortKey, reverse = True) + sorted(self.list[numberOfDirs:], key=self.buildAlphaNumericSortKey, reverse = True)
		elif self.sort_type == MovieList.SORT_ALPHANUMERIC_FLAT:
			self.list.sort(key=self.buildAlphaNumericFlatSortKey)
		elif self.sort_type == MovieList.SORT_ALPHANUMERIC_FLAT_REVERSE:
			self.list.sort(key=self.buildAlphaNumericFlatSortKey, reverse = True)
		elif self.sort_type == MovieList.SORT_RECORDED:
			self.list = sorted(self.list[:numberOfDirs], key=self.buildBeginTimeSortKey) + sorted(self.list[numberOfDirs:], key=self.buildBeginTimeSortKey)
		elif self.sort_type == MovieList.SORT_RECORDED_REVERSE:
			self.list = sorted(self.list[:numberOfDirs], key=self.buildBeginTimeSortKey, reverse = True) + sorted(self.list[numberOfDirs:], key=self.buildBeginTimeSortKey, reverse = True)
		elif self.sort_type == MovieList.SHUFFLE:
			dirlist = self.list[:numberOfDirs]
			shufflelist = self.list[numberOfDirs:]
			random.shuffle(shufflelist)
			self.list = dirlist + shufflelist
		
		for x in self.list:
			if x[1]:
				tmppath = x[1].getName(x[0])[:-1] if x[1].getName(x[0]).endswith('/') else x[1].getName(x[0])
				if tmppath.endswith('.Trash'):
					self.list.insert(0, self.list.pop(self.list.index(x)))
					break

		if self.root and numberOfDirs > 0:
			rootPath = os.path.normpath(self.root.getPath())
			if not rootPath.endswith('/'):
				rootPath += '/'
			if rootPath != parent:
				# with new sort types directories may be in between files, so scan whole
				# list for parentDirectory index. Usually it is the first one anyway
				for index, item in enumerate(self.list):
					if item[0].flags & eServiceReference.mustDescent:
						itempath = os.path.normpath(item[0].getPath())
						if not itempath.endswith('/'):
							itempath += '/'
						if itempath == rootPath:
							self.parentDirectory = index
							break
		self.root = root
		# finally, store a list of all tags which were found. these can be presented
		# to the user to filter the list
		# ML: Only use the tags that occur more than once in the list OR that were
		# really in the tag set of some file.

		# reverse the dictionary to see which unique movie each tag now references
		rtags = {}
		for tag, movies in tags.items():
			if (len(movies) > 1) or (tag in realtags):
				movies = tuple(movies) # a tuple can be hashed, but a list not
				item = rtags.get(movies, [])
				if not item: rtags[movies] = item
				item.append(tag)
		self.tags = {}
		for movies, tags in rtags.items():
			movie = movies[0]
			# format the tag lists so that they are in 'original' order
			tags.sort(key = movie.find)
			first = movie.find(tags[0])
			last = movie.find(tags[-1]) + len(tags[-1])
			match = movie
			start = 0
			end = len(movie)
			# Check if the set has a complete sentence in common, and how far
			for m in movies[1:]:
				if m[start:end] != match:
					if not m.startswith(movie[:last]):
						start = first
					if not m.endswith(movie[first:]):
						end = last
					match = movie[start:end]
					if m[start:end] != match:
						match = ''
						break
			if match:
				self.tags[match] = set(tags)
				continue
			else:
				match = ' '.join(tags)
				if len(match) > 2: #Omit small words
					self.tags[match] = set(tags)
コード例 #60
0
def getStatusInfo(self):
    # Get Current Volume and Mute Status
    vcontrol = eDVBVolumecontrol.getInstance()
    statusinfo = {
        'volume': vcontrol.getVolume(),
        'muted': vcontrol.isMuted(),
        'transcoding': getTranscodingSupport(),
        'currservice_filename': "",
        'currservice_id': -1,
        'state': {
            'standby': False,
            'recording': False
        }
    }

    # Get currently running Service
    event = None
    serviceref = self.session.nav.getCurrentlyPlayingServiceReference()
    serviceref_string = None
    currservice_station = None

    if serviceref is not None:
        serviceHandler = eServiceCenter.getInstance()
        serviceHandlerInfo = serviceHandler.info(serviceref)

        service = self.session.nav.getCurrentService()
        serviceinfo = service and service.info()
        event = serviceinfo and serviceinfo.getEvent(0)
        serviceref_string = serviceref.toString()
        currservice_station = mangle_epg_text(
            serviceHandlerInfo.getName(serviceref))
    else:
        event = None
        serviceHandlerInfo = None

    if event is not None:
        # (begin, end, name, description, eit)
        curEvent = parseEvent(event)
        margin_before = config.recording.margin_before.value
        margin_after = config.recording.margin_after.value
        begin_timestamp = int(curEvent[0]) + (margin_before * 60)
        end_timestamp = int(curEvent[1]) - (margin_after * 60)
        statusinfo['currservice_name'] = mangle_epg_text(curEvent[2])
        statusinfo['currservice_serviceref'] = serviceref_string
        statusinfo['currservice_begin'] = time.strftime(
            "%H:%M", (time.localtime(begin_timestamp)))
        statusinfo['currservice_begin_timestamp'] = begin_timestamp
        statusinfo['currservice_end'] = time.strftime(
            "%H:%M", (time.localtime(end_timestamp)))
        statusinfo['currservice_end_timestamp'] = end_timestamp
        statusinfo['currservice_description'] = curEvent[3]
        statusinfo['currservice_station'] = currservice_station

        if statusinfo['currservice_serviceref'].startswith('1:0:0'):
            fn = '/' + '/'.join(serviceref_string.split("/")[1:])
            statusinfo['currservice_filename'] = fn

        statusinfo['currservice_fulldescription'] = mangle_epg_text(
            event.getExtendedDescription())
        statusinfo['currservice_id'] = curEvent[4]
    else:
        statusinfo['currservice_name'] = "N/A"
        statusinfo['currservice_begin'] = ""
        statusinfo['currservice_end'] = ""
        statusinfo['currservice_description'] = ""
        statusinfo['currservice_fulldescription'] = "N/A"

    if serviceref:
        statusinfo['currservice_serviceref'] = serviceref_string
        if serviceHandlerInfo:
            statusinfo['currservice_station'] = currservice_station
        elif serviceref_string.find("http") != -1:
            statusinfo['currservice_station'] = serviceref_string.replace(
                '%3a', ':')[serviceref_string.find("http"):]
        else:
            statusinfo['currservice_station'] = "N/A"

    # Get Standby State
    from Screens.Standby import inStandby
    statusinfo['state']['standby'] = inStandby is not None
    if statusinfo['state']['standby'] is False:
        statusinfo['inStandby'] = "false"
    else:
        statusinfo['inStandby'] = "true"

    # Get recording state
    recs = NavigationInstance.instance.getRecordings()
    statusinfo['state']['recording'] = len(recs) > 0
    if recs:
        statusinfo['Recording_list'] = "\n"
        for timer in NavigationInstance.instance.RecordTimer.timer_list:
            if timer.state == TimerEntry.StateRunning:
                if not timer.justplay:
                    s_name = timer.service_ref.getServiceName()
                    label = mangle_epg_text(s_name) + ": " + timer.name + "\n"
                    statusinfo['Recording_list'] += label

    if statusinfo['state']['recording']:
        statusinfo['isRecording'] = "true"
    else:
        statusinfo['isRecording'] = "false"

    return statusinfo