예제 #1
0
def getChangedSeriesNames(markers):
    IDs = []
    for marker in markers:
        (Serie, Info, WLID) = marker
        IDs.append(WLID)

    from SerienRecorderSeriesServer import SeriesServer
    series = SeriesServer().getSeriesNamesAndInfoByWLID(IDs)

    result = {}
    #from SerienRecorderLogWriter import SRLogger
    for marker in markers:
        try:
            (name, info, wl_id) = marker
            for serie in series:
                if str(wl_id) == str(serie['id']):
                    if name != serie['name'] or info != serie['info']:
                        #SRLogger.writeTestLog("Found difference: %s [%s / %s]" % (name, serie['name'], serie['info']))
                        result[str(wl_id)] = dict(old_name=name,
                                                  new_name=serie['name'],
                                                  new_info=serie['info'])
                    break
        except:
            continue
    return result
예제 #2
0
 def getData(self):
     try:
         infoText = SeriesServer().getSeriesInfo(self.serieID)
     except:
         infoText = 'Es ist ein Fehler beim Abrufen der Serien-Informationen aufgetreten!'
     self['info'].setText(infoText)
     SerienRecorder.getCover(self, self.serieName, self.serieID)
 def readWebChannels(self):
     print "[SerienRecorder] call webpage."
     self['title'].setText("Lade Wunschliste-Sender...")
     try:
         self.createWebChannels(SeriesServer().doGetWebChannels(), False)
     except:
         self['title'].setText("Fehler beim Laden der Wunschliste-Sender")
예제 #4
0
    def changeTVDBID(self):
        if fileExists("/etc/enigma2/SerienRecorder.tvdb.id"):
            self.tvdb_id = SeriesServer().getTVDBID(self.serien_id)
            if self.tvdb_id is False:
                self.session.open(
                    MessageBox,
                    "Fehler beim Abrufen der TVDB-ID vom SerienServer!",
                    MessageBox.TYPE_ERROR,
                    timeout=5)
            else:
                tvdb_id_text = str(
                    self.tvdb_id) if self.tvdb_id > 0 else 'Keine'
                message = "Für ' %s ' ist folgende TVBD-ID zugewiesen: %s\n\nMöchten Sie die TVDB-ID ändern?" % (
                    self.serien_name, tvdb_id_text)
                self.session.openWithCallback(self.enterTVDBID,
                                              MessageBox,
                                              message,
                                              MessageBox.TYPE_YESNO,
                                              default=False)
        else:
            message = "Cover und Serien-/Episodeninformationen stammen von 'TheTVDB' - dafür muss jeder Serie eine TVDB-ID zugewiesen werden. " \
                      "Für viele Serien stellt Wunschliste diese ID zur Verfügung, manchmal ist sie aber falsch oder fehlt ganz.\n\n" \
                      "In diesem Fall kann die TVDB-ID über diese Funktion direkt im SerienRecorder geändert und auf dem SerienServer " \
                      "gespeichert werden, sodass alle SerienRecorder Nutzer von der Änderung profitieren.\n\n" \
                      "Um Missbrauch zu verhindern, muss diese Funktion aber erst freigeschaltet werden, wer sich beteiligen möchte, kann " \
                      "sich an den SerienRecorder Entwickler wenden."

            self.session.open(MessageBox,
                              message,
                              MessageBox.TYPE_INFO,
                              timeout=0)
