Beispiel #1
0
    def insert_resume(self, meta):
        title = self.str_conv(meta['title'])
        site = QuotePlus(meta['site'])
        point = meta['point']
        total = meta['total']
        ex = "DELETE FROM resume WHERE title = '%s'" % title
        try:
            self.dbcur.execute(ex)
        except Exception:
            VSlog('SQL ERROR - ' + ex)
            pass

        try:
            ex = 'INSERT INTO resume (title, hoster, point, total) VALUES (?, ?, ?, ?)'
            self.dbcur.execute(ex, (title, site, point, total))
            self.db.commit()
        except Exception as e:
            if 'no such column' in str(e) or 'no column named' in str(
                    e) or 'no such table' in str(e):
                self._create_tables('resume')
                VSlog('Table recreated : resume')

                # Deuxieme tentative
                self.dbcur.execute(ex, (title, site, point, total))
                self.db.commit()
            else:
                VSlog('SQL ERROR INSERT : %s' % e)
Beispiel #2
0
    def GetHtml(self, url, data=None):
        self.hostComplet = re.sub('(https*:\/\/[^/]+)(\/*.*)', '\\1', url)
        self.host = re.sub('https*:\/\/', '', self.hostComplet)
        self.url = url

        # on cherche des precedents cookies
        cookies = GestionCookie().Readcookie(self.host.replace('.', '_'))
        htmlcontent = self.htmlrequest(url, cookies, data)

        if not self.CheckIfActive(htmlcontent):
            return htmlcontent
        elif "recaptcha3key" in htmlcontent:
            dialog().VSok('Recaptcha active, reessayer plus tard')
            return htmlcontent

        # on cherche le nouveau cookie
        try:
            cookies = self.DecryptCookie(htmlcontent)
        except:
            VSlog('Erreur decodage Stormwall')
            return ''

        VSlog('Protection Stormwall active')

        GestionCookie().SaveCookie(self.host.replace('.', '_'), cookies)
        htmlcontent = self.htmlrequest(url, cookies, data)

        return htmlcontent
Beispiel #3
0
    def getAvailablePlugins(self, sLabel):
        addons = addon()
        sFolder = "/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/addons/resources/sites"
        sFolder = sFolder.replace('\\', '/')
        VSlog("Sites Folder: " + sFolder)

        aFileNames = self.__getFileNamesFromFolder(sFolder)

        aPlugins = []
        for sFileName in aFileNames:
            VSlog("Load Plugin: " + str(sFileName))

            # wir versuchen das plugin zu importieren
            aPlugin = self.__importPlugin(sFileName, sLabel)
            if (aPlugin[0] != False):
                sSiteUrl = aPlugin[0]
                sPluginSettingsName = aPlugin[1]
                sSiteDesc = aPlugin[2]
                sSiteName = aPlugin[3]

                # existieren zu diesem plugin die an/aus settings
                bPlugin = addons.getSetting(sPluginSettingsName)
                if (bPlugin != ''):
                    # settings gefunden
                    if (bPlugin == 'true'):
                        aPlugins.append(
                            self.__createAvailablePluginsItem(
                                sSiteUrl, sSiteName, sFileName, sSiteDesc))
                else:
                    # settings nicht gefunden, also schalten wir es trotzdem sichtbar
                    aPlugins.append(
                        self.__createAvailablePluginsItem(
                            sSiteUrl, sSiteName, sFileName, sSiteDesc))

        return aPlugins
Beispiel #4
0
    def _cache_save_season(self, meta, season):
        for s in meta['season']:
            if s['season_number'] != None and (
                    '%02d' % int(s['season_number'])) == season:
                meta['s_poster_path'] = s['poster_path']
                meta['s_overview'] = s['overview']
                meta['s_premiered'] = s['air_date']
                meta['s_year'] = s['air_date']
                try:
                    if 's_premiered' in meta and meta['s_premiered']:
                        meta['s_year'] = int(meta['s_premiered'][:4])
                except:
                    pass

            try:
                sql = 'INSERT or IGNORE INTO season (imdb_id, tmdb_id, season, year, premiered, poster_path, playcount, overview) VALUES ' \
                      '(?, ?, ?, ?, ?, ?, ?, ?)'
                self.dbcur.execute(
                    sql, (meta['imdb_id'], s['id'], s['season_number'],
                          s['air_date'], s['air_date'], s['poster_path'], 6,
                          s['overview']))

                self.db.commit()
#                 VSlog('SQL INSERT Successfully')
            except Exception as e:
                if 'no such column' in str(e) or 'no column named' in str(e):
                    self.__createdb('season')
                    VSlog('Table recreated')

                    self.dbcur.execute(sql_select)
                    matchedrow = self.dbcur.fetchone()
                else:
                    VSlog('SQL ERROR INSERT into table season')
                pass
