def getWebChannels(self): result = None try: result = self.sp.cache.getWebChannels() except Exception as e: logInfo("Exception in xmlrpc: " + str(e) + ' - ' + str(result)) return result
def tryMakeDir(dir): if not exists(dir): logInfo('Creating folder %s' % dir) try: mkdir(dir, '0777') except IOError, e: exit('%s\nFailed to make directory %s' % (e, dir))
def getSeasonEpisode(self, name, webChannel, unixtime, max_time_drift): result = None skipped = self.skip.get(name, None) if skipped: if (time() - skipped) < skip_expiration: #return _("Skipped") socket.setdefaulttimeout(reduced_timeout) else: del self.skip[name] try: result = self.sp.cache.getSeasonEpisode(name, webChannel, unixtime, max_time_drift) logDebug("SerienServer getSeasonEpisode result:", result) except Exception as e: logInfo("Exception in xmlrpc: " + str(e) + ' - ' + str(result)) self.skip[name] = time() result = str(e) if skipped: timeout = config.plugins.seriesplugin.socket_timeout.value socket.setdefaulttimeout(float(timeout)) return result
def runCommand(msg, cmd): logInfo(msg) logInfo(command) status = system(command) if status != 0: logWarn("command '%s' returned non-zero status: %d'" % (command, status)) return status
def mkRefDataBase(reference, indexFlags): refDatabase = referenece + ".bwt" if exists(refDatabase) logInfo("Reference database already exists: using %s" % refDatabase) else: command = "bwa index %s %s" % (indexFlags, reference) runCommand("Creating Reference Database", command) return refDatabase
def indexReference(reference): referenceIndex = reference + .".fai" if exists(referenceIndex): logInfo("Reflist already exists: using %s" % referenceIndex) else: command = "samtools faidx %s" % reference runCommand("Creating Reflist", command) return referenceIndex
def illumina2FastQ(file): (root, ext) = split(file) sangerFile = root + ".fastq" if ext == ".fastq": logInfo("illumina2FastQ: file %s already in Standard/Sanger FASTQ Format" % file) elif ext == ".txt": command = "maq ill2sanger %s %s" % (file, sangerFile) runCommand("Converting illumina file to Standard/Sanger FASTQ Format", command) else: exit("sequence file %s not in illumina (.txt) or sanger (.fastq) format" % file) return sangerFile
def getInstance(): global instance if instance is None: initLog() from plugin import VERSION logDebug(" SERIESPLUGIN NEW INSTANCE " + VERSION) try: from Tools.HardwareInfo import HardwareInfo logDebug( " DeviceName " + HardwareInfo().get_device_name().strip() ) except: sys.exc_clear() try: from Components.About import about logDebug( " EnigmaVersion " + about.getEnigmaVersionString().strip() ) logDebug( " ImageVersion " + about.getVersionString().strip() ) except: sys.exc_clear() try: #http://stackoverflow.com/questions/1904394/python-selecting-to-read-the-first-line-only logDebug( " dreamboxmodel " + open("/proc/stb/info/model").readline().strip() ) logDebug( " imageversion " + open("/etc/image-version").readline().strip() ) logDebug( " imageissue " + open("/etc/issue.net").readline().strip() ) except: sys.exc_clear() try: for key, value in config.plugins.seriesplugin.dict().iteritems(): logDebug( " config..%s = %s" % (key, str(value.value)) ) except Exception as e: sys.exc_clear() global CompiledRegexpReplaceChars try: if config.plugins.seriesplugin.replace_chars.value: CompiledRegexpReplaceChars = re.compile('['+config.plugins.seriesplugin.replace_chars.value.replace("\\", "\\\\\\\\")+']') except: logInfo( " Config option 'Replace Chars' is no valid regular expression" ) CompiledRegexpReplaceChars = re.compile("[:\!/\\,\(\)'\?]") instance = SeriesPlugin() logDebug( " ", strftime("%a, %d %b %Y %H:%M:%S", localtime()) ) return instance
def __init__(self, session, services, *args, **kwargs): logInfo("SeriesPluginRenamer: services, service:", str(services)) if services and not isinstance(services, list): services = [services] self.services = services self.data = [] self.counter = 0 session.openWithCallback(self.confirm, MessageBox, _("Do You want to start renaming?"), MessageBox.TYPE_YESNO, timeout=15, default=True)
def __init__(self, session, services, *args, **kwargs): logInfo("SeriesPluginRenamer: services, service:", str(services)) if services and not isinstance(services, list): services = [services] self.services = services self.data = [] self.counter = 0 session.openWithCallback( self.confirm, MessageBox, _("Do You want to start renaming?"), MessageBox.TYPE_YESNO, timeout = 15, default = True )
def osrename(src, dst): #Py3 for f in glob( escape(src) + "*" ): glob_src = CompiledRegexpGlobEscape.sub("[\\1]", src) logDebug("SPR: glob_src ", glob_src) for f in glob( glob_src + ".*" ): logDebug("SPR: servicepathRnm", f) to = f.replace(src, dst) logDebug("SPR: servicepathTo ", to) if not os.path.exists(to): try: os.rename(f, to) except: logDebug("SPR: rename error", f, to) elif config.plugins.seriesplugin.rename_existing_files.value: logDebug("SPR: Destination file already exists", to, " - Append _") return osrename( src, dst + "_") break else: logInfo("SPR: Destination file alreadey exists", to, " - Skip rename") return True
def bareGetSeasonEpisode(service_ref, name, begin, end, description, path, future=True, today=False, elapsed=False): result = None if config.plugins.seriesplugin.enabled.value: startLog() logInfo("Bare:", service_ref, name, begin, end, description, path, future, today, elapsed) from SeriesPlugin import getInstance, refactorTitle, refactorDescription, refactorDirectory seriesPlugin = getInstance() data = seriesPlugin.getEpisodeBlocking( name, begin, end, service_ref, future, today, elapsed ) global loop_counter loop_counter += 1 if data and len(data) == 4: name = str(refactorTitle(name, data)) description = str(refactorDescription(description, data)) path = refactorDirectory(path, data) logInfo("Bare: Success", name, description, path) return (name, description, path, getLog()) elif data: global loop_data loop_data.append( str(data) ) logInfo("Bare: Failed", str(data)) return str(data) return result
def bareGetSeasonEpisode(service_ref, name, begin, end, description, path, future=True, today=False, elapsed=False): result = _("SeriesPlugin is deactivated") if config.plugins.seriesplugin.enabled.value: startLog() logInfo("Bare:", service_ref, name, begin, end, description, path, future, today, elapsed) from SeriesPlugin import getInstance, refactorTitle, refactorDescription, refactorDirectory seriesPlugin = getInstance() data = seriesPlugin.getEpisodeBlocking( name, begin, end, service_ref, future, today, elapsed ) global loop_counter loop_counter += 1 if data and isinstance(data, dict): name = str(refactorTitle(name, data)) description = str(refactorDescription(description, data)) path = refactorDirectory(path, data) logInfo("Bare: Success", name, description, path) return (name, description, path, getLog()) elif data: global loop_data loop_data.append( str(data) ) logInfo("Bare: Failed", str(data)) return str(data) return result
def getSeasonEpisode( self, name, webChannel, unixtime, max_time_drift ): result = None skipped = self.skip.get(name, None) if skipped: if ( time() - skipped ) < skip_expiration: #return _("Skipped") socket.setdefaulttimeout( reduced_timeout ) else: del self.skip[name] try: result = self.sp.cache.getSeasonEpisode( name, webChannel, unixtime, max_time_drift ) logDebug("SerienServer getSeasonEpisode result:", result) except Exception as e: logInfo("Exception in xmlrpc: " + str(e) + ' - ' + str(result)) self.skip[name] = time() result = str(e) if skipped: timeout = config.plugins.seriesplugin.socket_timeout.value socket.setdefaulttimeout( float(timeout) ) return result
def getSeasonAndEpisode(self, timer, name, begin, end, block=True): logInfo("SeriesPluginTimer: timername, service, name, begin, end:", timer.name, str(timer.service_ref.ref), name, begin, end) if hasattr(timer, 'sp_in_queue'): if timer.sp_in_queue: logDebug( "SPT: SeriesPluginTimer: Skip timer is already in queue:", timer.name) timer.log( 601, "[SeriesPlugin] Skip timer is already in queue %s" % (timer.name)) return # We have to compare the length, # because of the E2 special chars handling for creating the filenames #if timer.name == name: # Mad Men != Mad_Men if TAG in timer.tags: logDebug( "SPT: SeriesPluginTimer: Skip timer is already handled %s", timer.name) timer.log( 607, "[SeriesPlugin] Skip timer is already handled %s" % (timer.name)) return if config.plugins.seriesplugin.timer_eit_check.value: event = None epgcache = eEPGCache.getInstance() if timer.eit: #logDebug("SPT: Timer Eit is set", timer.service_ref.ref, timer.eit) event = epgcache.lookupEventId(timer.service_ref.ref, timer.eit) logDebug("SPT: LookupEventId", timer.eit, event) if not (event): #logDebug("Lookup EventTime", timer.service_ref.ref, end, begin) event = epgcache.lookupEventTime(timer.service_ref.ref, begin + ((end - begin) / 2)) logDebug("SPT: lookupEventTime", event) #if not(event): # logDebug("Lookup Event", timer.service_ref.ref, end, begin) # events = epgcache.lookupEvent( [ "T" , ( timer.service_ref.ref, 0, begin + ((end - begin) /2) ) ] ); # logDebug("LookupEvent event(s) found", len(events), events ) # event = events and events[0] if event: #logDebug("EPG event found") if not (len(timer.name) == len(name) == len( event.getEventName())): logDebug("SPT: Skip timer because it is already modified", timer.name, name, event and event.getEventName(), len(timer.name), len(name), len(event.getEventName())) timer.log( 602, "[SeriesPlugin] Skip timer because it is already modified" ) return else: if (len(timer.name) == len(name)): logDebug("SPT: Skip timer because no event was found", timer.name, name, len(timer.name), len(name)) timer.log( 603, "[SeriesPlugin] Skip timer because no event was found") return if timer.begin < time() + 60: logDebug( "SPT: Skipping timer because it starts in less than 60 seconds", timer.name) timer.log( 604, "[SeriesPlugin] Skip timer because it starts in less than 60 seconds" ) return if timer.isRunning(): logDebug("SPT: Skipping timer because it is already running", timer.name) timer.log( 605, "[SeriesPlugin] Skip timer because it is already running") return if timer.justplay: logDebug("SPT: Skipping justplay timer", timer.name) timer.log(606, "[SeriesPlugin] Skip justplay timer") return timer.log(600, "[SeriesPlugin] Try to find infos for %s" % (timer.name)) seriesPlugin = getInstance() if timer.service_ref: #channel = timer.service_ref.getServiceName() #logDebug(channel) logDebug("SPT: getEpisode:", name, begin, end, block) timer.sp_in_queue = True if block: result = seriesPlugin.getEpisodeBlocking(name, begin, end, timer.service_ref, future=True) return self.timerCallback(timer, result) else: seriesPlugin.getEpisode( boundFunction(self.timerCallback, timer), #name, begin, end, channel, future=True name, begin, end, timer.service_ref, future=True) return None else: logDebug("SPT: SeriesPluginTimer: No channel specified") self.timerCallback(timer, "No channel specified") return None
def getSeasonAndEpisode(self, timer, name, begin, end, block=True): logInfo("SeriesPluginTimer: timername, service, name, begin, end:", timer.name, str(timer.service_ref.ref), name, begin, end) if hasattr(timer, 'sp_in_queue'): if timer.sp_in_queue: logDebug("SPT: SeriesPluginTimer: Skip timer is already in queue:", timer.name) timer.log(601, "[SeriesPlugin] Skip timer is already in queue %s" % (timer.name) ) return # We have to compare the length, # because of the E2 special chars handling for creating the filenames #if timer.name == name: # Mad Men != Mad_Men if TAG in timer.tags: logDebug("SPT: SeriesPluginTimer: Skip timer is already handled %s", timer.name) timer.log(607, "[SeriesPlugin] Skip timer is already handled %s" % (timer.name) ) return if config.plugins.seriesplugin.timer_eit_check.value: event = None epgcache = eEPGCache.getInstance() if timer.eit: #logDebug("SPT: Timer Eit is set", timer.service_ref.ref, timer.eit) event = epgcache.lookupEventId(timer.service_ref.ref, timer.eit) logDebug("SPT: LookupEventId", timer.eit, event) if not(event): #logDebug("Lookup EventTime", timer.service_ref.ref, end, begin) event = epgcache.lookupEventTime( timer.service_ref.ref, begin + ((end - begin) /2) ); logDebug("SPT: lookupEventTime", event ) #if not(event): # logDebug("Lookup Event", timer.service_ref.ref, end, begin) # events = epgcache.lookupEvent( [ "T" , ( timer.service_ref.ref, 0, begin + ((end - begin) /2) ) ] ); # logDebug("LookupEvent event(s) found", len(events), events ) # event = events and events[0] if event: #logDebug("EPG event found") if not ( len(timer.name) == len(name) == len(event.getEventName()) ): logDebug("SPT: Skip timer because it is already modified", timer.name, name, event and event.getEventName(), len(timer.name), len(name), len(event.getEventName()) ) timer.log(602, "[SeriesPlugin] Skip timer because it is already modified") return else: if ( len(timer.name) == len(name) ): logDebug("SPT: Skip timer because no event was found", timer.name, name, len(timer.name), len(name)) timer.log(603, "[SeriesPlugin] Skip timer because no event was found") return if timer.begin < time() + 60: logDebug("SPT: Skipping timer because it starts in less than 60 seconds", timer.name ) timer.log(604, "[SeriesPlugin] Skip timer because it starts in less than 60 seconds") return if timer.isRunning(): logDebug("SPT: Skipping timer because it is already running", timer.name ) timer.log(605, "[SeriesPlugin] Skip timer because it is already running") return if timer.justplay: logDebug("SPT: Skipping justplay timer", timer.name ) timer.log(606, "[SeriesPlugin] Skip justplay timer") return timer.log(600, "[SeriesPlugin] Try to find infos for %s" % (timer.name) ) seriesPlugin = getInstance() if timer.service_ref: #channel = timer.service_ref.getServiceName() #logDebug(channel) logDebug("SPT: getEpisode:", name, begin, end, block) timer.sp_in_queue = True if block: result = seriesPlugin.getEpisodeBlocking( name, begin, end, timer.service_ref, future=True ) return self.timerCallback(timer, result) else: seriesPlugin.getEpisode( boundFunction(self.timerCallback, timer), #name, begin, end, channel, future=True name, begin, end, timer.service_ref, future=True ) return None else: logDebug("SPT: SeriesPluginTimer: No channel specified") self.timerCallback(timer, "No channel specified") return None
def __init__(self, session, service=None, event=None): if session: 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 }) logInfo("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() if session: self.onLayoutFinish.append( self.layoutFinished ) else: self.getEpisode()
def __init__(self, session, service=None, event=None): if session: 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 }) logInfo("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() if session: self.onLayoutFinish.append(self.layoutFinished) else: self.getEpisode()