예제 #5
0
	def getData(self):
		try:
			infoText = SeriesServer().getEpisodeInfo(self.episodeID)
		except:
			infoText = 'Es ist ein Fehler beim Abrufen der Episoden-Informationen aufgetreten!'
		self['info'].setText(infoText)
		super(self.__class__, self).getCover(self.serien_name)
    def readPlanerData(self, answer=True):
        print "[SerienRecorder] readPlanerData"
        if not showMainScreen:
            self.keyCancel()
            self.close()
            return

        self.loading = True
        cache = serienRecSeriesPlanner.loadPlanerData(
            config.plugins.serienRec.screenplaner.value)

        if answer:
            cache.clear()

        self.setHeadline()
        self['title'].instance.setForegroundColor(parseColor("foreground"))

        lt = datetime.datetime.now()
        if config.plugins.serienRec.screenplaner.value == 1:
            lt += datetime.timedelta(days=self.page)
        key = time.strftime('%d.%m.%Y', lt.timetuple())
        if key in cache:
            try:
                self['title'].setText("Lade Infos vom Speicher...")
                if config.plugins.serienRec.screenplaner.value == 1:
                    self.processPlanerData(cache[key], True)
                else:
                    self.processTopThirty(cache[key], True)
            except:
                SRLogger.writeLog(
                    "Fehler beim Abrufen und Verarbeiten der Daten\n", True)
        else:
            self['title'].setText("Lade Infos vom Web...")
            webChannels = self.database.getActiveChannels()
            try:
                if config.plugins.serienRec.screenplaner.value == 1:
                    planerData = SeriesServer().doGetPlanerData(
                        int(self.page), webChannels)
                    self.processPlanerData(planerData, False)
                else:
                    topThirtyData = SeriesServer().doGetTopThirty()
                    self.processTopThirty(topThirtyData, False)
            except:
                SRLogger.writeLog(
                    "Fehler beim Abrufen und Verarbeiten der Daten\n", True)
예제 #7
0
	def download(self, data):
		(seriesID, timeSpan, markerChannels, seriesTitle, season, fromEpisode, numberOfRecords, currentTime, futureTime, excludedWeekdays) = data
		try:
			isTransmissionFailed = False
			transmissions = SeriesServer().doGetTransmissions(seriesID, timeSpan, markerChannels)
		except:
			isTransmissionFailed = True
			transmissions = None
		self.resultQueue.put((isTransmissionFailed, transmissions, seriesID, seriesTitle, season, fromEpisode, numberOfRecords, currentTime, futureTime, excludedWeekdays))
예제 #8
0
 def run(self):
     try:
         from SerienRecorderSeriesServer import SeriesServer
         self.planerData = SeriesServer().doGetPlanerData(
             self.daypage, self.webChannels)
     except:
         SRLogger.writeLog(
             "Fehler beim Abrufen und Verarbeiten der SerienPlaner-Daten [%s]\n"
             % str(self.daypage), True)
	def autoMatch(self, execute):
		if execute:
			if config.plugins.serienRec.selectBouquets.value:
				self.stbChannelList = STBHelpers.buildSTBChannelList(config.plugins.serienRec.MainBouquet.value)
			else:
				self.stbChannelList = STBHelpers.buildSTBChannelList()
			self['title'].setText("Versuche automatische Zuordnung...")
			try:
				self.createWebChannels(SeriesServer().doGetWebChannels(), True)
			except:
				self['title'].setText("Fehler beim Laden der Wunschliste-Sender")
	def loadEpisodes(self):
		self.timer_default.stop()
		if self.page in self.episodes_list_cache:
			self.chooseMenuList.setList(map(self.buildList_episodes, self.episodes_list_cache[self.page]))
		else:
			getCover(self, self.serien_name, self.serien_id)
			try:
				episodes = SeriesServer().doGetEpisodes(int(self.serien_id), int(self.page))
				self.resultsEpisodes(episodes)
			except:
				self['title'].setText("Fehler beim Abrufen der Episodenliste")
예제 #11
0
 def setTVDBID(self, tvdb_id):
     if tvdb_id:
         from SerienRecorder import getCover
         if not SeriesServer().setTVDBID(self.serien_id, tvdb_id):
             self.session.open(
                 MessageBox,
                 "Die TVDB-ID konnte nicht auf dem SerienServer geändert werden!",
                 MessageBox.TYPE_ERROR,
                 timeout=5)
         getCover(self.parent, self.serien_name, self.serien_id, False,
                  True)