Beispiel #5
0
    def __init__(self, api_key='', debug=False, lang='fr'):

        self.ADDON = addon()

        self.api_key = self.ADDON.getSetting('api_tmdb')
        self.debug = debug
        self.lang = lang
        self.poster = 'https://image.tmdb.org/t/p/%s' % self.ADDON.getSetting(
            'poster_tmdb')
        self.fanart = 'https://image.tmdb.org/t/p/%s' % self.ADDON.getSetting(
            'backdrop_tmdb')

        try:
            if not xbmcvfs.exists(self.CACHE):
                # f = open(self.cache, 'w')
                # f.close()
                self.db = sqlite.connect(self.REALCACHE)
                self.db.row_factory = sqlite.Row
                self.dbcur = self.db.cursor()
                self.__createdb()
                return
        except:
            VSlog('Error: Unable to write on %s' % self.REALCACHE)
            pass

        try:
            self.db = sqlite.connect(self.REALCACHE)
            self.db.row_factory = sqlite.Row
            self.dbcur = self.db.cursor()
        except:
            VSlog('Error: Unable to connect to %s' % self.REALCACHE)
            pass
Beispiel #6
0
def GetURL_MAIN():
    ADDON = addon()
    # MemorisedHost = ''
    oInputParameterHandler = cInputParameterHandler()
    sUrl = oInputParameterHandler.getValue('siteUrl')
    Sources = oInputParameterHandler.getValue('function')

    # z = oInputParameterHandler.getAllParameter()
    # VSlog(z)

    # quand vStream load tous les sites on passe >> globalSources
    # quand vStream load a partir du menu home on passe >> callplugin
    # quand vStream fabrique une liste de plugin pour menu(load site globalRun and call function search) >> search
    # quand l'url ne contient pas celle déjà enregistrer dans settings et que c'est pas dlprotect on active.
    if not (
            Sources == 'callpluging' or Sources == 'globalSources'
            or Sources == 'search'
    ) and ADDON.getSetting(
            'ZT'
    )[6:] not in sUrl and 'dl-protect1.' not in sUrl and 'zt-protect.' not in sUrl:
        oRequestHandler = cRequestHandler(URL_HOST)
        oRequestHandler.disableSSL()
        oRequestHandler.request()
        MemorisedHost = oRequestHandler.getRealUrl()
        if MemorisedHost is not None and MemorisedHost != '':
            if 'cf_chl_jschl_tk' not in MemorisedHost:
                ADDON.setSetting('ZT', MemorisedHost)
                VSlog("ZT url  >> " + str(MemorisedHost) + ' sauvegarder >> ' +
                      ADDON.getSetting('ZT'))
        else:
            ADDON.setSetting('ZT', URL_HOST)
            VSlog(
                "Url non changer car egal a None le site peux etre surchager utilisation de >> ADDON.getSetting('ZT')"
            )

        return ADDON.getSetting('ZT')
    else:
        # si pas de zt dans settings on récup l'url une fois dans le site
        if not ADDON.getSetting('ZT') and not (Sources == 'callpluging'
                                               or Sources == 'globalSources'
                                               or Sources == 'search'):
            oRequestHandler = cRequestHandler(URL_HOST)
            oRequestHandler.disableSSL()
            oRequestHandler.request()
            MemorisedHost = oRequestHandler.getRealUrl()
            if MemorisedHost is not None and MemorisedHost != '':
                if 'cf_chl_jschl_tk' not in MemorisedHost:
                    ADDON.setSetting('ZT', MemorisedHost)
                    VSlog("ZT url vide  >> " + str(MemorisedHost) +
                          ' sauvegarder >> ' + ADDON.getSetting('ZT'))
            else:
                ADDON.setSetting('ZT', URL_HOST)
                VSlog(
                    "Url non changer car egal a None le site peux etre surcharger utilisation de >> ADDON.getSetting('ZT')"
                )

            return ADDON.getSetting('ZT')
        else:
            VSlog("ZT pas besoin d'url")
            return ADDON.getSetting('ZT')
Beispiel #7
0
    def new_getaddrinfo(self, *args):
        try:
            import sys
            import dns.resolver

            path = VSPath('special://home/addons/script.module.dnspython/lib/').decode('utf-8')
            if path not in sys.path:
                sys.path.append(path)
            host = args[0]
            port = args[1]
            # Keep the domain only: http://example.com/foo/bar => example.com
            if "//" in host:
                host = host[host.find("//"):]
            if "/" in host:
                host = host[:host.find("/")]
            resolver = dns.resolver.Resolver(configure=False)
            # Résolveurs DNS ouverts: https://www.fdn.fr/actions/dns/
            resolver.nameservers = ['80.67.169.12', '2001:910:800::12', '80.67.169.40', '2001:910:800::40']
            answer = resolver.query(host, 'a')
            host_found = str(answer[0])
            VSlog("new_getaddrinfo found host %s" % host_found)
            # Keep same return schema as socket.getaddrinfo (family, type, proto, canonname, sockaddr)
            return [(2, 1, 0, '', (host_found, port)), (2, 1, 0, '', (host_found, port))]
        except Exception as e:
            VSlog("new_getaddrinfo ERROR: {0}".format(e))
            return self.save_getaddrinfo(*args)
