def runBitrate(self): os.system('killall -9 bitrate > /dev/null 2>&1') if isImageType('vti'): demux = 2 else: adapter = 0 demux = 0 try: stream = self.source.service.stream() if stream: streamdata = stream.getStreamingData() if streamdata: if 'demux' in streamdata: demux = streamdata['demux'] if demux < 0: demux = 0 if 'adapter' in streamdata: adapter = streamdata["adapter"] if adapter < 0: adapter = 0 except: pass info = self.source.service.info() vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) if vpid >= 0 and apid >= 0: if isImageType('vti'): cmd = 'bitrate %i %i %i' % ( demux, vpid, vpid ) else: cmd = 'bitrate %i %i %i %i' % ( adapter, demux, vpid, vpid ) print "bitrate class start", cmd self.running = 2 if DBG: j00zekDEBUG('starting "%s"' % cmd) self.container.execute(cmd)
def getText(self): time = self.source.time if time is None: return "" t = localtime(time) position = int(config.plugins.j00zekCC.clockVFDpos.value) if self.TYPE == self.VFDstdby: self.fmt_string = config.plugins.j00zekCC.clockVFDstdby.value ClockText = strftime(self.fmt_string, t).replace('ą', 'a').replace( 'Ś', 'S').replace('ś', 's').replace('ź', 'z') ClockTextLen = len(ClockText) if DBG: j00zekDEBUG('[j00zekBlinkingClock:getText] len(%s) = %s' % (ClockText, ClockTextLen)) if self.TYPE == self.VFDstdby and ClockTextLen <= self.VFDsize: ClockText = ClockText.replace(":", self.CHAR) if position == 2 or position == 3: Spaces = self.VFDsize - ClockTextLen if Spaces > 0: if position == 2: #center ClockText = " " * int(Spaces / 2) + ClockText elif position == 3: #right ClockText = " " * Spaces + ClockText return ClockText
def getPiconName(serviceName, selfPiconType): if DBG: j00zekDEBUG('[j00zekPicons:getPiconName] >>>') name = 'unknown' sname = '_'.join(GetWithAlternative(serviceName).split(':', 10)[:10]) pngname = findPicon(sname, selfPiconType) if not pngname: fields = sname.split('_', 3) isChanged = False if len(fields) > 2 and fields[2] != '2' and fields[2] != '1': fields[2] = '1' isChanged = True if len(fields) > 0 and fields[0] == '4097': fields[0] = '1' isChanged = True if isChanged == True: pngname = findPicon('_'.join(fields), selfPiconType) if not pngname: name = ServiceReference(serviceName).getServiceName() name = unicodedata.normalize('NFKD', unicode(name, 'utf_8', errors='ignore')).encode('ASCII', 'ignore') name = re.sub('[^a-z0-9]', '', name.replace('&', 'and').replace('+', 'plus').replace('*', 'star').lower()) if len(name) > 0: pngname = findPicon(name, selfPiconType) if not pngname and len(name) > 2 and name.endswith('hd'): pngname = findPicon(name[:-2], selfPiconType) if DBG: j00zekDEBUG('[j00zekPicons:getPiconName] serviceName=%s, picon=%s, %s, piconFile=%s, selfPiconType=%s' %(str(serviceName), sname, name, str(pngname), selfPiconType) ) return pngname
def appClosed(self, retval): if DBG: j00zekDEBUG("[j00zekOPKGversionBHcheck:appClosed] retval=%s, retstr='%s'" % (str(retval), self.retstr)) if self.retstr.find('enigma2-plugin-skins--j00zeks-blackharmonyfhd') >= 0: global BlackHarmonyVersion BlackHarmonyVersion = self.retstr.replace('enigma2-plugin-skins--j00zeks-blackharmonyfhd','').split('-')[1].strip() self.retstr = '' if DBG: j00zekDEBUG("[j00zekOPKGversionBHcheck:appClosed] BlackHarmonyVersion='%s'" % BlackHarmonyVersion)
def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) if type == "FanInfo": self.type = self.FanInfo elif type == "FanInfoHeader": self.type = self.FanInfoHeader elif type == "TempInfo": self.type = self.TempInfo elif type == "TempInfoHeader": self.type = self.TempInfoHeader self.poll_interval = 2000 self.poll_enabled = True if fileExists("/proc/stb/fp/fan_speed"): self.FanHeader = 'FAN:' else: self.FanHeader = '' self.TempPath = '' self.TempHeader = '' self.TempUnit = 'C' for myPath in ( '/proc/stb/sensors/temp0/value', '/sys/devices/virtual/thermal/thermal_zone0/temp', '/proc/stb/fp/temp_sensor', '/proc/stb/fp/temp_sensor_avs'): if fileExists(myPath): try: open(myPath).read() #check if it can be read self.TempPath = myPath except Exception, e: if DBG: j00zekDEBUG("[BlackHarmonyFanTempInfo:__init__] Exception '%s'" % str(e)) break
def checkOPKG(self): if DBG: j00zekDEBUG('[j00zekOPKGversionBHcheck:checkOPKG] >>>') self.retstr = '' cmd=[] cmd.append('opkg update > /dev/null') cmd.append('opkg list-installed|grep enigma2-plugin-skins--j00zeks-blackharmonyfhd') self.container.execute(";".join(cmd))
def addPath(self, value): if DBG: j00zekDEBUG('[j00zekPicons:addPath] %s' % value) global searchPaths if not value.endswith('/'): value += '/' if value not in searchPaths: searchPaths.append(value)
def onPartitionChange(why, part): if DBG: j00zekDEBUG('[j00zekPicons] onPartitionChange>>>') global searchPaths if why == 'add' and part.mountpoint not in searchPaths: addPiconPath(part.mountpoint) elif why == 'remove' and part.mountpoint in searchPaths: searchPaths.remove(part.mountpoint)
def dataAvail(self, str): if DBG: j00zekDEBUG( "[j00zekBitrate_BH:dataAvail] >>> str '%s'\n\tself.remainingdata='%s'" % (str, self.remainingdata)) str = self.remainingdata + str newlines = str.split('\n') if len( newlines[-1] ): #checks if last line contains any data, it will be used next time if so self.remainingdata = newlines[-1] newlines = newlines[0:-1] else: self.remainingdata = '' for line in newlines: if len(line): self.datalines.append(line) if len(self.datalines) >= 2: try: self.vmin, self.vmax, self.vavg, self.vcur = [ int(x) for x in self.datalines[0].split(' ') ] self.amin, self.amax, self.aavg, self.acur = [ int(x) for x in self.datalines[1].split(' ') ] except Exception: pass self.datalines = [] Converter.changed(self, (self.CHANGED_POLL, ))
def dataError(error=''): if DBG: j00zekDEBUG( "[j00zekSun:getWebData] Error downloading data %s, trying again" % str(error)) self.checkTimer.start(60000, True) #try again after a minute return
def getIconFilename(self): phaseDict = phase(get_julian_datetime(datetime.datetime.now())) retTXT = self.myRound(phaseDict['phase'] * 100, 5) if DBG: j00zekDEBUG("[j00zekMoon:getIconFilename] phaseIcon: %s" % (retTXT)) return '%s.png' % str(retTXT)
def loadPNGsAnim(self, animPath): if animPath == self.pixmaps: return False if os.path.exists(animPath): self.pixmaps = animPath pngfiles = sorted([f for f in os.listdir(self.pixmaps) if (os.path.isfile(os.path.join(self.pixmaps, f)) and f.endswith(".png"))]) self.pics = [] self.doAnim = False for x in pngfiles: if DBG: j00zekDEBUG('[j00zekPiconAnimation]]:[loadPNGsAnim] read image %s' % os.path.join(self.pixmaps, x)) self.pics.append(LoadPixmap(os.path.join(self.pixmaps, x))) if len(self.pics) > 0: self.count = len(self.pics) self.doAnim = True if os.path.exists(os.path.join(animPath, '.ctrl')): with open(os.path.join(animPath, '.ctrl')) as cf: try: myDelay=cf.readline().strip() cf.close() self.pixdelay = int(myDelay.split('=')[1]) if self.pixdelay < 40: self.pixdelay = 40 except Exception as e: if DBG: j00zekDEBUG('[j00zekPiconAnimation]:[loadPNGsAnim] Exception "%s" loading .ctrl' % str(e)) if DBG: j00zekDEBUG('[j00zekPiconAnimation]:[loadPNGsAnim] Loaded from path=%s, pics=%s, pixdelay=%s, step=%s' % (self.pixmaps, self.count, self.pixdelay, self.pixstep)) return True else: if DBG: j00zekDEBUG('[j00zekPiconAnimation]:[loadPNGsAnim] No *.png in given path "%s".' % (animPath)) else: if DBG: j00zekDEBUG('[j00zekPiconAnimation]:[loadPNGsAnim] Path "%s" does NOT exist.' % (animPath)) return False
def getText(self): phaseDict = phase(get_julian_datetime(datetime.datetime.now())) if self.type == self.PHASE: retTXT = MoonPhasesDict[phase_string(phaseDict['phase'])] if DBG: j00zekDEBUG("[j00zekMoon:getText] currentPhase: %s" % (retTXT)) elif self.type == self.ICON: retTXT = self.myRound(phaseDict['phase'] * 100, 5) if DBG: j00zekDEBUG("[j00zekMoon:getText] phaseIcon: %s" % (retTXT)) elif self.type == self.LUMINATION: retTXT = phaseDict['illuminated'] * 100 retTXT = str(round(retTXT, 1)) + '%' if DBG: j00zekDEBUG("[j00zekMoon:getText] moon Lumination: %s" % (retTXT)) elif self.type == self.LUMINATION3: retTXT = phaseDict['illuminated'] * 100 retTXT = str(round(retTXT, 3)) + '%' if DBG: j00zekDEBUG("[j00zekMoon:getText] moon Lumination3: %s" % (retTXT)) else: if DBG: j00zekDEBUG("[j00zekMoon:getText] Unknown type requested") retTXT = "---" return str(retTXT)
def getData(self, request): if DBG: j00zekDEBUG("[j00zekLCD4KODI:getData] request = '%s'" % str(request)) response = self.kodi.getState(request) if DBG: j00zekDEBUG('[j00zekLCD4KODI:getData] response=%s' % response) return response
def checkOPKG(self): if DBG: j00zekDEBUG('[j00zekOPKGupgradeCheck:checkOPKG] >>>') self.retstr = '' cmd = [] cmd.append('opkg update > /dev/null') cmd.append('opkg list-upgradable') self.container.execute(";".join(cmd))
def changed(self, what): global KODIstateTable prevState = KODIstateTable if what[0] == self.CHANGED_POLL and not self.isSuspended and not self.running: self.running = True self.checkState() self.running = False if DBG: j00zekDEBUG("[j00zekLCD4KODI:changed]") if self.hideWhenNotplaying and len(self.downstream_elements): if KODIstateTable['isPlaying']: self.downstream_elements[0].visible = True else: self.downstream_elements[0].visible = False #LCDbrightness if KODIstateTable['isPlaying']: stateTxT = 'isPlaying' elif not KODIstateTable['isIdle']: stateTxT = 'isNOTidle' elif KODIstateTable['powerOn']: stateTxT = 'powerOn' elif not KODIstateTable['powerOn']: stateTxT = 'powerOff' else: stateTxT = 'unknown' setLCDbrightness(stateTxT) if DBG: j00zekDEBUG("[j00zekLCD4KODI:changed] KODIstate='%s'" % stateTxT) self.downstream_elements.changed(what)
def getWebData(self): if DBG: j00zekDEBUG('[j00zekSun:getWebData] >>>') self.checkTimer.stop() def dataError(error=''): if DBG: j00zekDEBUG( "[j00zekSun:getWebData] Error downloading data %s, trying again" % str(error)) self.checkTimer.start(60000, True) #try again after a minute return def readData(data): if DBG: j00zekDEBUG("[j00zekSun:getWebData] >>> Received data: '%s'" % str(data)) global TWISTED, Position try: Position = json.loads(data.strip()[1:-1]) if DBG: j00zekDEBUG("latitude='%s'" % Position['latitude']) j00zekDEBUG("longitude='%s'" % Position['longitude']) except Exception, e: j00zekDEBUG("[j00zekSun:getWebData] >>> Exception: '%s'" % str(e))
def onPartitionChange(why, part): if DBG: j00zekDEBUG('>>>') global searchPaths if why == 'add' and part.mountpoint not in searchPaths: addPiconPath(part.mountpoint) elif why == 'remove' and part.mountpoint in searchPaths: searchPaths.remove(part.mountpoint)
def doHide(self): if self.visible: self.visible = False if DBG: j00zekDEBUG( "[j00zekAccellPixmap:doHide] cover visible %s self.hide" % self.visible) self.hide()
def doShow(self): if not self.visible: self.visible = True if DBG: j00zekDEBUG( "[j00zekAccellPixmap:doShow] cover visible %s self.show" % self.visible) self.show()
def doSuspend(self, suspended): if DBG: j00zekDEBUG('[j00zekPiconAnimation]:[doSuspend] >>> suspended=%s' % suspended) if suspended: self.changed((self.CHANGED_CLEAR, )) else: self.changed((self.CHANGED_DEFAULT, ))
def doSuspend(self, suspended): if DBG: j00zekDEBUG('[j00zekLCD4KODI] doSuspend(%s) >>> ' % suspended) if suspended == 1: self.poll_enabled = False self.isSuspended = True else: self.poll_enabled = True self.isSuspended = False
def __init__(self, arg): Converter.__init__(self, arg) if DBG: j00zekDEBUG('j00zekRefreshBingPicOfTheDay(Converter).__init__ >>>') self.Init = True self.checkTimer = eTimer() self.checkTimer.callback.append(self.refreshPic) self.checkTimer.start(10000, True)
def clearValues(self, *args): #invoked by appClosed & kill from suspend if DBG: j00zekDEBUG("[j00zekBitrate_BH:clearValues] >>>") self.isRunning = False self.vmin = self.vmax = self.vavg = self.vcur = 0 self.amin = self.amax = self.aavg = self.acur = 0 self.remainingdata = '' self.datalines = [] Converter.changed(self, (self.CHANGED_POLL, ))
def start(self): if self.source.service and self.running == 1: self.runTimer.start(600, True) else: if DBG: j00zekDEBUG("bitrate class start po else %s" % str(self.running)) if self.running == 1: if DBG: j00zekDEBUG('self.timer.start(300, True)') #print "bitrate class setup timer" self.timer.start(300, True)
def doSuspend(self, suspended): if DBG: j00zekDEBUG("[j00zekBitrate_BH:suspended] >>> self.isSuspended=%s, suspended=%s" % (self.isSuspended,suspended)) if suspended == 0: self.isSuspended = False self.StartTimer.start(100, True) else: self.StartTimer.stop() self.isSuspended = True self.myConsole.ePopen('killall -9 bitrate', self.clearValues )
def appClosed(self, retval): if DBG: j00zekDEBUG( "[j00zekBitrate_BH:appClosed] >>> retval=%s, isSuspended=%s" % (retval, self.isSuspended)) if self.isSuspended == True: self.clearValues() else: self.runTimer.start(100, True)
def refreshPic(self): if DBG: j00zekDEBUG( 'j00zekRefreshBingPicOfTheDay(Converter).refreshPic >>>') if self.Init == True: self.checkTimer.stop() self.Init = False self.checkTimer.start( 86400000) #check once a day 86400000 = 1000ms * 60 * 60 * 24 getPicOfTheDay()
def initPiconPaths(): if DBG: j00zekDEBUG('[j00zekPiconAnimation]:[initPiconPaths] >>>') for part in harddiskmanager.getMountedPartitions(): addPiconPath(part.mountpoint) if os.path.exists("/proc/mounts"): with open("/proc/mounts", "r") as f: for line in f: if line.startswith('/dev/sd'): mountpoint = line.split(' ')[1] addPiconPath(mountpoint)
def loadPNGsSubFolders(self, animPath): self.picsFolder = [] if len(self.pics) == 0 and os.path.exists(animPath): picsFolder = [f for f in os.listdir(animPath) if os.path.isdir(os.path.join(animPath, f))] for x in picsFolder: for f in os.listdir(os.path.join(animPath, x)): if f.endswith(".png"): self.picsFolder.append(os.path.join(animPath, x)) if DBG: j00zekDEBUG('[j00zekPiconAnimation]]:[loadPNGsSubFolders] found *.png in subfolder "%s"' % os.path.join(animPath, x)) break
def initPiconPaths(): for part in harddiskmanager.getMountedPartitions(): if DBG: j00zekDEBUG('[j00zekPicons]:[initPiconPaths] MountedPartitions:' + part.mountpoint) addPiconPath(part.mountpoint) if pathExists("/proc/mounts"): with open("/proc/mounts", "r") as f: for line in f: if line.startswith('/dev/sd'): mountpoint = line.split(' ')[1] if DBG: j00zekDEBUG('[j00zekPicons]:[initPiconPaths] mounts:' + mountpoint) addPiconPath(mountpoint)
def loadPNGsSubFolders(self, animPath): self.animName = os.path.basename(os.path.normpath(animPath)) self.animationsFoldersList = [] if len(self.FramesList) == 0 and os.path.exists(animPath): picsFolder = [f for f in os.listdir(animPath) if (os.path.isdir(os.path.join(animPath, f)) and not f.endswith(".off"))] for x in picsFolder: for f in os.listdir(os.path.join(animPath, x)): if f.endswith(".png"): self.animationsFoldersList.append(os.path.join(animPath, x)) if DBG: j00zekDEBUG('[j00zekPiconAnimation]]:[loadPNGsSubFolders] found *.png in subfolder "%s"' % os.path.join(animPath, x)) break
def initPiconPaths(): for part in harddiskmanager.getMountedPartitions(): if DBG: j00zekDEBUG('MountedPartitions:' + part.mountpoint) addPiconPath(part.mountpoint) if pathExists("/proc/mounts"): with open("/proc/mounts", "r") as f: for line in f: if line.startswith('/dev/sd'): mountpoint = line.split(' ')[1] if DBG: j00zekDEBUG('mounts:' + mountpoint) addPiconPath(mountpoint)
def getBoolean(self): retBool = False if self.requested == self.HIDEWHENPLAYING: retBool = not KODIstateTable['isPlaying'] elif self.requested == self.SHOWHENAPLAYING: retBool = KODIstateTable['isPlaying'] if DBG: j00zekDEBUG( "[j00zekLCD4KODI:getBoolean] self.requested=%s, retBool='%s'" % (self.requested, retBool)) return retBool
def findPicon(serviceName): if DBG: j00zekDEBUG('serviceName=' + str(serviceName)) global lastPiconsPathsDict, piconType pngname = None piconTypeName='%s%s' % (piconType,serviceName) if piconTypeName in lastPiconsDict: pngname = lastPiconsDict[piconTypeName] else: for path in searchPaths: sPath = path + piconType + '/' if pathExists(sPath + serviceName + '.png'): pngname = sPath + serviceName + '.png' lastPiconsDict[piconTypeName] = pngname break return pngname
def getPiconName(serviceName): if DBG: j00zekDEBUG('serviceName=' + str(serviceName)) sname = '_'.join(GetWithAlternative(serviceName).split(':', 10)[:10]) pngname = findPicon(sname) if not pngname: fields = sname.split('_', 3) if len(fields) > 2 and fields[2] != '2': fields[2] = '1' if len(fields) > 0 and fields[0] == '4097': fields[0] = '1' pngname = findPicon('_'.join(fields)) if not pngname: name = ServiceReference(serviceName).getServiceName() name = unicodedata.normalize('NFKD', unicode(name, 'utf_8', errors='ignore')).encode('ASCII', 'ignore') name = re.sub('[^a-z0-9]', '', name.replace('&', 'and').replace('+', 'plus').replace('*', 'star').lower()) if len(name) > 0: pngname = findPicon(name) if not pngname and len(name) > 2 and name.endswith('hd'): pngname = findPicon(name[:-2]) return pngname
def changed(self, what): if self.instance: pngname = '' try: if not what[0] is self.CHANGED_CLEAR: pngname = getPiconName(self.source.text) if pngname is None: pngname = findPicon('picon_default') elif not pathExists(pngname): pngname = findPicon('picon_default') if self.pngname != pngname: if pngname: self.instance.setScale(1) self.instance.setPixmapFromFile(pngname) self.instance.show() else: self.instance.hide() self.pngname = pngname if DBG: j00zekDEBUG('pngname=' + str(pngname)) except Exception, e: pass
def dataAvail(self, str): str = self.remainingdata + str newlines = str.split('\n') if len(newlines[-1]): self.remainingdata = newlines[-1] newlines = newlines[0:-1] else: self.remainingdata = '' for line in newlines: if len(line): self.datalines.append(line) if len(self.datalines) >= 2: try: self.vmin, self.vmax, self.vavg, self.vcur = [int(x) for x in self.datalines[0].split(' ')] self.amin, self.amax, self.aavg, self.acur = [int(x) for x in self.datalines[1].split(' ')] except: if DBG: j00zekDEBUG("bitrate class dataAvail except") self.datalines = [] #print "bitrate class new data" Converter.changed(self, (self.CHANGED_POLL,))
def addPiconPath(mountpoint): if DBG: j00zekDEBUG('mountpoint=' + mountpoint) if mountpoint == '/': return global searchPaths try: if mountpoint not in searchPaths: if DBG: j00zekDEBUG('mountpoint not in searchPaths') for pp in os.listdir(mountpoint): lpp = os.path.join(mountpoint, pp) + '/' if pp.find('picon') >= 0 and os.path.isdir(lpp): #any folder *picon* for pf in os.listdir(lpp): if pf.endswith('.png') and mountpoint not in searchPaths: #if containf *.png if mountpoint.endswith('/'): searchPaths.append(mountpoint) else: searchPaths.append(mountpoint + '/') if DBG: j00zekDEBUG('mountpoint appended to searchPaths') break else: continue break except Exception, e: if DBG: j00zekDEBUG('Exception:' + str(e))
def appClosed(self, retval): self.clearValues() if DBG: j00zekDEBUG("bitrate class bitrateStopped, retval=%s" % str(retval))