예제 #12
0
def getCover(self, serien_name, serien_id, auto_check = False, forceReload = False):
	if not config.plugins.serienRec.downloadCover.value:
		return

	serien_name = doReplaces(serien_name.encode('utf-8'))
	serien_nameCover = "%s%s.jpg" % (config.plugins.serienRec.coverPath.value, serien_name)
	png_serien_nameCover = "%s%s.png" % (config.plugins.serienRec.coverPath.value, serien_name)

	try:
		if self and config.plugins.serienRec.showCover.value:
			self['cover'].hide()
			global coverToShow
			coverToShow = serien_nameCover

		if not fileExists(config.plugins.serienRec.coverPath.value):
			try:
				os.mkdir(config.plugins.serienRec.coverPath.value)
			except:
				Notifications.AddPopup("Cover Pfad (%s) kann nicht angelegt werden.\n\nÜberprüfen Sie den Pfad und die Rechte!" % config.plugins.serienRec.coverPath.value, MessageBox.TYPE_INFO, timeout=10, id="checkFileAccess")

		# Change PNG cover file extension to correct file extension JPG
		if fileExists(png_serien_nameCover):
			os.rename(png_serien_nameCover, serien_nameCover)

		if forceReload:
			os.remove(serien_nameCover)

		if config.plugins.serienRec.refreshPlaceholderCover.value and fileExists(serien_nameCover) and os.path.getsize(serien_nameCover) == 0:
			statinfo = os.stat(serien_nameCover)
			if (statinfo.st_ctime + 5184000) <= time.time(): # Older than 60 days
				os.remove(serien_nameCover)

		if fileExists(serien_nameCover):
			if self and config.plugins.serienRec.showCover.value:
				showCover(serien_nameCover, self, serien_nameCover)
		elif serien_id and (config.plugins.serienRec.showCover.value or (config.plugins.serienRec.downloadCover.value and auto_check)):
			try:
				posterURL = SeriesServer().doGetCoverURL(int(serien_id), serien_name)
				#writeLog("Cover URL [%s] => %s" % (serien_name, posterURL), True)
				if posterURL:
					from twisted.web.client import downloadPage
					downloadPage(posterURL, serien_nameCover).addCallback(showCover, self, serien_nameCover, False).addErrback(getCoverDataError, self, serien_nameCover)
				else:
					if config.plugins.serienRec.createPlaceholderCover.value:
						open(serien_nameCover, "a").close()
			except:
				if config.plugins.serienRec.createPlaceholderCover.value:
					open(serien_nameCover, "a").close()
				getCoverDataError("failed", self, serien_nameCover)
	except:
		SRLogger.writeLog("Fehler bei Laden des Covers: %s " % serien_nameCover, True)
	def __onLayoutFinished(self):
		self._numberOfCovers = 0

		from SerienRecorderSeriesServer import SeriesServer
		print "[SerienRecorder] Get covers for id = ", str(self._wlID)
		covers = SeriesServer().getCoverURLs(self._wlID)
		if covers is not None:
			print "[SerienRecorder] Number of covers found = ", len(covers)
			self._numberOfCovers = len(covers)
			ds = defer.DeferredSemaphore(tokens=5)
			downloads = [ds.run(self.download, cover).addCallback(self.buildList, cover).addErrback(self.dataError) for cover in covers]
			defer.DeferredList(downloads).addErrback(self.dataError).addCallback(self.dataFinish)
		else:
			self['footer'].setText("Keine Cover gefunden!")