Beispiel #8
0
    def _cache_save_episode(self, meta, season, episode):
        try:
            sql = 'INSERT or IGNORE INTO episode (tmdb_id, season, episode, year, title, premiered, poster_path, plot, rating, votes, director, writer, guest_stars, tagline) VALUES ' \
                  '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
            self.dbcur.execute(
                sql, (meta['tmdb_id'], season, episode, meta['year'],
                      meta['title'], meta['premiered'], meta['poster_path'],
                      meta['plot'], meta['rating'], meta['votes'],
                      meta['director'], meta['writer'], ''.join(
                          meta.get('guest_stars', "")), meta["tagline"]))
            self.db.commit()
        except Exception as e:
            VSlog(str(e))
            if 'no such column' in str(e) or 'no column named' in str(e):
                self.__createdb('episode')
                VSlog('Table recreated')

                # Deuxieme tentative
                self.dbcur.execute(
                    sql,
                    (meta['tmdb_id'], season, episode, meta['year'],
                     meta['title'], meta['premiered'], meta['poster_path'],
                     meta['plot'], meta['rating'], meta['votes'],
                     meta['director'], meta['writer'], ''.join(
                         meta.get('guest_stars', "")), meta.get("tagline",
                                                                "")))
                self.db.commit()
            else:
                VSlog('SQL ERROR INSERT into table episode')
            pass
Beispiel #9
0
    def __getMediaLinkForGuest(self):
        Token_Alldebrid = cPremiumHandler(
            self.getPluginIdentifier()).getToken()
        if Token_Alldebrid:
            sUrl_Bypass = "******" + Token_Alldebrid + "&link=" + self.__sUrl
        else:
            return False, False

        oRequest = cRequestHandler(sUrl_Bypass)
        sHtmlContent = json.loads(oRequest.request())

        if 'error' in sHtmlContent:
            if sHtmlContent['error']['code'] == 'LINK_HOST_NOT_SUPPORTED':
                return False, self.__sUrl  # si alldebrid ne prend pas en charge ce type de lien, on retourne le lien pour utiliser un autre hoster
            else:
                VSlog('Hoster Alldebrid - Error: ' +
                      sHtmlContent["error"]['code'])
                return False, False

        api_call = HostURL = sHtmlContent["data"]["link"]
        try:
            mediaDisplay = HostURL.split('/')
            VSlog('Hoster Alldebrid - play : %s/ ... /%s' %
                  ('/'.join(mediaDisplay[0:3]), mediaDisplay[-1]))
        except:
            VSlog('Hoster Alldebrid - play : ' + HostURL)

        if (api_call):
            # api_call = api_call + '|User-Agent=Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0'
            return True, api_call

        return False, False
Beispiel #10
0
    def insert_watched(self, meta):
        title = meta['title']
        if not title:
            return
        cat = meta['cat'] if 'cat' in meta else '1'

        ex = 'INSERT INTO watched (title, cat) VALUES (?, ?)'
        try:
            self.dbcur.execute(ex, (title, cat))
            self.db.commit()
            VSlog('SQL INSERT watched Successfully')
        except Exception as e:
            if 'no such column' in str(e) or 'no column named' in str(
                    e) or 'no such table' in str(e):
                if 'named cat' in str(e):  # ajout nouvelle colonne 'cat'
                    self.dbcur.execute(
                        "ALTER TABLE watched add column cat TEXT")
                    self.db.commit()
                    VSlog('Table recreated : watched')

                    # Deuxieme tentative
                    self.dbcur.execute(ex, (title, cat))
                    self.db.commit()
            else:
                VSlog('SQL ERROR INSERT watched : title = %s' % e)
Beispiel #11
0
    def _cache_save_season(self, meta, season):
        if 'air_date' in meta and meta['air_date']:
            premiered = meta['air_date']
        elif 'premiered' in meta and meta['premiered']:
            premiered = meta['premiered']
        else:
            premiered = 0

        s_year = 0
        if 'year' in meta and meta['year']:
            s_year = meta['year']
        else:
            try:
                if premiered:
                    s_year = int(premiered[:4])
            except:
                pass

        if 'season_number' in meta:
            season = meta['season_number']
        elif 'season' in meta:
            season = meta['season']

        if 'overview' in meta:
            plot = meta.get('overview', "")
        else:
            plot = ""

        if meta['poster_path']:
            fanart = self.poster + meta['poster_path']
        else:
            fanart = ""

        try:
            sql = 'INSERT or IGNORE INTO season (tmdb_id, season, year, premiered, poster_path, plot, episode) VALUES '\
                  '(?, ?, ?, ?, ?, ?, ?)'
            self.dbcur.execute(sql,
                               (meta['tmdb_id'], season, s_year, premiered,
                                fanart, plot, meta.get('episode_count', 0)))
            self.db.commit()
        except Exception as e:
            VSlog(str(e))
            if 'no such column' in str(e) or 'no column named' in str(e):
                self.__createdb('season')
                VSlog('Table recreated')

                # Deuxieme tentative
                self.dbcur.execute(
                    sql, (meta['tmdb_id'], season, s_year, premiered, fanart,
                          plot, meta.get('episode_count', 0)))
                self.db.commit()
            else:
                VSlog('SQL ERROR INSERT into table season')
            pass
