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 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()