예제 #14
0
	def loadEpisodes(self):
		self.timer_default.stop()
		if self.page in self.episodes_list_cache:
			self.chooseMenuList.setList(map(self.buildList_episodes, self.episodes_list_cache[self.page]))
			self['title'].setText("%s Episoden für ' %s ' gefunden." % (self.numberOfEpisodes, self.serien_name))
		else:
			getCover(self, self.serien_name, self.serien_id)
			try:
				episodes = SeriesServer().doGetEpisodes(int(self.serien_id), int(self.page))
				self.resultsEpisodes(episodes)
				self['title'].setText("%s Episoden für ' %s ' gefunden." % (self.numberOfEpisodes, self.serien_name))
			except:
				self['title'].setText("Fehler beim Abrufen der Episodenliste")
				self.loading = False
		self['headline'].show()
	def channelReset(self, execute):
		if execute:
			print "[SerienRecorder] channel-list reset..."
			SRLogger.writeLog("Senderliste wird aktualisiert...")

			if config.plugins.serienRec.selectBouquets.value:
				self.stbChannelList = STBHelpers.buildSTBChannelList(config.plugins.serienRec.MainBouquet.value)
			else:
				self.stbChannelList = STBHelpers.buildSTBChannelList()
			self['title'].setText("Lade Wunschliste-Sender...")
			try:
				self.createWebChannels(SeriesServer().doGetWebChannels(), False)
				self.database.setChannelListLastUpdate()
			except:
				self['title'].setText("Fehler beim Laden der Wunschliste-Sender")
				SRLogger.writeLog("Fehler beim Laden der Senderliste vom SerienServer.", True)
		else:
			print "[SerienRecorder] channel-list ok."
    def startScreen(self):
        print "[SerienRecorder] version %s is running..." % config.plugins.serienRec.showversion.value

        if not SerienRecorder.refreshTimer:
            if config.plugins.serienRec.timeUpdate.value:
                SerienRecorder.serienRecCheckForRecording(
                    self.session, False, False)

        if not SerienRecorder.initDB():
            print "[SerienRecorder] initDB failed"
            super(self.__class__, self).close()

        self.database = SRDatabase(SerienRecorder.serienRecDataBaseFilePath)
        if not self.database.hasChannels():
            print "[SerienRecorder] Channellist is empty !"
            from SerienRecorderChannelScreen import serienRecMainChannelEdit
            self.session.openWithCallback(self.readPlanerData,
                                          serienRecMainChannelEdit)
        else:
            self.serviceRefs = self.database.getActiveServiceRefs()
            remoteChannelListLastUpdated = SeriesServer.getChannelListLastUpdate(
            )
            channelListUpToDate = True
            if remoteChannelListLastUpdated:
                localChannelListLastUpdated = self.database.getChannelListLastUpdate(
                )
                if 0 < localChannelListLastUpdated < remoteChannelListLastUpdated:
                    SRLogger.writeLog(
                        "Auf dem Serien-Server wurde die Senderliste aktualisiert - bitte führen Sie auch eine Aktualisierung in der Senderzuordnung aus.",
                        True)
                    channelListUpToDate = False

            if channelListUpToDate:
                self.switchStartScreen()
            else:
                self.session.openWithCallback(
                    self.handleChannelListUpdate, MessageBox,
                    "Die Senderliste wurde auf dem Server aktualisiert.\nSie muss auch im SerienRecorder aktualisiert werden.\nWechseln Sie zur Senderzuordnung und aktualisieren Sie die Senderliste mit der grünen Taste.\n\nZur Senderzuordnung wechseln?",
                    MessageBox.TYPE_YESNO)