Beispiel #12
0
 def __importPlugin(self, sName):
     try:
         exec("from Plugins.Extensions.IPTVPlayer.tsiplayer.addons.resources.sites import " + sName, globals())
         exec("sSiteName = " + sName + ".SITE_NAME", globals())
         exec("sSiteDesc = " + sName + ".SITE_DESC", globals())
         sPluginSettingsName = 'plugin_' + sName
         return sSiteName, sPluginSettingsName, sSiteDesc
     except Exception as e:
         VSlog("Cannot import plugin " + str(sName))
         VSlog("Detail de l\'erreur " + str(e))
         return False, False
Beispiel #13
0
def UnlockUrl(url2=None):
    headers9 = {
        'User-Agent': UA,
        'Referer': 'https://www.flashx.co/dl?playthis'
    }

    url1 = 'https://www.flashx.co/js/code.js'
    if url2:
        url1 = url2

    if not url1.startswith('http'):
        url1 = 'https:' + url1

    VSlog('Test unlock url :' + url1)

    oRequest = cRequestHandler(url1)
    oRequest.addParameters('User-Agent', UA)
    # oRequest.addParameters('Accept', '*/*')
    # oRequest.addParameters('Accept-Encoding', 'gzip, deflate, br')
    # oRequest.addParameters('Accept-Language', 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3')
    oRequest.addParameters('Referer', 'https://www.flashx.co/dl?playthis')
    code = oRequest.request()

    url = ''
    if not code:
        url = oRequest.getRealUrl()
        VSlog('Redirection :' + url)
    else:
        # VSlog(code)
        aResult = re.search("!= null\){\s*\$.get\('([^']+)', *{(.+?)}", code, re.DOTALL)
        if aResult:
            dat = aResult.group(2)
            dat = dat.replace("'", '')
            dat = dat.replace(" ", '')

            dat2 = dict(x.split(':') for x in dat.split(','))

            dat3 = aResult.group(1) + '?'
            for i, j in dat2.items():
                dat3 = dat3 + str(i) + '=' + str(j) + '&'

            url = dat3[:-1]

    # url = 'https://www.flashx.tv/flashx.php?fxfx=6'

    if url:
        VSlog('Good Url :' + url1)
        VSlog(url)
        GetHtml(url, headers9)
        return True

    VSlog('Bad Url :' + url1)

    return False
Beispiel #14
0
    def GetRedirectHtml(self, web_url, sId, NoEmbed=False):

        headers = {
            # 'Host': 'www.flashx.tv',
            'User-Agent': UA,
            # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            # 'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3',
            'Referer': 'http://embed.flashx.tv/embed.php?c=' + sId,
            'Accept-Encoding': 'identity'
            }

        MaxRedirection = 3
        while MaxRedirection > 0:

            # generation headers
            # headers2 = headers
            # headers2['Host'] = self.GetHost(web_url)

            VSlog(str(MaxRedirection) + ' Test sur : ' + web_url)
            request = urllib2.Request(web_url, None, headers)

            redirection_target = web_url

            try:
                # ok ca a enfin marche
                reponse = urllib2.urlopen(request)
                sHtmlContent = reponse.read()
                reponse.close()

                if not (reponse.geturl() == web_url) and not (reponse.geturl() == ''):
                    redirection_target = reponse.geturl()
                else:
                    break
            except UrlError as e:
                if (e.code == 301) or (e.code == 302):
                    redirection_target = e.headers['Location']
                else:
                    # VSlog(str(e.code))
                    # VSlog(str(e.read()))
                    return False

            web_url = redirection_target

            if 'embed' in redirection_target and NoEmbed:
                # rattage, on a pris la mauvaise url
                VSlog('2')
                return False

            MaxRedirection = MaxRedirection - 1

        return sHtmlContent
