class serienRecEpisodes(serienRecBaseScreen, Screen, HelpableScreen): def __init__(self, session, serien_name, serie_url, serien_cover): serienRecBaseScreen.__init__(self, session) Screen.__init__(self, session) HelpableScreen.__init__(self) self.ErrorMsg = '' self.database = SRDatabase(serienRecDataBaseFilePath) self.addedEpisodes = self.database.getTimerForSeries(serien_name) self.modus = "menu_list" self.session = session self.picload = ePicLoad() self.serien_name = serien_name self.serien_id = 0 self.serien_cover = serien_cover self.episodes_list_cache = {} self.showEpisodes = True self.aStaffel = None self.aFromEpisode = None self.aToEpisode = None self.numberOfEpisodes = 0 self.page = 1 self.maxPages = 1 self.loading = False self.changesMade = False self["actions"] = HelpableActionMap(self, "SerienRecorderActions", { "ok" : (self.keyOK, "Informationen zur ausgewählten Episode anzeigen"), "cancel": (self.keyCancel, "Zurück zur Serien-Marker-Ansicht"), "left" : (self.keyLeft, "Zur vorherigen Seite blättern"), "right" : (self.keyRight, "Zur nächsten Seite blättern"), "up" : (self.keyUp, "Eine Zeile nach oben"), "down" : (self.keyDown, "Eine Zeile nach unten"), "red" : (self.keyRed, "Diese Folge (nicht mehr) timern"), "green" : (self.keyGreen, "Zeige nur Einträge aus der Timer-Liste"), "yellow": (self.keyYellow, "Ausgewählte Folge auf den Merkzettel"), "blue" : (self.keyBlue, "Neue Einträge manuell hinzufügen"), "menu" : (self.recSetup, "Menü für globale Einstellungen öffnen"), "nextBouquet" : (self.nextPage, "Nächste Seite laden"), "prevBouquet" : (self.backPage, "Vorherige Seite laden"), "startTeletext" : (self.wunschliste, "Informationen zur ausgewählten Serie auf Wunschliste anzeigen"), "0" : (self.readLogFile, "Log-File des letzten Suchlaufs anzeigen"), "3" : (self.showProposalDB, "Liste der Serien/Staffel-Starts anzeigen"), "4" : (self.serieInfo, "Informationen zur ausgewählten Serie anzeigen"), "6" : (self.showConflicts, "Liste der Timer-Konflikte anzeigen"), "7" : (self.showWishlist, "Merkzettel (vorgemerkte Folgen) anzeigen"), }, -1) self.helpList[0][2].sort() self["helpActions"] = ActionMap(["SerienRecorderActions", ], { "displayHelp" : self.showHelp, "displayHelp_long" : self.showManual, }, 0) self.setupSkin() self.serien_id = serie_url self.timer_default = eTimer() if isDreamOS(): self.timer_default_conn = self.timer_default.timeout.connect(self.loadEpisodes) else: self.timer_default.callback.append(self.loadEpisodes) self.onLayoutFinish.append(self.setSkinProperties) self.onLayoutFinish.append(self.searchEpisodes) self.onClose.append(self.__onClose) def callHelpAction(self, *args): HelpableScreen.callHelpAction(self, *args) def setSkinProperties(self): super(self.__class__, self).setSkinProperties() self['text_red'].setText("(De)aktivieren") self['text_green'].setText("Zeige Timer") self['text_ok'].setText("Beschreibung") self['text_yellow'].setText("Auf den Merkzettel") self['text_blue'].setText("Manuell hinzufügen") #self['headline'].instance.setHAlign(2) self['headline'].instance.setForegroundColor(parseColor('red')) self['headline'].instance.setFont(parseFont("Regular;16", ((1,1),(1,1)))) self.chooseMenuList.l.setItemHeight(int(28 * skinFactor)) self.num_bt_text[2][2] = buttonText_na self.num_bt_text[3][2] = buttonText_na super(self.__class__, self).startDisplayTimer() def setupSkin(self): super(self.__class__, self).setupSkin() self[self.modus].show() if config.plugins.serienRec.showCover.value: self['cover'].show() if not config.plugins.serienRec.showAllButtons.value: self['bt_epg'].hide() self['bt_info'].hide() self['bt_red'].show() self['bt_green'].show() self['bt_ok'].show() self['bt_yellow'].show() self['bt_blue'].show() self['bt_exit'].show() self['bt_text'].show() self['bt_menu'].show() self['text_red'].show() self['text_green'].show() self['text_ok'].show() self['text_yellow'].show() self['text_blue'].show() self['text_0'].show() self['text_1'].show() self['text_2'].show() self['text_3'].show() self['text_4'].show() def updateMenuKeys(self): updateMenuKeys(self) def setupClose(self, result): super(self.__class__, self).setupClose(result) def wunschliste(self): super(self.__class__, self).wunschliste(self.serien_id) def searchEpisodes(self): super(self.__class__, self).getCover(self.serien_name) self['title'].setText("Suche Episoden ' %s '" % self.serien_name) self.loading = True self.timer_default.start(0) def resultsEpisodes(self, data): self.maxPages = 1 self.episodes_list_cache[self.page] = [] for episode in data["episodes"]: if "title" in episode: title = episode["title"].encode("utf-8") else: title = "-" self.episodes_list_cache[self.page].append( [episode["season"], episode["episode"], episode["id"], title]) self.chooseMenuList.setList(map(self.buildList_episodes, self.episodes_list_cache[self.page])) self.numberOfEpisodes = data["numEpisodes"] self.loading = False self.showPages() 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 buildList_episodes(self, entry): (season, episode, info_id, title) = entry seasonEpisodeString = "S%sE%s" % (str(season).zfill(2), str(episode).zfill(2)) imageMinus = "%simages/red_dot.png" % serienRecMainPath imagePlus = "%simages/green_dot.png" % serienRecMainPath imageNone = "%simages/black.png" % serienRecMainPath middleImage = imageNone leftImage = imageMinus if len(self.addedEpisodes) > 0 and self.isAlreadyAdded(season, episode, title): leftImage = imagePlus color = parseColor('yellow').argb() if not str(season).isdigit(): color = parseColor('red').argb() return [entry, (eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 5, 8 * skinFactor, 16 * skinFactor, 16 * skinFactor, loadPNG(leftImage)), (eListboxPythonMultiContent.TYPE_TEXT, 40 * skinFactor, 3, 140 * skinFactor, 22 * skinFactor, 0, RT_HALIGN_LEFT | RT_VALIGN_CENTER, "%s" % seasonEpisodeString, color), (eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 150 * skinFactor, 17 * skinFactor, 22 * skinFactor, 48 * skinFactor, loadPNG(middleImage)), (eListboxPythonMultiContent.TYPE_TEXT, 200 * skinFactor, 3, 550 * skinFactor, 22 * skinFactor, 0, RT_HALIGN_LEFT | RT_VALIGN_CENTER, title), #(eListboxPythonMultiContent.TYPE_TEXT, 200 * skinFactor, 29 * skinFactor, 550 * skinFactor, 18 * skinFactor, 0, RT_HALIGN_LEFT | RT_VALIGN_CENTER, otitle, parseColor('yellow').argb()), ] def loadTimer(self): self.addedEpisodes = self.database.getTimerForSeries(self.serien_name) addedlist = [] for timer in self.addedEpisodes: (Staffel, Episode, title, webChannel, start_time) = timer zeile = "%s - S%sE%s - %s" % (self.serien_name, str(Staffel).zfill(2), str(Episode).zfill(2), title) addedlist.append((zeile.replace(" - dump", " - %s" % "(Manuell hinzugefügt !!)"), self.serien_name, Staffel, Episode, title, start_time, webChannel)) return addedlist[:] def buildList_timer(self, entry): (zeile, Serie, Staffel, Episode, title, start_time, webChannel) = entry foregroundColor = parseColor('foreground').argb() return [entry, (eListboxPythonMultiContent.TYPE_TEXT, 20, 00, 1280 * skinFactor, 25 * skinFactor, 0, RT_HALIGN_LEFT | RT_VALIGN_CENTER, zeile, foregroundColor) ] def showPages(self): headline = "Diese Liste stammt von TheTVDB, daher kann die Nummerierung/Episodenbeschreibung abweichen." if self.maxPages > 1: headline += " Seite %s/%s" % (str(self.page), str(self.maxPages)) self['headline'].setText(headline) def isAlreadyAdded(self, season, episode, title=None): result = False #Title is only relevant if season and episode is 0 #this happen when Wunschliste has no episode and season information seasonEpisodeString = "S%sE%s" % (str(season).zfill(2), str(episode).zfill(2)) if seasonEpisodeString != "S00E00": title = None if not title: for addedEpisode in self.addedEpisodes[:]: if str(addedEpisode[0]).zfill(2) == str(season).zfill(2) and str(addedEpisode[1]).zfill(2) == str(episode).zfill(2): result = True #self.addedEpisodes.remove(addedEpisode) break else: for addedEpisode in self.addedEpisodes[:]: if (str(addedEpisode[0]).zfill(2) == str(season).zfill(2)) and (str(addedEpisode[1]).zfill(2) == str(episode).zfill(2)) and (addedEpisode[2] == title): result = True #self.addedEpisodes.remove(addedEpisode) break return result def removeFromDB(self, season, episode, title=None): seasonEpisodeString = "S%sE%s" % (str(season).zfill(2), str(episode).zfill(2)) if seasonEpisodeString != "S00E00": title = None self.database.removeTimer(self.serien_name, season, episode, title, None, None, None) def keyOK(self): if self.loading and self.showEpisodes: return check = self['menu_list'].getCurrent() if not check: return sindex = self['menu_list'].getSelectedIndex() #if len(self.episodes_list_cache) >= self.page: if self.page in self.episodes_list_cache: if len(self.episodes_list_cache[self.page]) != 0: if self.episodes_list_cache[self.page][sindex][2]: self.session.open(serienRecShowEpisodeInfo, self.serien_name, self.serien_id, self.episodes_list_cache[self.page][sindex][3], self.episodes_list_cache[self.page][sindex][2]) #self.session.open(MessageBox, "Diese Funktion steht in dieser Version noch nicht zur Verfügung!", MessageBox.TYPE_INFO, timeout=10) def keyRed(self): if self.loading: return selectedRow = self['menu_list'].getCurrent() if not selectedRow: return sindex = self['menu_list'].getSelectedIndex() if self.showEpisodes: if self.page in self.episodes_list_cache: current_episodes_list = self.episodes_list_cache[self.page] if len(current_episodes_list) != 0: isAlreadyAdded = self.isAlreadyAdded(current_episodes_list[sindex][0], current_episodes_list[sindex][1], current_episodes_list[sindex][3]) if isAlreadyAdded: self.removeFromDB(current_episodes_list[sindex][0], current_episodes_list[sindex][1], current_episodes_list[sindex][3]) else: self.database.addToTimerList(self.serien_name, current_episodes_list[sindex][1], current_episodes_list[sindex][1], current_episodes_list[sindex][0], current_episodes_list[sindex][3], int(time.time()), "", "", 0, 1) self.addedEpisodes = self.database.getTimerForSeries(self.serien_name) self.chooseMenuList.setList(map(self.buildList_episodes, current_episodes_list)) else: (txt, serie, staffel, episode, title, start_time, webChannel) = selectedRow[0] self.removeFromDB(staffel, episode, title) timerList = self.loadTimer() self.chooseMenuList.setList(map(self.buildList_timer, timerList)) self['title'].setText("%s Timer für ' %s ' gefunden." % (len(timerList), self.serien_name)) def keyGreen(self): if self.loading: return if self.showEpisodes: # Show timer self.showEpisodes = False self['text_red'].setText("Eintrag löschen") self['text_green'].setText("Zeige Episoden") self['text_yellow'].hide() self['text_blue'].hide() self['text_ok'].hide() timerList = self.loadTimer() self.chooseMenuList.setList(map(self.buildList_timer, timerList)) self['title'].setText("%s Timer für ' %s ' gefunden." % (len(timerList), self.serien_name)) self['headline'].hide() else: # Show episodes self.showEpisodes = True self['text_red'].setText("(De)aktivieren") self['text_green'].setText("Zeige Timer") self['text_yellow'].show() self['text_blue'].show() self['text_ok'].show() self.loadEpisodes() def keyYellow(self): if self.loading and not self.showEpisodes: return check = self['menu_list'].getCurrent() if not check: return sindex = self['menu_list'].getSelectedIndex() #if len(self.episodes_list_cache) >= self.page: if self.page in self.episodes_list_cache: if len(self.episodes_list_cache[self.page]) != 0: if self.database.addBookmark(self.serien_name, self.episodes_list_cache[self.page][sindex][1], self.episodes_list_cache[self.page][sindex][1], self.episodes_list_cache[self.page][sindex][0], config.plugins.serienRec.NoOfRecords.value): self.session.open(MessageBox, "Die Episode wurde zum Merkzettel hinzugefügt", MessageBox.TYPE_INFO, timeout = 10) def nextPage(self): if self.loading and not self.showEpisodes: return if self.page <= self.maxPages: if self.page == self.maxPages: self.page = 1 else: self.page += 1 self.showPages() self.chooseMenuList.setList(map(self.buildList_episodes, [])) self.searchEpisodes() def backPage(self): if self.loading and not self.showEpisodes: return if self.page >= 1 and self.maxPages > 1: if self.page == 1: self.page = self.maxPages else: self.page -= 1 self.showPages() self.chooseMenuList.setList(map(self.buildList_episodes, [])) self.searchEpisodes() def answerStaffel(self, aStaffel): self.aStaffel = aStaffel if not self.aStaffel or self.aStaffel == "": return self.session.openWithCallback(self.answerFromEpisode, NTIVirtualKeyBoard, title = "von Episode:") def answerFromEpisode(self, aFromEpisode): self.aFromEpisode = aFromEpisode if not self.aFromEpisode or self.aFromEpisode == "": return self.session.openWithCallback(self.answerToEpisode, NTIVirtualKeyBoard, title = "bis Episode:") def answerToEpisode(self, aToEpisode): self.aToEpisode = aToEpisode if self.aToEpisode == "": self.aToEpisode = self.aFromEpisode if not self.aToEpisode: # or self.aFromEpisode is None or self.aStaffel is None: return else: print "[SerienRecorder] Staffel: %s" % self.aStaffel print "[SerienRecorder] von Episode: %s" % self.aFromEpisode print "[SerienRecorder] bis Episode: %s" % self.aToEpisode if self.database.addToTimerList(self.serien_name, self.aFromEpisode, self.aToEpisode, self.aStaffel, "dump", int(time.time()), "", "", 0, 1): self.chooseMenuList.setList(map(self.buildList_episodes, self.episodes_list_cache[self.page])) def keyBlue(self): if self.loading and not self.showEpisodes: return self.aStaffel = None self.aFromEpisode = None self.aToEpisode = None self.session.openWithCallback(self.answerStaffel, NTIVirtualKeyBoard, title = "%s: Staffel eingeben:" % self.serien_name) def __onClose(self): self.stopDisplayTimer()
class serienRecWishlistScreen(serienRecBaseScreen, Screen, HelpableScreen): def __init__(self, session): serienRecBaseScreen.__init__(self, session) Screen.__init__(self, session) HelpableScreen.__init__(self) self.session = session self.picload = ePicLoad() self.database = SRDatabase(SerienRecorder.serienRecDataBaseFilePath) self.chooseMenuList_popup = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self["actions"] = HelpableActionMap(self, "SerienRecorderActions", { "ok" : (self.keyOK, "für die ausgewählte Serien neue Einträge hinzufügen"), "cancel": (self.keyCancel, "zurück zur vorherigen Ansicht"), "left" : (self.keyLeft, "zur vorherigen Seite blättern"), "right" : (self.keyRight, "zur nächsten Seite blättern"), "up" : (self.keyUp, "eine Zeile nach oben"), "down" : (self.keyDown, "eine Zeile nach unten"), "red" : (self.keyRed, "ausgewählten Eintrag löschen"), "green" : (self.keyGreen, "alle Änderungen speichern und zurück zur vorherigen Ansicht"), "yellow": (self.keyYellow, "umschalten Sortierung ein/aus"), "blue" : (self.keyBlue, "alle Einträge aus der Liste endgültig löschen"), "menu" : (self.recSetup, "Menü für globale Einstellungen öffnen"), "0" : (self.readLogFile, "Log-File des letzten Suchlaufs anzeigen"), "3" : (self.showProposalDB, "Liste der Serien/Staffel-Starts anzeigen"), "4" : (self.serieInfo, "Informationen zur ausgewählten Serie anzeigen"), "6" : (self.showConflicts, "Liste der Timer-Konflikte anzeigen"), }, -1) self.helpList[0][2].sort() self["helpActions"] = ActionMap(["SerienRecorderActions" ,], { "displayHelp" : self.showHelp, "displayHelp_long" : self.showManual, }, 0) self.setupSkin() self.delAdded = False self.wishlist = [] self.wishlist_tmp = [] self.dbData = [] self.modus = "menu_list" self.aSerie = "" self.aStaffel = 0 self.aFromEpisode = 0 self.aToEpisode = 0 self.onLayoutFinish.append(self.readWishlist) self.onClose.append(self.__onClose) self.onLayoutFinish.append(self.setSkinProperties) def callHelpAction(self, *args): HelpableScreen.callHelpAction(self, *args) def setSkinProperties(self): super(self.__class__, self).setSkinProperties() self['text_red'].setText("Eintrag löschen") self['text_green'].setText("Speichern") self['text_ok'].setText("Eintrag anlegen") if config.plugins.serienRec.wishListSorted.value: self['text_yellow'].setText("unsortierte Liste") else: self['text_yellow'].setText("Sortieren") self['text_blue'].setText("Liste leeren") self.num_bt_text[2][1] = buttonText_na super(self.__class__, self).startDisplayTimer() def setupSkin(self): self.skin = None InitSkin(self) # normal self.chooseMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.chooseMenuList.l.setFont(0, gFont('Regular', 20 + int(config.plugins.serienRec.listFontsize.value))) self.chooseMenuList.l.setItemHeight(int(25 *skinFactor)) self['menu_list'] = self.chooseMenuList self['menu_list'].show() # popup self.chooseMenuList_popup = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.chooseMenuList_popup.l.setFont(0, gFont('Regular', 20 + int(config.plugins.serienRec.listFontsize.value))) self.chooseMenuList_popup.l.setItemHeight(int(25 *skinFactor)) self['popup_list'] = self.chooseMenuList_popup self['popup_list'].hide() self['title'].setText("Diese Episoden sind zur Aufnahme vorgemerkt") if config.plugins.serienRec.showCover.value: self['cover'].show() if not config.plugins.serienRec.showAllButtons.value: self['bt_red'].show() self['bt_green'].show() self['bt_ok'].show() self['bt_yellow'].show() self['bt_blue'].show() self['bt_exit'].show() #self['bt_text'].show() self['bt_info'].show() self['bt_menu'].show() self['text_red'].show() self['text_green'].show() self['text_ok'].show() self['text_yellow'].show() self['text_blue'].show() self['text_0'].show() self['text_1'].show() self['text_2'].show() self['text_3'].show() self['text_4'].show() def updateMenuKeys(self): updateMenuKeys(self) def serieInfo(self): if self.modus == "menu_list": check = self['menu_list'].getCurrent() if check is None: return serien_name = self['menu_list'].getCurrent()[0][1] else: check = self['popup_list'].getCurrent() if check is None: return serien_name = self['popup_list'].getCurrent()[0][0] serien_id = None url = self.database.getMarkerURL(serien_name) if url: serien_id = url if serien_id: from SerienRecorderSeriesInfoScreen import serienRecShowInfo self.session.open(serienRecShowInfo, serien_name, serien_id) def setupClose(self, result): super(self.__class__, self).setupClose(result) if result[1]: self.readWishlist() def readWishlist(self): self.wishlist = [] bookmarks = self.database.getBookmarks() for bookmark in bookmarks: (Serie, Staffel, Episode, numberOfRecordings) = bookmark zeile = "%s S%sE%s" % (Serie, str(Staffel).zfill(2), str(Episode).zfill(2)) self.wishlist.append((zeile, Serie, Staffel, Episode)) self.wishlist_tmp = self.wishlist[:] if config.plugins.serienRec.wishListSorted.value: self.wishlist_tmp.sort() self.chooseMenuList.setList(map(self.buildList, self.wishlist_tmp)) self.getCover() @staticmethod def buildList(entry): (zeile, Serie, Staffel, Episode) = entry return [entry, (eListboxPythonMultiContent.TYPE_TEXT, 20, 00, 1280 * skinFactor, 25 * skinFactor, 0, RT_HALIGN_LEFT | RT_VALIGN_CENTER, zeile) ] @staticmethod def buildList_popup(entry): (Serie,) = entry return [entry, (eListboxPythonMultiContent.TYPE_TEXT, 5, 0, 560 * skinFactor, 25 * skinFactor, 0, RT_HALIGN_LEFT | RT_VALIGN_CENTER, Serie) ] def answerStaffel(self, aStaffel): self.aStaffel = aStaffel if self.aStaffel is None or self.aStaffel == "": return self.session.openWithCallback(self.answerFromEpisode, NTIVirtualKeyBoard, title = "von Episode:") def answerFromEpisode(self, aFromEpisode): self.aFromEpisode = aFromEpisode if self.aFromEpisode is None or self.aFromEpisode == "": return self.session.openWithCallback(self.answerToEpisode, NTIVirtualKeyBoard, title = "bis Episode:") def answerToEpisode(self, aToEpisode): self.aToEpisode = aToEpisode print "[SerienRecorder] Staffel: %s" % self.aStaffel print "[SerienRecorder] von Episode: %s" % self.aFromEpisode print "[SerienRecorder] bis Episode: %s" % self.aToEpisode if self.aToEpisode is None or self.aFromEpisode is None or self.aStaffel is None or self.aToEpisode == "": return else: self.database.addBookmark(self.aSerie, self.aFromEpisode, self.aToEpisode, self.aStaffel, int(config.plugins.serienRec.NoOfRecords.value)) self.readWishlist() def keyOK(self): if self.modus == "menu_list": self.modus = "popup_list" self['popup_list'].show() self['popup_bg'].show() self['menu_list'].hide() l = self.database.getMarkerNames() self.chooseMenuList_popup.setList(map(self.buildList_popup, l)) self['popup_list'].moveToIndex(0) else: self.modus = "menu_list" self['menu_list'].show() self['popup_list'].hide() self['popup_bg'].hide() if self['popup_list'].getCurrent() is None: print "[SerienRecorder] Marker-Liste leer." return self.aSerie = self['popup_list'].getCurrent()[0][0] self.aStaffel = 0 self.aFromEpisode = 0 self.aToEpisode = 0 self.session.openWithCallback(self.answerStaffel, NTIVirtualKeyBoard, title = "%s: Staffel eingeben:" % self.aSerie) def keyRed(self): check = self['menu_list'].getCurrent() if check is None: print "[SerienRecorder] Merkzettel ist leer." return else: zeile = self['menu_list'].getCurrent()[0] (title, serie, staffel, episode) = zeile self.dbData.append((serie.lower(), str(staffel).lower(), episode.lower())) self.wishlist_tmp.remove(zeile) self.wishlist.remove(zeile) self.chooseMenuList.setList(map(self.buildList, self.wishlist_tmp)) self.delAdded = True def keyGreen(self): if self.delAdded: self.database.removeBookmarks(self.dbData) self.close() def keyYellow(self): if len(self.wishlist_tmp) != 0: if config.plugins.serienRec.wishListSorted.value: self.wishlist_tmp = self.wishlist[:] self['text_yellow'].setText("Sortieren") config.plugins.serienRec.wishListSorted.setValue(False) else: self.wishlist_tmp.sort() self['text_yellow'].setText("unsortierte Liste") config.plugins.serienRec.wishListSorted.setValue(True) config.plugins.serienRec.wishListSorted.save() SerienRecorder.configfile.save() self.chooseMenuList.setList(map(self.buildList, self.wishlist_tmp)) self.getCover() def keyBlue(self): check = self['menu_list'].getCurrent() if check is None: print "[SerienRecorder] Merkzettel ist leer." return else: if config.plugins.serienRec.confirmOnDelete.value: self.session.openWithCallback(self.callClearListMsg, MessageBox, "Soll die Liste wirklich geleert werden?", MessageBox.TYPE_YESNO, default = False) else: self.callClearListMsg(True) def callClearListMsg(self, answer): if answer: self.database.removeAllBookmarks() self.readWishlist() else: return def getCover(self): if self.modus == "menu_list": check = self['menu_list'].getCurrent() if check is None: return serien_name = self['menu_list'].getCurrent()[0][1] else: check = self['popup_list'].getCurrent() if check is None: return serien_name = self['popup_list'].getCurrent()[0][0] serien_id = None url = self.database.getMarkerURL(serien_name) if url: serien_id = url SerienRecorder.getCover(self, serien_name, serien_id) def keyLeft(self): self[self.modus].pageUp() self.getCover() def keyRight(self): self[self.modus].pageDown() self.getCover() def keyDown(self): self[self.modus].down() self.getCover() def keyUp(self): self[self.modus].up() self.getCover() def __onClose(self): self.stopDisplayTimer() def callDeleteMsg(self, answer): if answer: self.keyGreen() self.close() def keyCancel(self): if self.delAdded: self.session.openWithCallback(self.callDeleteMsg, MessageBox, "Sollen die Änderungen gespeichert werden?", MessageBox.TYPE_YESNO, default = True) else: self.close()
class serienRecWishlistScreen(serienRecBaseScreen, Screen, HelpableScreen): def __init__(self, session): serienRecBaseScreen.__init__(self, session) Screen.__init__(self, session) HelpableScreen.__init__(self) self.session = session self.picload = ePicLoad() self.database = SRDatabase(SerienRecorder.serienRecDataBaseFilePath) self.chooseMenuList_popup = MenuList( [], enableWrapAround=True, content=eListboxPythonMultiContent) self["actions"] = HelpableActionMap( self, "SerienRecorderActions", { "ok": (self.keyOK, "für die ausgewählte Serien neue Einträge hinzufügen"), "cancel": (self.keyCancel, "zurück zur vorherigen Ansicht"), "left": (self.keyLeft, "zur vorherigen Seite blättern"), "right": (self.keyRight, "zur nächsten Seite blättern"), "up": (self.keyUp, "eine Zeile nach oben"), "down": (self.keyDown, "eine Zeile nach unten"), "red": (self.keyRed, "ausgewählten Eintrag löschen"), "green": (self.keyGreen, "alle Änderungen speichern und zurück zur vorherigen Ansicht" ), "yellow": (self.keyYellow, "umschalten Sortierung ein/aus"), "blue": (self.keyBlue, "alle Einträge aus der Liste endgültig löschen"), "menu": (self.recSetup, "Menü für globale Einstellungen öffnen"), "0": (self.readLogFile, "Log-File des letzten Suchlaufs anzeigen"), "3": (self.showProposalDB, "Liste der Serien/Staffel-Starts anzeigen"), "4": (self.serieInfo, "Informationen zur ausgewählten Serie anzeigen"), "6": (self.showConflicts, "Liste der Timer-Konflikte anzeigen"), }, -1) self.helpList[0][2].sort() self["helpActions"] = ActionMap([ "SerienRecorderActions", ], { "displayHelp": self.showHelp, "displayHelp_long": self.showManual, }, 0) self.setupSkin() self.delAdded = False self.wishlist = [] self.wishlist_tmp = [] self.dbData = [] self.modus = "menu_list" self.aSerie = "" self.aStaffel = 0 self.aFromEpisode = 0 self.aToEpisode = 0 self.onLayoutFinish.append(self.readWishlist) self.onClose.append(self.__onClose) self.onLayoutFinish.append(self.setSkinProperties) def callHelpAction(self, *args): HelpableScreen.callHelpAction(self, *args) def setSkinProperties(self): super(self.__class__, self).setSkinProperties() self['text_red'].setText("Eintrag löschen") self['text_green'].setText("Speichern") self['text_ok'].setText("Eintrag anlegen") if config.plugins.serienRec.wishListSorted.value: self['text_yellow'].setText("unsortierte Liste") else: self['text_yellow'].setText("Sortieren") self['text_blue'].setText("Liste leeren") self.num_bt_text[2][1] = buttonText_na super(self.__class__, self).startDisplayTimer() def setupSkin(self): self.skin = None InitSkin(self) # normal self.chooseMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.chooseMenuList.l.setFont( 0, gFont('Regular', 20 + int(config.plugins.serienRec.listFontsize.value))) self.chooseMenuList.l.setItemHeight(int(25 * skinFactor)) self['menu_list'] = self.chooseMenuList self['menu_list'].show() # popup self.chooseMenuList_popup = MenuList( [], enableWrapAround=True, content=eListboxPythonMultiContent) self.chooseMenuList_popup.l.setFont( 0, gFont('Regular', 20 + int(config.plugins.serienRec.listFontsize.value))) self.chooseMenuList_popup.l.setItemHeight(int(25 * skinFactor)) self['popup_list'] = self.chooseMenuList_popup self['popup_list'].hide() self['title'].setText("Diese Episoden sind zur Aufnahme vorgemerkt") if config.plugins.serienRec.showCover.value: self['cover'].show() if not config.plugins.serienRec.showAllButtons.value: self['bt_red'].show() self['bt_green'].show() self['bt_ok'].show() self['bt_yellow'].show() self['bt_blue'].show() self['bt_exit'].show() #self['bt_text'].show() self['bt_info'].show() self['bt_menu'].show() self['text_red'].show() self['text_green'].show() self['text_ok'].show() self['text_yellow'].show() self['text_blue'].show() self['text_0'].show() self['text_1'].show() self['text_2'].show() self['text_3'].show() self['text_4'].show() def updateMenuKeys(self): updateMenuKeys(self) def serieInfo(self): if self.modus == "menu_list": check = self['menu_list'].getCurrent() if check is None: return serien_name = self['menu_list'].getCurrent()[0][1] else: check = self['popup_list'].getCurrent() if check is None: return serien_name = self['popup_list'].getCurrent()[0][0] serien_id = None url = self.database.getMarkerURL(serien_name) if url: serien_id = url if serien_id: from SerienRecorderSeriesInfoScreen import serienRecShowInfo self.session.open(serienRecShowInfo, serien_name, serien_id) def setupClose(self, result): super(self.__class__, self).setupClose(result) if result[1]: self.readWishlist() def readWishlist(self): self.wishlist = [] bookmarks = self.database.getBookmarks() for bookmark in bookmarks: (Serie, Staffel, Episode, numberOfRecordings) = bookmark zeile = "%s S%sE%s" % (Serie, str(Staffel).zfill(2), str(Episode).zfill(2)) self.wishlist.append((zeile, Serie, Staffel, Episode)) self.wishlist_tmp = self.wishlist[:] if config.plugins.serienRec.wishListSorted.value: self.wishlist_tmp.sort() self.chooseMenuList.setList(map(self.buildList, self.wishlist_tmp)) self.getCover() @staticmethod def buildList(entry): (zeile, Serie, Staffel, Episode) = entry return [ entry, (eListboxPythonMultiContent.TYPE_TEXT, 20, 00, 1280 * skinFactor, 25 * skinFactor, 0, RT_HALIGN_LEFT | RT_VALIGN_CENTER, zeile) ] @staticmethod def buildList_popup(entry): (Serie, ) = entry return [ entry, (eListboxPythonMultiContent.TYPE_TEXT, 5, 0, 560 * skinFactor, 25 * skinFactor, 0, RT_HALIGN_LEFT | RT_VALIGN_CENTER, Serie) ] def answerStaffel(self, aStaffel): self.aStaffel = aStaffel if self.aStaffel is None or self.aStaffel == "": return self.session.openWithCallback(self.answerFromEpisode, NTIVirtualKeyBoard, title="von Episode:") def answerFromEpisode(self, aFromEpisode): self.aFromEpisode = aFromEpisode if self.aFromEpisode is None or self.aFromEpisode == "": return self.session.openWithCallback(self.answerToEpisode, NTIVirtualKeyBoard, title="bis Episode:") def answerToEpisode(self, aToEpisode): self.aToEpisode = aToEpisode print "[SerienRecorder] Staffel: %s" % self.aStaffel print "[SerienRecorder] von Episode: %s" % self.aFromEpisode print "[SerienRecorder] bis Episode: %s" % self.aToEpisode if self.aToEpisode is None or self.aFromEpisode is None or self.aStaffel is None or self.aToEpisode == "": return else: self.database.addBookmark( self.aSerie, self.aFromEpisode, self.aToEpisode, self.aStaffel, int(config.plugins.serienRec.NoOfRecords.value)) self.readWishlist() def keyOK(self): if self.modus == "menu_list": self.modus = "popup_list" self['popup_list'].show() self['popup_bg'].show() self['menu_list'].hide() l = self.database.getMarkerNames() self.chooseMenuList_popup.setList(map(self.buildList_popup, l)) self['popup_list'].moveToIndex(0) else: self.modus = "menu_list" self['menu_list'].show() self['popup_list'].hide() self['popup_bg'].hide() if self['popup_list'].getCurrent() is None: print "[SerienRecorder] Marker-Liste leer." return self.aSerie = self['popup_list'].getCurrent()[0][0] self.aStaffel = 0 self.aFromEpisode = 0 self.aToEpisode = 0 self.session.openWithCallback(self.answerStaffel, NTIVirtualKeyBoard, title="%s: Staffel eingeben:" % self.aSerie) def keyRed(self): check = self['menu_list'].getCurrent() if check is None: print "[SerienRecorder] Merkzettel ist leer." return else: zeile = self['menu_list'].getCurrent()[0] (title, serie, staffel, episode) = zeile self.dbData.append( (serie.lower(), str(staffel).lower(), episode.lower())) self.wishlist_tmp.remove(zeile) self.wishlist.remove(zeile) self.chooseMenuList.setList(map(self.buildList, self.wishlist_tmp)) self.delAdded = True def keyGreen(self): if self.delAdded: self.database.removeBookmarks(self.dbData) self.close() def keyYellow(self): if len(self.wishlist_tmp) != 0: if config.plugins.serienRec.wishListSorted.value: self.wishlist_tmp = self.wishlist[:] self['text_yellow'].setText("Sortieren") config.plugins.serienRec.wishListSorted.setValue(False) else: self.wishlist_tmp.sort() self['text_yellow'].setText("unsortierte Liste") config.plugins.serienRec.wishListSorted.setValue(True) config.plugins.serienRec.wishListSorted.save() SerienRecorder.configfile.save() self.chooseMenuList.setList(map(self.buildList, self.wishlist_tmp)) self.getCover() def keyBlue(self): check = self['menu_list'].getCurrent() if check is None: print "[SerienRecorder] Merkzettel ist leer." return else: if config.plugins.serienRec.confirmOnDelete.value: self.session.openWithCallback( self.callClearListMsg, MessageBox, "Soll die Liste wirklich geleert werden?", MessageBox.TYPE_YESNO, default=False) else: self.callClearListMsg(True) def callClearListMsg(self, answer): if answer: self.database.removeAllBookmarks() self.readWishlist() else: return def getCover(self): if self.modus == "menu_list": check = self['menu_list'].getCurrent() if check is None: return serien_name = self['menu_list'].getCurrent()[0][1] else: check = self['popup_list'].getCurrent() if check is None: return serien_name = self['popup_list'].getCurrent()[0][0] serien_id = None url = self.database.getMarkerURL(serien_name) if url: serien_id = url SerienRecorder.getCover(self, serien_name, serien_id) def keyLeft(self): self[self.modus].pageUp() self.getCover() def keyRight(self): self[self.modus].pageDown() self.getCover() def keyDown(self): self[self.modus].down() self.getCover() def keyUp(self): self[self.modus].up() self.getCover() def __onClose(self): self.stopDisplayTimer() def callDeleteMsg(self, answer): if answer: self.keyGreen() self.close() def keyCancel(self): if self.delAdded: self.session.openWithCallback( self.callDeleteMsg, MessageBox, "Sollen die Änderungen gespeichert werden?", MessageBox.TYPE_YESNO, default=True) else: self.close()