def run(self): try: database, cursor = connectEpgDB() epg_db = EpgDb(database, cursor) kodisleep(getTimeSleep()) # Getting last update date. update_date = epg_db.getLastUpdateDate() if not doStartupUpdate() or epg_db.firstTimeRuning(): return current_time = dt.fromtimestamp(time()) update_time = strToDatetime(update_date) delta = current_time - update_time if delta.days < getUpdateFrequency(): return epg_xml = EpgXml(database, cursor, progress_bar=False) epg_xml.getXMLTV() epg_db.setUpdateDate() epg_xml.close() epg_db.close() del epg_xml del epg_db except Exception as e: log("%s %s" % (DEBUG_HEADER, e.message), LOGERROR)
def onClick(self, controlId): if controlId == 5001: self.close() elif controlId == 5002: logo = self.list_items[self.getControl(50).getSelectedPosition()] if not logo is None: database, cursor = connectEpgDB() epgDb = EpgDb(database, cursor) name = str(uuid4()) + logo[logo.rfind(r"."):] dest = join(settings.getChannelsLogoPath(), name) try: copy(logo, dest) epgDb.updateChannel(self.id_channel, logo=name) except: if settings.DEBUG: notify(EDIT_LOGO_ERROR) del database del cursor epgDb.close() del epgDb return self.refresh = True self.close()
def onInit(self): xbmcgui.WindowXMLDialog.onInit(self) self.titleLabel = self.getControl(EditControls.CHANNEL_LABEL) self.titleLabel.setLabel(ACTIONS_EDIT_CHANNEL + "[CR]" + self.display_name) self.programLabel = self.getControl(EditControls.PROGRAM_LABEL) self.programLabel.setLabel(ACTIONS_PROGRAM_LABEL + "[CR]" + self.program_title) self.getControl( EditControls.CHANNEL_HIDE).setLabel(ACTIONS_HIDE_CHANNEL) self.getControl( EditControls.CHANNEL_RENAME).setLabel(ACTIONS_RENAME_CHANNEL) self.getControl(EditControls.QUIT).setLabel(ACTIONS_QUIT_WINDOW) self.getControl( EditControls.CHANNEL_LOGO_UPDATE).setLabel(ACTIONS_LOGO_UPDATE) self.getControl( EditControls.PROGRAM_START).setLabel(ACTIONS_PROGRAM_START) self.getControl( EditControls.PROGRAM_REMINDER).setLabel(ACTIONS_PROGRAM_REMIND) self.setFocus(self.getControl(EditControls.PROGRAM_START)) if not settings.useProgramsReminder(): self.removeControl(self.getControl(EditControls.PROGRAM_REMINDER)) self.getControl(EditControls.PROGRAM_START).controlDown( self.getControl(EditControls.CHANNEL_HIDE)) else: database, cursor = connectEpgDB() epgDb = EpgDb(database, cursor) program_start = epgDb.getProgramStartDate(self.program_id) if program_start < datetime.now() + settings.getRemindersTime(): self.getControl( EditControls.PROGRAM_REMINDER).setVisible(False) remind = epgDb.hasReminder(self.program_id) if remind: self.getControl(EditControls.PROGRAM_REMINDER).setLabel( ACTIONS_PROGRAM_FORGET_REMIND) epgDb.close() del database del cursor del epgDb self.win_logo = LogoEditWindowXML('logo-edit-window.xml', settings.getAddonPath()) self.win_sf = SuperFavouritesXMLDialog('superfavourites-window.xml', settings.getAddonPath())
def onClick(self, controlId): self.titleLabel.setLabel(ACTIONS_EDIT_CHANNEL + "[CR]" + self.display_name) refreshSkin = True # Close if controlId == EditControls.QUIT: self.close() # Channel actions elif controlId in [ EditControls.CHANNEL_HIDE, EditControls.CHANNEL_RENAME, EditControls.CHANNEL_LOGO_UPDATE ]: database, cursor = connectEpgDB() epgDb = EpgDb(database, cursor) # Hide channel from EPG if controlId == EditControls.CHANNEL_HIDE: if epgDb.isChannelHidden(self.id_channel): epgDb.updateChannel(self.id_channel, visible=False) self.getControl(EditControls.CHANNEL_HIDE).setLabel( ACTIONS_UNHIDE_CHANNEL) else: epgDb.updateChannel(self.id_channel, visible=True) self.getControl(EditControls.CHANNEL_HIDE).setLabel( ACTIONS_HIDE_CHANNEL) # Rename the current channel. elif controlId == EditControls.CHANNEL_RENAME: new_name = xbmcgui.Dialog().input("ACTIONS_RENAME_TITLE", self.display_name) if not new_name is None or new_name == "": epgDb.updateChannel(self.id_channel, display_name=new_name) # renaming sf directory if 'display names' are used. if not settings.getSFFoldersPattern( ) == settings.AddonConst.SF_XMLTV_ID_PATTERN: joined = join(settings.getSFFolder(translate=True), self.display_name) if exists(joined): rename( joined, join(settings.getSFFolder(translate=True), new_name)) else: mkdir( join(settings.getSFFolder(translate=True), new_name)) self.display_name = new_name self.titleLabel.setLabel(ACTIONS_EDIT_CHANNEL + "[CR]" + self.display_name) # Update channel logo elif controlId == EditControls.CHANNEL_LOGO_UPDATE: source = xbmcgui.Dialog().select( EDIT_LOGO_HEADER, [EDIT_LOGO_FROM_LOCAL, EDIT_LOGO_THE_LOGODB]) # Start local source dialog browser if source == 0: n_logo = xbmcgui.Dialog().browse(2, EDIT_LOGO_HEADER, 'files') if not n_logo is None: name = str(uuid4()) + n_logo[n_logo.rfind(r"."):] dest = join(settings.getChannelsLogoPath(), name) try: copy(n_logo, dest) epgDb.updateChannel(self.id_channel, logo=name) except: if settings.DEBUG: notify(EDIT_LOGO_ERROR) del database del cursor epgDb.close() del epgDb return # Start TheLogoDb search elif source == 1: thelogodb = TheLogoDbChannel(self.display_name) if thelogodb.search(): progress = xbmcgui.DialogProgress() progress.create(DIALOG_TITLE, SFX_ICONS_DOWNLOAD) # Display found logos. logos = thelogodb.getLogos() logos_local = [] import ssl from urllib2 import urlopen, HTTPError from os.path import isdir from shutil import rmtree ssl._create_default_https_context = ssl._create_unverified_context dest_dir = join( xbmc.translatePath("special://home/temp"), "logos_tmp") if not isdir(dest_dir): mkdir(dest_dir) i = 1 for logo in logos: progress.update(int((i / float(len(logos))) * 100), "", EDIT_LOGOS_SEARCH) try: if not logo is None: dest_file = join( dest_dir, logo[logo.rfind(r"/") + 1:]) download = urlopen(logo, timeout=30) tsf = open(dest_file, "w") tsf.write(download.read()) tsf.close() del tsf logos_local.append(dest_file) i += 1 except HTTPError as e: if e.code in [ 304, 301, 400, 401, 403, 404, 500, 502, 503, 504 ]: notify(EDIT_LOGO_ERROR) progress.close() progress.close() self.win_logo.addToList(logos_local) self.win_logo.id_channel = self.id_channel self.win_logo.doModal() refreshSkin = self.win_logo.refresh rmtree(dest_dir) else: xbmcgui.Dialog().ok(EDIT_LOGO_HEADER, EDIT_NO_LOGO_FOUND) del database del cursor epgDb.close() del epgDb if not self.parent is None and refreshSkin: self.parent.refresh() # Program actions. elif controlId in [ EditControls.PROGRAM_REMINDER, EditControls.PROGRAM_START ]: if controlId == EditControls.PROGRAM_REMINDER: database, cursor = connectEpgDB() epgDb = EpgDb(database, cursor) if epgDb.hasReminder(self.program_id): self.getControl(EditControls.PROGRAM_REMINDER).setLabel( ACTIONS_PROGRAM_REMIND) epgDb.removeReminder(self.program_id) else: self.getControl(EditControls.PROGRAM_REMINDER).setLabel( ACTIONS_PROGRAM_FORGET_REMIND) epgDb.addReminder(self.program_id) if not self.parent is None and refreshSkin: self.parent.refresh() del database del cursor epgDb.close() del epgDb elif controlId == EditControls.PROGRAM_START: database, cursor = connectEpgDB() request = "SELECT logo FROM channels WHERE id=%i" % self.id_channel cursor.execute(request) logo = cursor.fetchone()[0] del cursor del database logo_channel = "" if not logo is None: logo_channel = join(getChannelsLogoPath(), logo) self.win_sf.setChannel(self.id_channel, logo_channel) self.win_sf.doModal() del self.win_sf self.close()
def displayChannels(self): self.reset(clear_grid=True) EPG_page = self.__getGridPortion() gridControls = [] idx = 0 for channel in EPG_page: y = self.top + self.cellHeight * idx + int((self.cellHeight / 14)) if not settings.useXMLTVSourceLogos(): pchannel = xbmcgui.ControlLabel( 16, y + 2, 180, self.cellHeight - 8, "[B]" + channel["display_name"] + "[/B]") else: logo = channel["logo"] if logo != "" and logo is not None: logo = join(settings.getChannelsLogoPath(), logo) if exists(logo): pchannel = xbmcgui.ControlImage(16, y + 2, 170, self.cellHeight - 8, logo, aspectRatio=2) else: pchannel = xbmcgui.ControlLabel( 16, y + 2, 180, self.cellHeight - 8, "[B]" + channel["display_name"] + "[/B]") else: pchannel = xbmcgui.ControlLabel( 16, y + 2, 180, self.cellHeight - 8, "[B]" + channel["display_name"] + "[/B]") gridControls.append(pchannel) self.labelControls.append(pchannel) # Program details. controls_x_grid = [] programs = channel["programs"] if len(programs) == 0: pbutton = xbmcgui.ControlButton( self.left, self.top + self.cellHeight * idx, self.right - self.left - 2, self.cellHeight - 2, PROGRAM_NO_INFOS, settings.getFocusTexture(), settings.getNoFocusTexture()) gridControls.append(pbutton) controls_x_grid.append({ "db_id": None, "desc": PROGRAM_NO_INFOS, "title": PROGRAM_NO_INFOS, "start": None, "stop": None, "control": pbutton, "cdisplay_name": channel["display_name"], "cdb_id": channel["db_id"], "logo": channel["logo"] }) for program in programs: program_start = strToDatetime(program["start"]) program_end = strToDatetime(program["end"]) deltaStart = program_start - self.start_time deltaStop = program_end - self.start_time y = self.top + self.cellHeight * idx x = self.secondsToX(deltaStart.seconds) if deltaStart.days < 0: x = self.left width = self.secondsToX(deltaStop.seconds) - x if x + width > self.right: width = self.right - x width -= 2 if width < 28: program["title"] = "" if not settings.useProgramsReminder(): focusTexture = settings.getFocusTexture() noFocusTexture = settings.getNoFocusTexture() else: # Checking if program is to be reminded. database, cursor = connectEpgDB() epgDb = EpgDb(database, cursor) remind = epgDb.hasReminder(int(program["db_id"])) epgDb.close() del database del cursor del epgDb if remind: focusTexture = settings.getReminderFocusTexture() noFocusTexture = settings.getReminderNoFocusTexture() else: focusTexture = settings.getFocusTexture() noFocusTexture = settings.getNoFocusTexture() pbutton = xbmcgui.ControlButton(x, y, width, self.cellHeight - 2, program["title"], noFocusTexture=noFocusTexture, focusTexture=focusTexture) gridControls.append(pbutton) controls_x_grid.append({ "db_id": program["db_id"], "desc": program["desc"], "title": program["title"], "start": program_start, "stop": program_end, "control": pbutton, "cdisplay_name": channel["display_name"], "cdb_id": channel["db_id"], "logo": channel["logo"] }) self.append(controls_x_grid) idx += 1 self.window.addControls(gridControls)
def __init__(self): self.database, self.cursor = connectEpgDB() self.epg_db = EpgDb(self.database, self.cursor)