Beispiel #15
0
    def _cache_save(self, meta, name, media_type, season, year):

        # Pas de cache pour les personnes ou les distributeurs
        if media_type in ('person', 'network'):
            return

        # cache des séries et animes
        if media_type == 'tvshow' or media_type == 'anime':
            return self._cache_save_tvshow(meta, name, 'tvshow', season, year)

        # cache des collections
        if media_type == 'collection':
            media_type = 'movie'  # On utilise la même table que pour les films
            if not name.endswith('saga'):
                name += 'saga'

        # sauvegarde de la durée en minutes, pour le retrouver en minutes comme le fait TMDB
        runtime = 0
        if 'duration' in meta and meta['duration']:
            runtime = int(meta['duration']) / 60

        if not year and 'year' in meta:
            year = meta['year']

        # sauvegarde movie dans la BDD
        # year n'est pas forcement l'année du film mais l'année utilisée pour la recherche
        try:
            sql = 'INSERT or IGNORE INTO %s (imdb_id, tmdb_id, title, year, credits, writer, director, tagline, vote_average, vote_count, runtime, ' \
                  'overview, mpaa, premiered, genre, studio, status, poster_path, trailer, backdrop_path, playcount) ' \
                  'VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' % media_type
            self.dbcur.execute(
                sql,
                (meta['imdb_id'], meta['tmdb_id'], name, year, meta['credits'],
                 meta['writer'], meta['director'], meta['tagline'],
                 meta['rating'], meta['votes'], str(runtime), meta['plot'],
                 meta['mpaa'], meta['premiered'], meta['genre'],
                 meta['studio'], meta['status'], meta['poster_path'],
                 meta['trailer'], meta['backdrop_path'], 0))
            self.db.commit()
#             VSlog('SQL INSERT Successfully')
        except Exception as e:
            if 'no such column' in str(e) or 'no column named' in str(e):
                self.__createdb(media_type)
                VSlog('Table recreated')

                self.dbcur.execute(sql_select)
                matchedrow = self.dbcur.fetchone()
            else:
                VSlog('SQL ERROR INSERT into table ' + media_type)
            pass
Beispiel #16
0
    def insert_watched(self, meta):
        title = meta['title']
        if not title:
            return

        site = QuotePlus(meta['site'])
        ex = 'INSERT INTO watched (title, site) VALUES (?, ?)'
        try:
            self.dbcur.execute(ex, (title, site))
            self.db.commit()
            VSlog('SQL INSERT watched Successfully')
        except Exception:
            VSlog('SQL ERROR INSERT watched : title = %s, site = %s' %
                  (title, site))
            pass
Beispiel #17
0
    def DecryptCookie(self, content):
        # Le nom peut varie selon les pages.
        if "const" in content:
            parseName = "const"
        else:
            parseName = "var"

        self.cE = re.search(parseName + ' cE = "([^"]+)"',
                            str(content)).group(1)
        self.cK = re.search(parseName + ' cK = ([0-9]+)',
                            str(content)).group(1)
        self.cN = re.search(parseName + ' cN = "([^"]+)"',
                            str(content)).group(1)
        self.cO = re.search(parseName + ' cO = "([^"]+)"',
                            str(content)).group(1)

        self.a = []
        self.b = {}

        for i in range(len(self._0xbd1168)):
            self.a.append(self._0xbd1168[i])
            self.b[self._0xbd1168[i]] = i

        _0x3b45bc = self.func5(self.cK, self.cE)

        VSlog('cookie : ' + self.cN + "=" + _0x3b45bc)
        return self.cN + "=" + _0x3b45bc
Beispiel #18
0
def decodex(x):
    from itertools import chain
    import base64

    x = x.replace('https://www.youtube.com/embed/', '')

    missing_padding = len(x) % 4
    if missing_padding:
        x += '=' * (4 - missing_padding)

    VSlog(x)

    try:
        e = base64.b64decode(x)
        t = ''
        r = "ETEfazefzeaZa13MnZEe"
        a = 0

        px = chain(e)
        for y in list(px):
            if isMatrix():
                t += chr(int(175 ^ y) - ord(r[a]))
            else:
                t += chr(int(175 ^ ord(y[0])) - ord(r[a]))
            a = 0 if a > len(r) - 2 else a + 1
        return t
    except:
        return ''

    return ''
Beispiel #19
0
    def addToPlaylist(self):
        oGui = cGui()
        oInputParameterHandler = cInputParameterHandler()
        sHosterIdentifier = oInputParameterHandler.getValue(
            'sHosterIdentifier')
        sMediaUrl = oInputParameterHandler.getValue('sMediaUrl')
        bGetRedirectUrl = oInputParameterHandler.getValue('bGetRedirectUrl')
        sFileName = oInputParameterHandler.getValue('sFileName')

        if bGetRedirectUrl == 'True':
            sMediaUrl = self.__getRedirectUrl(sMediaUrl)

        VSlog('Hoster - playlist ' + sMediaUrl)
        oHoster = self.getHoster(sHosterIdentifier)
        oHoster.setFileName(sFileName)

        oHoster.setUrl(sMediaUrl)
        aLink = oHoster.getMediaLink()

        if aLink[0]:
            oGuiElement = cGuiElement()
            oGuiElement.setSiteName(self.SITE_NAME)
            oGuiElement.setMediaUrl(aLink[1])
            oGuiElement.setTitle(oHoster.getFileName())

            from Plugins.Extensions.IPTVPlayer.tsiplayer.addons.resources.lib.player import cPlayer
            oPlayer = cPlayer()
            oPlayer.addItemToPlaylist(oGuiElement)
            dialog().VSinfo(str(oHoster.getFileName()), 'Playlist')
            return

        oGui.setEndOfDirectory()