예제 #17
0
def getEmailData():
	# extract all html parts
	def get_html(email_message_instance):
		maintype = email_message_instance.get_content_maintype()
		if maintype == 'multipart':
			for part in email_message_instance.get_payload():
				if part.get_content_type() == 'text/html':
					return part.get_payload()

	SRLogger.writeLog("\n---------' Lade TV-Planer E-Mail '---------\n", True)

	# get emails
	if len(config.plugins.serienRec.imap_server.value) == 0:
		SRLogger.writeLog("TV-Planer: imap_server nicht gesetzt", True)
		return None

	if len(config.plugins.serienRec.imap_login_hidden.value) == 0:
		SRLogger.writeLog("TV-Planer: imap_login nicht gesetzt", True)
		return None

	if len(config.plugins.serienRec.imap_password_hidden.value) == 0:
		SRLogger.writeLog("TV-Planer: imap_password nicht gesetzt", True)
		return None

	if len(config.plugins.serienRec.imap_mailbox.value) == 0:
		SRLogger.writeLog("TV-Planer: imap_mailbox nicht gesetzt", True)
		return None

	if len(config.plugins.serienRec.imap_mail_subject.value)  == 0:
		SRLogger.writeLog("TV-Planer: imap_mail_subject nicht gesetzt", True)
		return None

	if 1 > config.plugins.serienRec.imap_mail_age.value > 100:
		config.plugins.serienRec.imap_mail_age.value = 1

	try:
		if config.plugins.serienRec.imap_server_ssl.value:
			mail = imaplib.IMAP4_SSL(config.plugins.serienRec.imap_server.value, config.plugins.serienRec.imap_server_port.value)
		else:
			mail = imaplib.IMAP4(config.plugins.serienRec.imap_server.value, config.plugins.serienRec.imap_server_port.value)

	except imaplib.IMAP4.abort:
		SRLogger.writeLog("TV-Planer: Verbindung zum Server fehlgeschlagen", True)
		return None

	except imaplib.IMAP4.error:
		SRLogger.writeLog("TV-Planer: Verbindung zum Server fehlgeschlagen", True)
		return None

	try:
		mail.login(decrypt(getmac("eth0"), config.plugins.serienRec.imap_login_hidden.value),
				   decrypt(getmac("eth0"), config.plugins.serienRec.imap_password_hidden.value))
		print "[serienrecorder]: imap login ok"

	except imaplib.IMAP4.error:
		SRLogger.writeLog("TV-Planer: Anmeldung auf Server fehlgeschlagen", True)
		print "[serienrecorder]: imap login failed"
		return None

	try:
		mail.select(config.plugins.serienRec.imap_mailbox.value)

	except imaplib.IMAP4.error:
		SRLogger.writeLog("TV-Planer: Mailbox %r nicht gefunden" % config.plugins.serienRec.imap_mailbox.value, True)
		return None

	searchstr = TimeHelpers.getMailSearchString()
	try:
		result, data = mail.uid('search', None, searchstr)
		if result != 'OK':
			SRLogger.writeLog("TV-Planer: Fehler bei der Suche nach TV-Planer E-Mails", True)
			SRLogger.writeLog("TV-Planer: %s" % data, True)
			return None

	except imaplib.IMAP4.error:
		SRLogger.writeLog("TV-Planer: Keine TV-Planer Nachricht in den letzten %s Tagen" % str(config.plugins.serienRec.imap_mail_age.value), True)
		SRLogger.writeLog("TV-Planer: %s" % searchstr, True)
		return None

	if len(data[0]) == 0:
		SRLogger.writeLog("TV-Planer: Keine TV-Planer Nachricht in den letzten %s Tagen" % str(config.plugins.serienRec.imap_mail_age.value), True)
		SRLogger.writeLog("TV-Planer: %s" % searchstr, True)
		return None

	# get the latest email
	latest_email_uid = data[0].split()[-1]
	# fetch the email body (RFC822) for the given UID
	try:
		result, data = mail.uid('fetch', latest_email_uid, '(RFC822)')
	except:
		SRLogger.writeLog("TV-Planer: Laden der E-Mail fehlgeschlagen", True)
		return None

	mail.logout()
	# extract email message including headers and alternate payloads
	email_message = email.message_from_string(data[0][1])
	if len(email_message) == 0:
		SRLogger.writeLog("TV-Planer: leere E-Mail", True)
		return None

	# get html of wunschliste
	html = get_html(email_message)
	if html is None or len(html) == 0:
		SRLogger.writeLog("TV-Planer: leeres HTML", True)
		return None

	if config.plugins.serienRec.tvplaner.value and config.plugins.serienRec.tvplaner_backupHTML.value:
		try:
			htmlFilePath = SERIENRECORDER_TVPLANER_HTML_FILENAME % config.plugins.serienRec.LogFilePath.value
			writeTVPlanerHTML = open(htmlFilePath, "w")
			writeTVPlanerHTML.write(html)
			writeTVPlanerHTML.close()
		except:
			SRLogger.writeLog("TV-Planer: HTML konnte nicht für die Fehlersuche gespeichert werden.", True)

	# make one line and convert characters
	html = html.replace('=\r\n', '').replace('=\n', '').replace('=\r', '').replace('\n', '').replace('\r', '')
	html = html.replace('=3D', '=')

	try:

		def getTextContentByTitle(node, titleValue, default):
			titleNodes = node.childNodes.getElementsByAttr('title', titleValue)
			if titleNodes:
				return titleNodes[0].textContent.encode('utf-8')
			else:
				return default

		def getEpisodeTitle(node):
			childNodes = node.childNodes.getElementsByTagName('a')
			if childNodes:
				return childNodes[0].textContent.encode('utf-8')
			else:
				# Movies does not a link to the episode => only country, year
				childNodes = node.childNodes.getElementsByTagName('span')
				if childNodes:
					return childNodes[0].textContent.encode('utf-8')
				else:
					return ''

		import AdvancedHTMLParser
		parser = AdvancedHTMLParser.AdvancedHTMLParser()
		html = parser.unescape(html).encode('utf-8')
		parser.parseStr(html)

		# Get tables from HTML
		tables = parser.getElementsByTagName('table')

		# Initialize regular expressions
		date_regexp = re.compile('.*TV-Planer.*?den ([0-3][0-9]\.[0-1][0-9]\.20[0-9][0-9])\s.(?:\(ab (.*?) Uhr\))?')
		url_title_regexp = re.compile('.*<a href="([^\?]+)(?:\?.*)?".*><strong.*>(.*)</strong>')
		endtime_regexp = re.compile('.*bis:\s(.*)\sUhr.*')

		# Get date and time of TV-Planer
		header = tables[1].getAllChildNodes().getElementsByTagName('div')[0].textContent.encode('utf-8')
		planerDateTime = date_regexp.findall(header)[0]
		print planerDateTime

		# Get transmissions
		transmissions = []
		transmissionTable = tables[1].getAllChildNodes().getElementsByTagName('table')[0]
		transmissionRows = transmissionTable.childNodes
		for transmissionRow in transmissionRows:
			transmission = []
			if not transmissionRow.hasAttribute('style'):
				transmissionColumns = transmissionRow.childNodes
				# Each transmission row has three columns
				# [0]: Start time
				starttime = transmissionColumns[0].textContent.encode('utf-8')
				if starttime != 'Anzeige':
					transmission.append(starttime.replace(' Uhr', ''))
					# [1]: URL, Title, Season, Episode, Info
					transmissionColumn = transmissionColumns[1]
					# Season, Episode, Title, Episode info, End time
					episodeInfo = ['0', '00', '', '', '0.00']

					if transmissionColumn.firstChild:
						# First child is always URL + Title
						url_title = url_title_regexp.findall(transmissionColumn.firstChild.toHTML().encode('utf-8'))[0]
						transmission.extend(url_title)
					if transmissionColumn.lastChild:
						# Last element => End time (it has to be filled with a time because later on the time will be splitted)
						endtime = endtime_regexp.findall(transmissionColumn.lastChild.toHTML().encode('utf-8'))
						if endtime:
							episodeInfo[4] = endtime[0]

					divPartIndex = 0
					for transmissionPart in transmissionColumn.childNodes:
						if transmissionPart is transmissionColumn.lastChild:
							# Skip part if it the "last" part
							continue
						if transmissionPart.tagName == 'div' and divPartIndex == 0:
							# First div element => Season / Episode / Title / e.g. NEU
							episodeInfo[0] = getTextContentByTitle(transmissionPart, 'Staffel', '0')
							episodeInfo[1] = getTextContentByTitle(transmissionPart, 'Episode', '00')
							episodeInfo[2] = getEpisodeTitle(transmissionPart)
							divPartIndex += 1
						elif transmissionPart.tagName == 'div' and divPartIndex == 1:
							# Second div element => Episode info
							episodeInfo[3] = transmissionPart.textContent.encode('utf-8')

					transmission.extend(episodeInfo)
					# [2] Channel
					transmission.append(transmissionColumns[2].textContent.encode('utf-8'))
					print transmission
					transmissions.append(transmission)

	except:
		SRLogger.writeLog("TV-Planer: HTML Parsing abgebrochen", True)
		return None

	# prepare transmissions
	# [ ( seriesName, channel, start, end, season, episode, title, '0' ) ]
	# calculate start time and end time of list in E-Mail
	missingTime = False
	if len(planerDateTime) != 2:
		SRLogger.writeLog("TV-Planer: falsches Datumsformat", True)
		return None
	(day, month, year) = planerDateTime[0].split('.')
	if not planerDateTime[1]:
		if transmissions:
			# Get time of first transmission
			(hour, minute) = transmissions[0][0].split(':')
		else:
			missingTime = True
			(hour, minute) = ('00', '00')
	else:
		(hour, minute) = planerDateTime[1].split(':')
	liststarttime_unix = TimeHelpers.getRealUnixTime(minute, hour, day, month, year)
	# generate dictionary with final transmissions
	SRLogger.writeLog("Ab dem %s %s Uhr wurden die folgenden Sendungen gefunden:\n" % (planerDateTime[0], planerDateTime[1]))
	print "[SerienRecorder] Ab dem %s %s Uhr wurden die folgenden Sendungen gefunden:" % (planerDateTime[0], planerDateTime[1])
	if missingTime:
		SRLogger.writeLog("In der Kopfzeile der TV-Planer E-Mail konnte keine Uhrzeit gefunden werden, bitte kontrollieren Sie die angelegten Timer!\n")
	transmissiondict = dict()
	for starttime, url, seriesname, season, episode, titel, description, endtime, channel in transmissions:
		try:
			if url.startswith('https://www.wunschliste.de/spielfilm'):
				if not config.plugins.serienRec.tvplaner_movies.value:
					SRLogger.writeLog("' %s - Filmaufzeichnung ist deaktiviert '" % seriesname, True)
					print "' %s - Filmaufzeichnung ist deaktiviert '" % seriesname
					continue
				transmissiontype = '[ Film ]'
			elif url.startswith('https://www.wunschliste.de/serie'):
				if not config.plugins.serienRec.tvplaner_series.value:
					SRLogger.writeLog("' %s - Serienaufzeichnung ist deaktiviert '" % seriesname, True)
					print "' %s - Serienaufzeichnung ist deaktiviert '" % seriesname
					continue
				transmissiontype = '[ Serie ]'
			else:
				SRLogger.writeLog("' %s - Ungültige URL %r '" % (seriesname, url), True)
				print "' %s - Serienaufzeichnung ist deaktiviert '" % seriesname
				continue

			# series
			transmission = [ seriesname ]
			# channel
			channel = channel.replace(' (Pay-TV)','').replace(' (Schweiz)','').replace(' (GB)','').replace(' (Österreich)','').replace(' (USA)','').replace(' (RP)','').replace(' (F)','').strip()
			transmission += [ channel ]
			# start time
			(hour, minute) = starttime.split(':')
			transmissionstart_unix = TimeHelpers.getRealUnixTime(minute, hour, day, month, year)
			if transmissionstart_unix < liststarttime_unix:
				transmissionstart_unix = TimeHelpers.getRealUnixTimeWithDayOffset(minute, hour, day, month, year, 1)
			transmission += [ transmissionstart_unix ]
			# end time
			(hour, minute) = endtime.split('.')
			transmissionend_unix = TimeHelpers.getRealUnixTime(minute, hour, day, month, year)
			if transmissionend_unix < transmissionstart_unix:
				transmissionend_unix = TimeHelpers.getRealUnixTimeWithDayOffset(minute, hour, day, month, year, 1)
			transmission += [ transmissionend_unix ]
			# season
			if season == '':
				season = '0'
			transmission += [ season ]
			# episode
			if episode == '':
				episode = '00'
			transmission += [ episode ]
			# title
			transmission += [ quopri.decodestring(titel) ]
			# last
			transmission += [ '0' ]
			# url
			transmission += [ url ]
			# store in dictionary transmissiondict[seriesname] = [ seriesname: [ transmission 0 ], [ transmission 1], .... ]
			if seriesname in transmissiondict:
				transmissiondict[seriesname] += [ transmission ]
			else:
				transmissiondict[seriesname] = [ transmission ]
			SRLogger.writeLog("' %s - S%sE%s - %s - %s - %s - %s - %s '" % (transmission[0], str(transmission[4]).zfill(2), str(transmission[5]).zfill(2), transmission[6], transmission[1], time.strftime("%d.%m.%Y %H:%M", time.localtime(int(transmissionstart_unix))), time.strftime("%d.%m.%Y %H:%M", time.localtime(int(transmissionend_unix))), transmissiontype), True)
			print "[SerienRecorder] ' %s - S%sE%s - %s - %s - %s - %s - %s'" % (transmission[0], str(transmission[4]).zfill(2), str(transmission[5]).zfill(2), transmission[6], transmission[1], time.strftime("%d.%m.%Y %H:%M", time.localtime(int(transmissionstart_unix))), time.strftime("%d.%m.%Y %H:%M", time.localtime(int(transmissionend_unix))), transmissiontype)
		except Exception as e:
			SRLogger.writeLog("TV-Planer Verarbeitung fehlgeschlagen! [%s]" % str(e), True)

	if config.plugins.serienRec.tvplaner_create_marker.value:
		database = SRDatabase(SerienRecorder.serienRecDataBaseFilePath)
		for seriesname in transmissiondict.keys():
			# marker isn't in database, create new marker
			# url stored in marker isn't the final one, it is corrected later
			url = transmissiondict[seriesname][0][-1]
			marker_type = "Serien Marker"
			try:
				boxID = None
				if url.startswith('https://www.wunschliste.de/serie'):
					seriesID = SeriesServer().getIDByFSID(url[str.rindex(url, '/') + 1:])
					if seriesID > 0:
						url = str(seriesID)
					else:
						url = None
					if config.plugins.serienRec.tvplaner_series_activeSTB.value:
						boxID = config.plugins.serienRec.BoxID.value
				elif url.startswith('https://www.wunschliste.de/spielfilm'):
					marker_type = "Temporärer Serien Marker"
					if config.plugins.serienRec.tvplaner_movies_activeSTB.value:
						boxID = config.plugins.serienRec.BoxID.value
				else:
					url = None

				if url and not database.markerExists(url):
					if database.addMarker(url, seriesname, "", boxID, 1 if url.startswith('https://www.wunschliste.de/spielfilm') else 0):
						SRLogger.writeLog("\n%s für ' %s ' wurde angelegt" % (marker_type, seriesname), True)
						print "[SerienRecorder] ' %s - %s erzeugt '" % (seriesname, marker_type)
			except Exception as e:
				SRLogger.writeLog("\n%s für ' %s ' konnte wegen eines Fehlers nicht angelegt werden [%s]" % (marker_type, seriesname, str(e)), True)
				print "[SerienRecorder] ' %s - %s konnte wegen eines Fehlers nicht angelegt werden [%s]'" % (seriesname, marker_type, str(e))
	else:
		SRLogger.writeLog("Es werden keine Serien-Marker aus der TV-Planer E-Mail erstellt.", True)


	return transmissiondict
예제 #18
0
	def run(self):
		from SerienRecorderSeriesServer import SeriesServer
		self.searchResults = SeriesServer().doSearch(self.seriesName, self.startOffset)
예제 #19
0
 def run(self):
     try:
         self.transmissions = SeriesServer().doGetSeasonBegins(
             self.webChannels)
     except:
         self.transmissions = None