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
Beispiel #2
0
 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 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 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
Beispiel #5
0
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
Beispiel #6
0
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 
Beispiel #7
0
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
Beispiel #8
0
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
Beispiel #10
0
    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()
Beispiel #19
0
    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()