Beispiel #20
0
    def del_viewing(self, meta):
        sTitleWatched = meta['titleWatched'] if 'titleWatched' in meta else None

        sql_deleteCat = ""
        if not sTitleWatched:  # delete all
            sql_delete = "DELETE FROM viewing"
        else:
            sql_deleteTitle = "DELETE FROM viewing WHERE title_id = '%s'" % sTitleWatched
            if 'cat' in meta:
                sql_deleteCat = " and cat = '%s'" % meta['cat']
            sql_delete = sql_deleteTitle + sql_deleteCat

        update = 0
        from Plugins.Extensions.IPTVPlayer.tsiplayer.addons.resources.lib.gui.gui import cGui
        try:
            self.dbcur.execute(sql_delete)
            self.db.commit()
            update = self.db.total_changes

            # si pas trouvé, on essaie sans la cat, juste le titre
            if not update and sql_deleteCat:
                del meta['cat']
                return self.del_viewing(meta)

            return True
        except Exception as e:
            VSlog('SQL ERROR %s, error = %s' % (sql_delete, e))

        return update
Beispiel #21
0
    def getMediaLink(self):
        self.oPremiumHandler = cPremiumHandler(self.getPluginIdentifier())
        if (self.oPremiumHandler.isPremiumModeAvailable()):
            ADDON = addon()

            try:
                mDefault = int(ADDON.getSetting("hoster_uptobox_mode_default"))
            except AttributeError:
                mDefault = 0

            if mDefault == 0:
                ret = dialog().VSselect([
                    'Passer en Streaming (via Uptostream)',
                    'Rester en direct (via Uptobox)'
                ], 'Choissisez votre mode de fonctionnement')
            else:
                # 0 is ask me, so 1 is uptostream and so on...
                ret = mDefault - 1

            # mode stream
            if ret == 0:
                return self.__getMediaLinkForGuest()
            # mode DL
            if ret == 1:
                return self.__getMediaLinkByPremiumUser()

            return False

        else:
            VSlog('UPTOBOX - no premium')
            return self.__getMediaLinkForGuest()
Beispiel #22
0
    def _cache_save_tvshow(self, meta, name, media_type, season, year):

        # ecrit les saisons dans la BDD
        if 'seasons' in meta:
            self._cache_save_season(meta, season)
            del meta['seasons']

        if not year and 'year' in meta:
            year = meta['year']

        # sauvegarde de la durée en minutes, pour le retrouver en minutes comme le fait TMDB
        runtime = 0
        if 'duration' in meta and meta['duration']:
            runtime = int(meta['duration']) / 60

        # sauvegarde tvshow dans la BDD
        try:
            sql = 'INSERT INTO %s (imdb_id, tmdb_id, title, year, credits, writer, director, vote_average, vote_count, runtime, ' \
                  'overview, mpaa, premiered, genre, studio, status, poster_path, trailer, backdrop_path, playcount) ' \
                  'VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' % media_type
            self.dbcur.execute(
                sql, (meta['imdb_id'], meta['tmdb_id'], name, year,
                      meta['credits'], meta['writer'], meta['director'],
                      meta['rating'], meta['votes'], runtime, meta['plot'],
                      meta['mpaa'], meta['premiered'], meta['genre'],
                      meta['studio'], meta['status'], meta['poster_path'],
                      meta['trailer'], meta['backdrop_path'], 0))
            self.db.commit()
#             VSlog('SQL INSERT Successfully')
        except Exception as e:
            VSlog('SQL ERROR INSERT into table ' + media_type)
            pass
Beispiel #23
0
    def get_watched(self, meta):
        title = meta['title']
        if not title:
            return False
        cat = meta['cat'] if 'cat' in meta else '1'

        sql_select = "SELECT * FROM watched WHERE title = '%s'" % title

        try:
            self.dbcur.execute(sql_select)
            matchedrow = self.dbcur.fetchall()

            # Gestion des homonymes films / séries
            # Si la cat est enregistrée, on vérifie si c'est la même
            for data in matchedrow:
                matchedcat = data['cat']
                if matchedcat:
                    return int(matchedcat) == int(cat)

            if matchedrow:
                return True
            return False
        except Exception as e:
            if 'no such column' in str(e) or 'no column named' in str(
                    e) or 'no such table' in str(e):
                # Deuxieme tentative, sans la cat
                sql_select = "SELECT * FROM watched WHERE title = '%s'" % title
                self.dbcur.execute(sql_select)
                return 1 if self.dbcur.fetchall() else 0
            else:
                VSlog('SQL ERROR %s' % sql_select)
            return False
Beispiel #24
0
    def insert_download(self, meta):

        title = self.str_conv(meta['title'])
        url = QuotePlus(meta['url'])
        sIcon = QuotePlus(meta['icon'])
        sPath = meta['path']
        ex = 'INSERT INTO download (title, url, path, cat, icon, size, totalsize, status) VALUES (?, ?, ?, ?, ?, ?, ?, ?)'

        try:
            self.dbcur.execute(
                ex, (title, url, sPath, meta['cat'], sIcon, '', '', 0))
            self.db.commit()
            VSlog('SQL INSERT download Successfully')
            dialog().VSinfo(addon().VSlang(30042), meta['title'])
        except Exception:
            VSlog('SQL ERROR INSERT into download')
            pass
Beispiel #25
0
    def _cache_search(self,
                      media_type,
                      name,
                      tmdb_id='',
                      year='',
                      season='',
                      episode=''):
        if media_type == 'movie':
            sql_select = 'SELECT * FROM movie'
            if tmdb_id:
                sql_select = sql_select + ' WHERE tmdb_id = \'%s\'' % tmdb_id
            else:
                sql_select = sql_select + ' WHERE title = \'%s\'' % name

            if year:
                sql_select = sql_select + ' AND year = %s' % year

        elif media_type == 'collection':
            sql_select = 'SELECT * FROM movie'
            if tmdb_id:
                sql_select = sql_select + ' WHERE tmdb_id = \'%s\'' % tmdb_id
            else:
                if not name.endswith('saga'):
                    name += 'saga'
                sql_select = sql_select + ' WHERE title = \'%s\'' % name

        elif media_type == 'tvshow' or media_type == 'anime':

            sql_select = 'SELECT * FROM tvshow'
            if season:
                sql_select = 'SELECT *, season.poster_path as s_poster_path, season.premiered as s_premiered, ' \
                             'season.year as s_year FROM tvshow LEFT JOIN season ON tvshow.imdb_id = season.imdb_id '
            if tmdb_id:
                sql_select = sql_select + ' WHERE tvshow.tmdb_id = \'%s\'' % tmdb_id
            else:
                sql_select = sql_select + ' WHERE tvshow.title = \'%s\'' % name

            if year:
                sql_select = sql_select + ' AND tvshow.year = %s' % year

            if season:
                sql_select = sql_select + ' AND season.season = \'%s\'' % season
        else:
            return None

        try:
            self.dbcur.execute(sql_select)
            matchedrow = self.dbcur.fetchone()
        except Exception as e:
            VSlog('************* Error selecting from cache db: %s' % e, 4)
            return None

        if matchedrow:
            #             VSlog('Found meta information by name in cache table')
            return dict(matchedrow)
        else:
            #             VSlog('No match in local DB')
            return None
Beispiel #26
0
 def cancel_download(self):
     sql_select = "UPDATE download SET status = '0' WHERE status = '1'"
     try:
         self.dbcur.execute(sql_select)
         self.db.commit()
         return False, False
     except Exception:
         VSlog('SQL ERROR %s' % sql_select)
         return False, False
Beispiel #27
0
    def insert_viewing(self, meta):

        if not 'title' in meta:
            return
        if not 'siteurl' in meta:
            return

        title = self.str_conv(meta['title'])
        titleWatched = self.str_conv(meta['titleWatched'])
        siteurl = QuotePlus(meta['siteurl'])
        cat = meta['cat']
        saison = meta['season'] if 'season' in meta else ''
        sTmdbId = meta['sTmdbId'] if 'sTmdbId' in meta else ''

        ex = "DELETE FROM viewing WHERE title_id = '%s' and cat = '%s'" % (
            titleWatched, cat)
        try:
            self.dbcur.execute(ex)
        except Exception:
            VSlog('SQL ERROR - ' + ex)
            pass

        try:
            ex = 'INSERT INTO viewing (tmdb_id, title_id, title, siteurl, site, fav, cat, season) VALUES (?, ?, ?, ?, ?, ?, ?, ?)'
            self.dbcur.execute(ex, (sTmdbId, titleWatched, title, siteurl,
                                    meta['site'], meta['fav'], cat, saison))
            self.db.commit()

            VSlog('SQL INSERT viewing Successfully')
        except Exception as e:
            if 'no such column' in str(e) or 'no column named' in str(
                    e) or 'no such table' in str(e):
                self._create_tables('viewing')
                VSlog('Table recreated : viewing')

                # Deuxieme tentative
                self.dbcur.execute(
                    ex,
                    (meta['sTmdbId'], titleWatched, title, siteurl,
                     meta['site'], meta['fav'], meta['cat'], saison, episode))
                self.db.commit()
            else:
                VSlog('SQL ERROR INSERT : %s' % e)
            pass
Beispiel #28
0
def showSearch():
    VSlog('showSearch global0')
    oGui = cGui()
    addons = addon()
    VSlog('showSearch global1')
    oInputParameterHandler = cInputParameterHandler()
    VSlog('showSearch global2')
    sSearchText = oInputParameterHandler.getValue('searchtext')
    VSlog('showSearch global3')
    sCat = oInputParameterHandler.getValue('sCat')
    VSlog('showSearch global4')
    VSlog('sText=' + str(sSearchText))
    oHandler = cRechercheHandler()
    oHandler.setText(sSearchText)
    oHandler.setCat(sCat)
    aPlugins = oHandler.getAvailablePlugins()
    if not aPlugins:
        return True
    VSlog('aPlugins=' + str(len(aPlugins)))
    total = len(aPlugins)
    progress_ = progress().VScreate(large=True)

    # kodi 17 vire la fenetre busy qui se pose au dessus de la barre de Progress
    try:
        xbmc.executebuiltin('Dialog.Close(busydialog)')
    except:
        pass

    oGui.addText('globalSearch',
                 addons.VSlang(30081) % sSearchText, 'search.png')
    sSearchText = Quote(sSearchText)

    count = 1
    for plugin in aPlugins:
        if not os.path.exists(
                GetCacheSubDir('Tsiplayer') + 'VStream_listing.search'):
            break
        progress_.VSupdate(progress_, total, plugin['name'], True)
        if progress_.iscanceled():
            break
        oGui.addText(plugin['identifier'],
                     '%s. [COLOR olive]%s[/COLOR]' % (count, plugin['name']),
                     'sites/%s.png' % (plugin['identifier']))
        oGui.searchResults[:] = [
        ]  # vider le tableau de résultats pour les récupérer par source

        _pluginSearch(plugin, sSearchText)
        count += 1

    if not count:  # aucune source ne retourne de résultats
        oGui.addText('globalSearch')  # "Aucune information"

    progress_.VSclose(progress_)

    cGui.CONTENT = 'files'

    oGui.setEndOfDirectory()
    return True
Beispiel #29
0
    def insert_resume(self, meta):
        title = self.str_conv(meta['title'])
        site = QuotePlus(meta['site'])
        # hoster = meta['hoster']
        point = meta['point']
        ex = "DELETE FROM resume WHERE title = '%s'" % title
        try:
            self.dbcur.execute(ex)
        except Exception:
            VSlog('SQL ERROR - ' + ex)
            pass

        try:
            ex = 'INSERT INTO resume (title, hoster, point) VALUES (?, ?, ?)'
            self.dbcur.execute(ex, (title, site, point))
            self.db.commit()
        except Exception:
            VSlog('SQL ERROR INSERT resume, title = %s' % title)
            pass
Beispiel #30
0
    def _cache_save_tvshow(self, meta, name, season, year):
        # Ecrit les saisons dans le cache
        for s_meta in meta['season']:
            s_meta['tmdb_id'] = meta['tmdb_id']
            self._cache_save_season(s_meta, season)

        if not year and 'year' in meta:
            year = meta['year']

        # sauvegarde tvshow dans la BDD
        try:
            sql = 'INSERT or IGNORE INTO tvshow (imdb_id, tmdb_id, title, year, cast, crew, writer, director, rating, votes, duration, ' \
                  'plot, mpaa, premiered, genre, studio, status, poster_path, trailer, backdrop_path, nbseasons) ' \
                  'VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
            self.dbcur.execute(
                sql,
                (meta['imdb_id'], meta['tmdb_id'], name, year, meta['cast'],
                 meta['crew'], meta['writer'], meta['director'],
                 meta['rating'], meta['votes'], meta['duration'], meta['plot'],
                 meta['mpaa'], meta['premiered'], meta['genre'],
                 meta['studio'], meta['status'], meta['poster_path'],
                 meta['trailer'], meta['backdrop_path'], meta['nbseasons']))
            self.db.commit()
        except Exception as e:
            VSlog(str(e))
            if 'no such column' in str(e) or 'no column named' in str(e):
                self.__createdb('tvshow')
                VSlog('Table recreated')

                # Deuxieme tentative
                self.dbcur.execute(
                    sql, (meta['imdb_id'], meta['tmdb_id'], name, year,
                          meta['cast'], meta['crew'], meta['writer'],
                          meta['director'], meta['rating'], meta['votes'],
                          meta['duration'], meta['plot'], meta['mpaa'],
                          meta['premiered'], meta['genre'], meta['studio'],
                          meta['status'], meta['poster_path'], meta['trailer'],
                          meta['backdrop_path'], meta['nbseasons']))
                self.db.commit()
            else:
                VSlog('SQL ERROR INSERT into table tvshow')
            pass